@@ -10,9 +10,11 @@ module Single_file_db = Single_file_impl.Make ()
1010
1111module Multi_file_db = Multi_file_impl. Make ()
1212
13- let init_db (type db ) (module Db : Common.Database with type t = db ) name =
13+ let init_db (type db ) (module Db : Common.Database with type t = db ) ~root name
14+ =
1415 (* Initialization: create DB and warmup *)
15- let dir = Common. make_temp_dir (Printf. sprintf " db_bench_%s" name) in
16+ let dir = root ^/ name in
17+ Unix. mkdir_p dir ;
1618 let db = Db. create dir in
1719 Common.Ops. warmup (module Db ) db ;
1820 eprintf " Warmup complete for %s\n " name ;
@@ -35,21 +37,23 @@ let make_read_bench (type db) (module Db : Common.Database with type t = db)
3537 let max_key = (Common. warmup_blocks * Common. keys_per_block) - 1 in
3638 fun () -> Common.Ops. random_read (module Db ) db ~min_key ~max_key
3739
38- let test ~name (type db ) (module Db : Common.Database with type t = db )
40+ let test ~root ~ name (type db ) (module Db : Common.Database with type t = db )
3941 (f : (module Common.Database with type t = db) -> db -> unit -> unit ) =
4042 Bench.Test. create_with_initialization ~name (fun `init ->
41- init_db (module Db ) name |> f (module Db ) )
43+ init_db ~root (module Db ) name |> f (module Db ) )
4244
4345(* Create all benchmarks *)
44- let all_benchmarks () =
45- [ test ~name: " rocksdb_write" (module Rocksdb_db ) make_write_bench
46- ; test ~name: " rocksdb_read" (module Rocksdb_db ) make_read_bench
47- ; test ~name: " lmdb_write" (module Lmdb_db ) make_write_bench
48- ; test ~name: " lmdb_read" (module Lmdb_db ) make_read_bench
49- ; test ~name: " single_file_write" (module Single_file_db ) make_write_bench
50- ; test ~name: " single_file_read" (module Single_file_db ) make_read_bench
51- ; test ~name: " multi_file_write" (module Multi_file_db ) make_write_bench
52- ; test ~name: " multi_file_read" (module Multi_file_db ) make_read_bench
46+ let all_benchmarks ~root () =
47+ [ test ~root ~name: " rocksdb_write" (module Rocksdb_db ) make_write_bench
48+ ; test ~root ~name: " rocksdb_read" (module Rocksdb_db ) make_read_bench
49+ ; test ~root ~name: " lmdb_write" (module Lmdb_db ) make_write_bench
50+ ; test ~root ~name: " lmdb_read" (module Lmdb_db ) make_read_bench
51+ ; test ~root ~name: " single_file_write"
52+ (module Single_file_db )
53+ make_write_bench
54+ ; test ~root ~name: " single_file_read" (module Single_file_db ) make_read_bench
55+ ; test ~root ~name: " multi_file_write" (module Multi_file_db ) make_write_bench
56+ ; test ~root ~name: " multi_file_read" (module Multi_file_db ) make_read_bench
5357 ]
5458
5559(* Filter benchmarks based on BENCHMARKS environment variable *)
@@ -83,6 +87,10 @@ let () =
8387 (Common. warmup_blocks * Common. keys_per_block) ;
8488 Printf. printf " \n " ;
8589
86- (* Run benchmarks *)
87- let benchmarks = all_benchmarks () |> filter_benchmarks in
88- Command. run (Bench. make_command benchmarks)
90+ let root = Common. make_temp_dir " db_bench" in
91+ try
92+ let benchmarks = all_benchmarks ~root () |> filter_benchmarks in
93+ Command. run (Bench. make_command benchmarks)
94+ with e ->
95+ Common. cleanup_temp_dir root ;
96+ raise e
0 commit comments