From 8697f5340538a0d3610e86667fe31cb5e976613c Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 16 Aug 2024 15:46:35 -0400 Subject: [PATCH] add basic bench for trace-tef.multiproc --- .gitignore | 1 + bench/dune | 6 +++++ bench/trace_tldr.ml | 61 +++++++++++++++++++++++++++++++++++++++++++++ bench_tldr.sh | 3 +++ 4 files changed, 71 insertions(+) create mode 100644 bench/trace_tldr.ml create mode 100755 bench_tldr.sh diff --git a/.gitignore b/.gitignore index da14214..5c093cc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ _build *.exe perf.* *.fxt +*.tmp diff --git a/bench/dune b/bench/dune index ade51c9..f9f9511 100644 --- a/bench/dune +++ b/bench/dune @@ -10,6 +10,12 @@ (preprocess (pps ppx_trace)) (libraries trace.core trace-fuchsia)) +(executable + (name trace_tldr) + (modules trace_tldr) + (preprocess (pps ppx_trace)) + (libraries trace.core trace-tef.tldr)) + (executable (name bench_fuchsia_write) (modules bench_fuchsia_write) diff --git a/bench/trace_tldr.ml b/bench/trace_tldr.ml new file mode 100644 index 0000000..6d73e83 --- /dev/null +++ b/bench/trace_tldr.ml @@ -0,0 +1,61 @@ +module Trace = Trace_core + +let ( let@ ) = ( @@ ) + +let work ~n () : unit = + for _i = 1 to n do + let@ _sp = + Trace.with_span ~__FILE__ ~__LINE__ "outer" ~data:(fun () -> + [ "i", `Int _i ]) + in + for _k = 1 to 10 do + let@ _sp = + Trace.with_span ~__FILE__ ~__LINE__ "inner" ~data:(fun () -> + (* add some big data sometimes *) + if _i mod 100 = 0 && _k = 9 then + [ "s", `String (String.make 5000 '-') ] + else + []) + in + () + done; + + if _i mod 1000 = 0 then Thread.yield () + (* Thread.delay 1e-6 *) + done + +let main ~n ~j ~child () : unit = + if child then + work ~n () + else + let@ _sp = Trace.with_span ~__FILE__ ~__LINE__ "parent" in + let cmd = + Printf.sprintf "%s --child -n=%d" (Filename.quote Sys.argv.(0)) n + in + let procs = Array.init j (fun _ -> Unix.open_process_in cmd) in + Array.iteri + (fun idx _ic -> + let@ _sp = + Trace.with_span ~__FILE__ ~__LINE__ "wait.child" ~data:(fun () -> + [ "i", `Int idx ]) + in + ignore @@ Unix.close_process_in _ic) + procs + +let () = + let@ () = Trace_tef_tldr.with_setup () in + + let n = ref 10_000 in + let j = ref 4 in + let child = ref false in + + let args = + [ + "-n", Arg.Set_int n, " number of iterations"; + "-j", Arg.Set_int j, " set number of workers"; + "--child", Arg.Set child, " act as child process"; + ] + |> Arg.align + in + Arg.parse args ignore "bench1"; + main ~n:!n ~j:!j ~child:!child () diff --git a/bench_tldr.sh b/bench_tldr.sh new file mode 100755 index 0000000..f774b3f --- /dev/null +++ b/bench_tldr.sh @@ -0,0 +1,3 @@ +#!/bin/sh +DUNE_OPTS="--profile=release --display=quiet" +exec dune exec $DUNE_OPTS bench/trace_tldr.exe -- $@