normalize heap names
[hiphop-php.git] / hphp / hack / test / ident / test_workers.ml
blobc31b2094e889ee900c59a82febb2dd2842e60e16
1 module Hh_bucket = Bucket (* Bucket is shadowed by Core_kernel *)
3 open Core_kernel
5 module IntKey = struct
6 type t = int
8 let to_string = string_of_int
10 let compare = ( - )
11 end
13 module Ids =
14 SharedMem.NoCache (SharedMem.Immediate) (IntKey)
15 (struct
16 type t = int array
18 let prefix = Prefix.make ()
20 let description = "Test_Ids"
21 end)
23 let entry =
24 WorkerController.register_entry_point ~restore:(fun () ~(worker_id : int) ->
25 Hh_logger.set_id (Printf.sprintf "test_workers %d" worker_id))
27 let () =
28 Daemon.check_entry_point ();
30 let num_workers = 4 in
31 let handle =
32 SharedMem.init
33 ~num_workers
35 SharedMem.global_size = 0;
36 heap_size = 10 * 1024 * 1024;
37 (* 10 MiB *)
38 dep_table_pow = 0;
39 hash_table_pow = 14;
40 (* 256 KiB *)
41 shm_dirs = [];
42 shm_min_avail = 0;
43 log_level = 0;
44 sample_rate = 0.0;
47 let workers =
48 MultiWorker.make
49 ?call_wrapper:None
50 ~saved_state:()
51 ~entry
52 ~nbr_procs:num_workers
53 ~gc_control:(Gc.get ())
54 ~heap_handle:handle
56 let num_jobs = 100 in
57 let ids_per_job = 100 in
58 (* Ensure all ids within a job increase monotonically. *)
59 let job () job_id =
60 let ids = Array.create ~len:ids_per_job 0 in
61 let prev = ref 0 in
62 for i = 0 to ids_per_job - 1 do
63 let id = Ident.tmp () in
64 ids.(i) <- id;
65 assert (!prev < id);
66 prev := id
67 done;
68 Printf.printf "Adding job %d\n" job_id;
69 Ids.add job_id ids;
72 (* Also add some ids from the master process *)
73 let () = job () 0 in
74 let job_id = ref 1 in
75 let next () =
76 let i = !job_id in
77 if i < num_jobs then (
78 incr job_id;
79 Hh_bucket.Job i
80 ) else
81 Hh_bucket.Done
83 let merge () () = () in
84 MultiWorker.call (Some workers) ~neutral:() ~job ~merge ~next;
86 (* Ensure ids are globally unique. *)
87 let all_ids_len = num_jobs * ids_per_job in
88 let all_ids = Array.create ~len:all_ids_len 0 in
89 for job_id = 0 to num_jobs - 1 do
90 let ids = Ids.find_unsafe job_id in
91 for i = 0 to ids_per_job - 1 do
92 all_ids.((job_id * ids_per_job) + i) <- ids.(i)
93 done
94 done;
96 Array.sort ~compare:( - ) all_ids;
98 let prev = ref 0 in
99 for i = 0 to all_ids_len - 1 do
100 let id = all_ids.(i) in
101 assert (!prev < id);
102 prev := id
103 done;