diff --git a/rocksdb/main.cpp b/rocksdb/main.cpp index 0ab578b..fa160d1 100644 --- a/rocksdb/main.cpp +++ b/rocksdb/main.cpp @@ -23,6 +23,11 @@ #include "CLI/CLI.hpp" #include "instant.h" +template +static void black_box(const T &t) { + asm volatile("" ::"m"(t) : "memory"); +} + struct Args { size_t threads; size_t iterations; @@ -131,7 +136,7 @@ int main(int argc, char *argv[]) { tmp.resize(args.key_size, 'x'); key.emplace_back(std::move(tmp)); } - if (args.mode == "get" || args.random) { + if (args.mode == "get" || args.random || args.mode == "scan") { std::shuffle(keys.begin(), keys.end(), gen); } keys.emplace_back(std::move(key)); @@ -150,12 +155,14 @@ int main(int argc, char *argv[]) { } kv->Commit(); delete kv; - delete handle; - delete db; - handles.clear(); - // re-open db - s = rocksdb::OptimisticTransactionDB::Open(options, args.path, cfd, &handles, &db); - assert(s.ok()); + if (args.mode == "get") { + delete handle; + delete db; + handles.clear(); + // re-open db + s = rocksdb::OptimisticTransactionDB::Open(options, args.path, cfd, &handles, &db); + assert(s.ok()); + } } handle = handles[0]; @@ -203,6 +210,8 @@ int main(int argc, char *argv[]) { auto *iter = db->NewIterator(ropt); iter->Seek(prefix); while (iter->Valid()) { + black_box(iter->key()); + black_box(iter->value()); iter->Next(); } delete iter; diff --git a/src/main.rs b/src/main.rs index 8bbdfa8..b106dab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,7 +81,8 @@ fn main() { opt.sync_on_write = false; opt.over_provision = true; // large value will use lots of memeory opt.inline_size = args.blob_size; - opt.tmp_store = args.mode != "get" && args.mode != "scan"; + opt.tmp_store = args.mode != "get"; + opt.cache_capacity = 3 << 30; let mut saved = opt.clone(); saved.tmp_store = false; let mut db = Mace::new(opt.validate().unwrap()).unwrap(); @@ -96,7 +97,7 @@ fn main() { key.resize(args.key_size, b'x'); tk.push(key); } - if args.random || args.mode == "get" { + if args.random || args.mode == "get" || args.mode == "scan" { tk.shuffle(&mut rng); } keys.push(tk); @@ -110,10 +111,12 @@ fn main() { } }); pre_tx.commit().unwrap(); - drop(db); - // re-open db - saved.tmp_store = true; - db = Mace::new(saved.validate().unwrap()).unwrap(); + if args.mode == "get" { + drop(db); + // re-open db + saved.tmp_store = true; + db = Mace::new(saved.validate().unwrap()).unwrap(); + } } let barrier = Arc::new(std::sync::Barrier::new(args.threads)); @@ -131,6 +134,7 @@ fn main() { let st = start_time.clone(); let val = value.clone(); let prefix = format!("key_{tid}"); + println!("prefix {}", prefix); std::thread::spawn(move || { // coreid::bind_core(tid);