Skip to content

Commit b3aabca

Browse files
committed
Provide a separate executable to bench pfortuna with miou
1 parent 1b55297 commit b3aabca

File tree

4 files changed

+97
-13
lines changed

4 files changed

+97
-13
lines changed

bench/dune

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,9 @@
22
(names speed)
33
(modules speed)
44
(libraries mirage-crypto mirage-crypto-rng mirage-crypto-rng.unix
5-
mirage-crypto-pk mirage-crypto-ec mirage-crypto-rng-miou-unix))
5+
mirage-crypto-pk mirage-crypto-ec))
6+
7+
(executables
8+
(names miou)
9+
(modules miou)
10+
(libraries mirage-crypto-rng-miou-unix))

bench/fortuna.ml

Whitespace-only changes.

bench/miou.ml

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
open Mirage_crypto
2+
3+
module Time = struct
4+
5+
let time ~n f a =
6+
let t1 = Sys.time () in
7+
for _ = 1 to n do ignore (f a) done ;
8+
let t2 = Sys.time () in
9+
(t2 -. t1)
10+
11+
let warmup () =
12+
let x = ref 0 in
13+
let rec go start =
14+
if Sys.time () -. start < 1. then begin
15+
for i = 0 to 10000 do x := !x + i done ;
16+
go start
17+
end in
18+
go (Sys.time ())
19+
20+
end
21+
22+
let burn_period = 2.0
23+
24+
let sizes = [16; 64; 256; 1024; 8192]
25+
(* let sizes = [16] *)
26+
27+
let burn f n =
28+
let buf = Mirage_crypto_rng.generate n in
29+
let (t1, i1) =
30+
let rec loop it =
31+
let t = Time.time ~n:it f buf in
32+
if t > 0.2 then (t, it) else loop (it * 10) in
33+
loop 10 in
34+
let iters = int_of_float (float i1 *. burn_period /. t1) in
35+
let time = Time.time ~n:iters f buf in
36+
(iters, time, float (n * iters) /. time)
37+
38+
let mb = 1024. *. 1024.
39+
40+
let throughput title f =
41+
Printf.printf "\n* [%s]\n%!" title ;
42+
sizes |> List.iter @@ fun size ->
43+
Gc.full_major () ;
44+
let (iters, time, bw) = burn f size in
45+
Printf.printf " % 5d: %04f MB/s (%d iters in %.03f s)\n%!"
46+
size (bw /. mb) iters time
47+
48+
let bm name f = (name, fun () -> f name)
49+
50+
let benchmarks = [
51+
bm "pfortuna" (fun name ->
52+
let open Mirage_crypto_rng_miou_unix.Pfortuna in
53+
Miou_unix.run ~domains:2 @@ fun () ->
54+
let rng = Mirage_crypto_rng_miou_unix.(initialize (module Pfortuna)) in
55+
let g = create () in
56+
reseed ~g "abcd" ;
57+
throughput name (fun buf ->
58+
let buf = Bytes.unsafe_of_string buf in
59+
generate_into ~g buf ~off:0 (Bytes.length buf));
60+
Mirage_crypto_rng_miou_unix.kill rng) ;
61+
]
62+
63+
let help () =
64+
Printf.printf "available benchmarks:\n ";
65+
List.iter (fun (n, _) -> Printf.printf "%s " n) benchmarks ;
66+
Printf.printf "\n%!"
67+
68+
let runv fs =
69+
Format.printf "accel: %a\n%!"
70+
(fun ppf -> List.iter @@ fun x ->
71+
Format.fprintf ppf "%s " @@
72+
match x with `XOR -> "XOR" | `AES -> "AES" | `GHASH -> "GHASH")
73+
accelerated;
74+
Time.warmup () ;
75+
List.iter (fun f -> f ()) fs
76+
77+
78+
let () =
79+
let seed = "abcd" in
80+
let g = Mirage_crypto_rng.(create ~seed (module Fortuna)) in
81+
Mirage_crypto_rng.set_default_generator g;
82+
match Array.to_list Sys.argv with
83+
| _::(_::_ as args) -> begin
84+
try
85+
let fs =
86+
args |> List.map @@ fun n ->
87+
snd (benchmarks |> List.find @@ fun (n1, _) -> n = n1) in
88+
runv fs
89+
with Not_found -> help ()
90+
end
91+
| _ -> help ()

bench/speed.ml

-12
Original file line numberDiff line numberDiff line change
@@ -404,18 +404,6 @@ let benchmarks = [
404404
throughput name (fun buf ->
405405
let buf = Bytes.unsafe_of_string buf in
406406
generate_into ~g buf ~off:0 (Bytes.length buf))) ;
407-
408-
bm "pfortuna" (fun name ->
409-
let open Mirage_crypto_rng_miou_unix.Pfortuna in
410-
Miou_unix.run ~domains:2 @@ fun () ->
411-
let rng = Mirage_crypto_rng_miou_unix.(initialize (module Pfortuna)) in
412-
let g = create () in
413-
reseed ~g "abcd" ;
414-
throughput name (fun buf ->
415-
let buf = Bytes.unsafe_of_string buf in
416-
generate_into ~g buf ~off:0 (Bytes.length buf));
417-
Mirage_crypto_rng_miou_unix.kill rng) ;
418-
419407
]
420408

421409
let help () =

0 commit comments

Comments
 (0)