X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=include%2Futils.ml;h=88a1dd264d5e9476e209320fa7c81bc536aece82;hb=a6baedc6c67cb1de0587a779f8bcddf276b0bf4c;hp=5de564621ca974f3e129976ee057481833f3a051;hpb=4b52da1a20a4fe031930bb96d2ca46bec06dc529;p=SXSI%2Fxpathcomp.git diff --git a/include/utils.ml b/include/utils.ml index 5de5646..88a1dd2 100644 --- a/include/utils.ml +++ b/include/utils.ml @@ -69,6 +69,39 @@ let time_mem f x = Printf.eprintf "Final Mem: %s\n\n\n%!" s2; r ;; + +let pid = ref 0 +let start_perf () = + + let ppid = Unix.getpid() in + let cmd = "/usr/bin/perf" in + if not (Sys.file_exists cmd) then (failwith "Binary '/usr/bin/perf' not found"); + let args = [| cmd; "stat"; "--pid=" ^ (string_of_int ppid); + "-e"; "L1-dcache-load"; + "-e"; "L1-dcache-load-misses"; + "-e"; "L1-dcache-store"; + "-e"; "L1-dcache-store-misses"; + "-e"; "L1-icache-load"; + "-e"; "L1-icache-load-misses"; + "-e"; "branch-load"; + "-e"; "branch-load-misses"; + "-e"; "cpu-cycles"; + "-e"; "stalled-cycles-frontend"; + "-e"; "stalled-cycles-backend"; + "-e"; "instructions"; + "-e"; "cache-references"; + "-e"; "cache-misses"; + "-e"; "branch-instructions"; + "-e"; "branch-misses"; + "-e"; "bus-cycles"; + |] in + let p = Unix.fork() in + pid := p; + if !pid == 0 then Unix.execv cmd args + +let stop_perf () = + Unix.kill !pid Sys.sigint + let time f ?(count=1) ?(msg="") x = let rec loop i = Gc.compact();