cache line locking on AMD x86_64 utilising L3 CAT pseudo-locking
26

Configure Feed

Select the types of activity you want to include in your feed.

icepick / bindings / ocaml / test / test.ml
1.4 kB 34 lines
1let () = 2 print_endline "testing icepick ocaml bindings..."; 3 print_endline ""; 4 5 try 6 let topo = Icepick.Topology.discover () in 7 Printf.printf "l3 cache:\n"; 8 Printf.printf " ways: %d\n" (Icepick.Topology.l3_ways topo); 9 Printf.printf " size: %d mb\n" (Icepick.Topology.l3_size topo / 1024 / 1024); 10 Printf.printf " way size: %d kb\n" (Icepick.Topology.way_size topo / 1024); 11 Printf.printf " max clos: %d\n" (Icepick.Topology.max_clos topo); 12 Printf.printf " ccx count: %d\n" (Icepick.Topology.ccx_count topo); 13 Printf.printf " cat: %b\n" (Icepick.Topology.cat_supported topo); 14 print_endline ""; 15 16 print_endline "attempting to lock 2mb region..."; 17 let region = Icepick.Region.lock topo ~size:(2 * 1024 * 1024) ~clos:1 () in 18 Printf.printf " locked %d bytes at 0x%nx\n" 19 (Icepick.Region.size region) 20 (Icepick.Region.ptr region); 21 Printf.printf " clos: %d\n" (Icepick.Region.clos region); 22 23 print_endline "verifying..."; 24 let stats = Icepick.verify region in 25 Printf.printf " mean latency: %d ns\n" stats.mean_ns; 26 Printf.printf " p99 latency: %d ns\n" stats.p99_ns; 27 28 print_endline "unlocking..."; 29 Icepick.Region.unlock region; 30 print_endline "done." 31 32 with Icepick.Icepick_error msg -> 33 Printf.printf "icepick error: %s\n" msg; 34 print_endline "(this is expected if cat is not supported on this cpu)"