File: bench_fd.ml

package info (click to toggle)
ocaml-eio 1.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,548 kB
  • sloc: ml: 14,608; ansic: 1,237; makefile: 25
file content (38 lines) | stat: -rw-r--r-- 1,065 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
open Eio.Std

let time label len fn =
  let t0 = Unix.gettimeofday () in
  fn ();
  let t1 = Unix.gettimeofday () in
  Metric.create
    label
    (`Float (float len /. (t1 -. t0) /. (2. ** 30.))) "GB/s"
    "Reading from /dev/zero using a single FD"

let main ~domain_mgr zero =
  let iters = 100_000 in
  let len = 64 * 1024 in
  let n_fibers = 4 in
  let n_domains = 4 in
  let buf = Cstruct.create len in
  let run1 () =
    for _ = 1 to iters do Eio.Flow.read_exact zero buf done
  in
  [time "fibers:1" (iters * len) run1;
  time (Fmt.str "fibers:%d" n_fibers) (iters * n_fibers * len) (fun () ->
      Switch.run @@ fun sw ->
      for _ = 1 to n_fibers do
        Fiber.fork ~sw run1
      done
    );
  time (Fmt.str "domains:%d" n_domains) (iters * n_domains * len) (fun () ->
      Switch.run @@ fun sw ->
      for _ = 1 to n_domains do
        Fiber.fork ~sw (fun () -> Eio.Domain_manager.run domain_mgr run1)
      done
    )]

let ( / ) = Eio.Path.( / )

let run env =
  Eio.Path.with_open_in (env#fs / "/dev/zero") (main ~domain_mgr:env#domain_mgr)