Skip to content

Commit

Permalink
Add Flow.copy benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
talex5 committed Dec 31, 2023
1 parent 5e014fc commit f87951a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
42 changes: 42 additions & 0 deletions bench/bench_copy.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
open Eio.Std

let chunk_size = 1 lsl 16
let n_chunks = 10000
let n_bytes = n_chunks * chunk_size

let run_client sock =
Fiber.both
(fun () ->
let chunk = Cstruct.create chunk_size in
for _ = 1 to n_chunks do
Eio.Flow.write sock [chunk]
done;
Eio.Flow.shutdown sock `Send
)
(fun () ->
let chunk = Cstruct.create chunk_size in
for _ = 1 to n_chunks do
Eio.Flow.read_exact sock chunk
done
)

let time name service =
Switch.run @@ fun sw ->
let client_sock, server_sock = Eio_unix.Net.socketpair_stream ~sw () in
let t0 = Unix.gettimeofday () in
Fiber.both
(fun () -> service server_sock)
(fun () -> run_client client_sock);
let t1 = Unix.gettimeofday () in
let time = t1 -. t0 in
let bytes_per_second = float n_bytes /. time in
traceln "%s: %.2f MB/s" name (bytes_per_second /. 1024. /. 1024.);
(Metric.create name (`Float bytes_per_second) "bytes/s" (name ^ " Flow.copy"))

let run _env =
[
time "default" (fun sock -> Eio.Flow.copy sock sock);
time "buf_read" (fun sock ->
let r = Eio.Buf_read.of_flow sock ~initial_size:(64 * 1024) ~max_size:(64 * 1024) |> Eio.Buf_read.as_flow in
Eio.Flow.copy r sock);
]
1 change: 1 addition & 0 deletions bench/main.ml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ let benchmarks = [
"Eio_unix.Fd", Bench_fd.run;
"File.stat", Bench_fstat.run;
"Path.stat", Bench_stat.run;
"Flow.copy", Bench_copy.run;
]

let usage_error () =
Expand Down

0 comments on commit f87951a

Please sign in to comment.