icepick/bindings/ocaml/test/test.ml
2026-01-17 23:34:52 +00:00

34 lines
1.4 KiB
OCaml

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)"