Skip to content

Commit bf0d66d

Browse files
committed
Configure DLA on each bench domain to avoid suspending domains
1 parent ee9387e commit bf0d66d

File tree

1 file changed

+47
-47
lines changed

1 file changed

+47
-47
lines changed

bench/bench.ml

+47-47
Original file line numberDiff line numberDiff line change
@@ -14,47 +14,6 @@ module Times = struct
1414
let runs = ref 0 |> Multicore_magic.copy_as_padded in
1515
Gc.full_major ();
1616
let budget_start = Mtime_clock.elapsed () in
17-
let main domain_i =
18-
for _ = 1 to n_warmups do
19-
if domain_i = 0 then begin
20-
before ();
21-
Gc.major ()
22-
end;
23-
let state = init domain_i in
24-
Barrier.await barrier_before;
25-
work domain_i state;
26-
Barrier.await barrier_after;
27-
if domain_i = 0 then after ()
28-
done;
29-
while !runs < n_runs_min || not !budget_used do
30-
Barrier.await barrier_init;
31-
if domain_i = 0 then begin
32-
before ();
33-
if
34-
let budget_stop = Mtime_clock.elapsed () in
35-
let elapsedf =
36-
Mtime.Span.to_float_ns
37-
(Mtime.Span.abs_diff budget_stop budget_start)
38-
*. (1. /. 1_000_000_000.0)
39-
in
40-
budgetf < elapsedf
41-
then budget_used := true;
42-
incr runs;
43-
Gc.major ()
44-
end;
45-
let state = init domain_i in
46-
Barrier.await barrier_before;
47-
let start = Mtime_clock.elapsed () in
48-
work domain_i state;
49-
let stop = Mtime_clock.elapsed () in
50-
Barrier.await barrier_after;
51-
if domain_i = 0 then after ();
52-
Stack.push
53-
(Mtime.Span.to_float_ns (Mtime.Span.abs_diff stop start)
54-
*. (1. /. 1_000_000_000.0))
55-
results.(domain_i)
56-
done
57-
in
5817
let prepare_for_await () =
5918
let open struct
6019
type state = Init | Released | Awaiting of { mutable released : bool }
@@ -80,12 +39,53 @@ module Times = struct
8039
in
8140
Domain_local_await.{ release; await }
8241
in
83-
Domain_local_await.using ~prepare_for_await ~while_running:(fun () ->
84-
let domains =
85-
Array.init n_domains @@ fun domain_i ->
86-
Domain.spawn @@ fun () -> main domain_i
87-
in
88-
Array.iter Domain.join domains);
42+
let main domain_i =
43+
Domain_local_await.using ~prepare_for_await ~while_running:(fun () ->
44+
for _ = 1 to n_warmups do
45+
if domain_i = 0 then begin
46+
before ();
47+
Gc.major ()
48+
end;
49+
let state = init domain_i in
50+
Barrier.await barrier_before;
51+
work domain_i state;
52+
Barrier.await barrier_after;
53+
if domain_i = 0 then after ()
54+
done;
55+
while !runs < n_runs_min || not !budget_used do
56+
Barrier.await barrier_init;
57+
if domain_i = 0 then begin
58+
before ();
59+
if
60+
let budget_stop = Mtime_clock.elapsed () in
61+
let elapsedf =
62+
Mtime.Span.to_float_ns
63+
(Mtime.Span.abs_diff budget_stop budget_start)
64+
*. (1. /. 1_000_000_000.0)
65+
in
66+
budgetf < elapsedf
67+
then budget_used := true;
68+
incr runs;
69+
Gc.major ()
70+
end;
71+
let state = init domain_i in
72+
Barrier.await barrier_before;
73+
let start = Mtime_clock.elapsed () in
74+
work domain_i state;
75+
let stop = Mtime_clock.elapsed () in
76+
Barrier.await barrier_after;
77+
if domain_i = 0 then after ();
78+
Stack.push
79+
(Mtime.Span.to_float_ns (Mtime.Span.abs_diff stop start)
80+
*. (1. /. 1_000_000_000.0))
81+
results.(domain_i)
82+
done)
83+
in
84+
let domains =
85+
Array.init n_domains @@ fun domain_i ->
86+
Domain.spawn @@ fun () -> main domain_i
87+
in
88+
Array.iter Domain.join domains;
8989
let n = Stack.length results.(0) in
9090
let times = Array.create_float n in
9191
for run_i = 0 to n - 1 do

0 commit comments

Comments
 (0)