let () = print_endline "testing icepick ocaml bindings..."; print_endline ""; try let topo = Icepick.Topology.discover () in Printf.printf "l3 cache:\n"; Printf.printf " ways: %d\n" (Icepick.Topology.l3_ways topo); Printf.printf " size: %d mb\n" (Icepick.Topology.l3_size topo / 1024 / 1024); Printf.printf " way size: %d kb\n" (Icepick.Topology.way_size topo / 1024); Printf.printf " max clos: %d\n" (Icepick.Topology.max_clos topo); Printf.printf " ccx count: %d\n" (Icepick.Topology.ccx_count topo); Printf.printf " cat: %b\n" (Icepick.Topology.cat_supported topo); print_endline ""; print_endline "attempting to lock 2mb region..."; let region = Icepick.Region.lock topo ~size:(2 * 1024 * 1024) ~clos:1 () in Printf.printf " locked %d bytes at 0x%nx\n" (Icepick.Region.size region) (Icepick.Region.ptr region); Printf.printf " clos: %d\n" (Icepick.Region.clos region); print_endline "verifying..."; let stats = Icepick.verify region in Printf.printf " mean latency: %d ns\n" stats.mean_ns; Printf.printf " p99 latency: %d ns\n" stats.p99_ns; print_endline "unlocking..."; Icepick.Region.unlock region; print_endline "done." with Icepick.Icepick_error msg -> Printf.printf "icepick error: %s\n" msg; print_endline "(this is expected if cat is not supported on this cpu)"