Skip to content

Commit b79ac03

Browse files
committed
Add a minimalist Unix IO benchmark
1 parent 497782e commit b79ac03

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

bench/bench_unix.ml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
open Multicore_bench
2+
3+
let run_one ~budgetf ~n_domains () =
4+
let n_bytes = 65536 in
5+
6+
let init _ =
7+
let inn, out = Unix.pipe ~cloexec:true () in
8+
(inn, out, Bytes.create 1)
9+
in
10+
let work _ (inn, out, byte) =
11+
let n = Unix.write out (Bytes.create n_bytes) 0 n_bytes in
12+
assert (n = n_bytes);
13+
for _ = 1 to n_bytes do
14+
let n : int = Unix.read inn byte 0 1 in
15+
assert (n = 1)
16+
done;
17+
Unix.close inn;
18+
Unix.close out
19+
in
20+
21+
let config =
22+
Printf.sprintf "%d worker%s" n_domains (if n_domains = 1 then "" else "s")
23+
in
24+
Times.record ~budgetf ~n_domains ~n_warmups:1 ~n_runs_min:1 ~init ~work ()
25+
|> Times.to_thruput_metrics ~n:(n_bytes * n_domains) ~singular:"blocking read"
26+
~config
27+
28+
let run_suite ~budgetf =
29+
[ 1; 2; 4 ]
30+
|> List.concat_map @@ fun n_domains ->
31+
if Sys.win32 || Domain.recommended_domain_count () < n_domains then []
32+
else run_one ~budgetf ~n_domains ()

bench/dune

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ let () =
1515
(libraries
1616
multicore-bench
1717
backoff
18+
unix
1819
multicore-magic |}
1920
^ maybe_domain_shims_and_threads ^ {| ))
2021
|}

bench/main.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ let benchmarks =
55
("Atomic", Bench_atomic.run_suite);
66
("Queue", Bench_queue.run_suite);
77
("Stack", Bench_stack.run_suite);
8+
("Unix", Bench_unix.run_suite);
89
]
910

1011
let () = Multicore_bench.Cmd.run ~benchmarks ()

0 commit comments

Comments
 (0)