change to hot scan

This commit is contained in:
abbycin 2025-11-21 17:56:07 +08:00
parent 75e8b90cb9
commit 5917f83af2
Signed by: abby
GPG Key ID: B636E0F0307EF8EB
2 changed files with 26 additions and 13 deletions

View File

@ -23,6 +23,11 @@
#include "CLI/CLI.hpp" #include "CLI/CLI.hpp"
#include "instant.h" #include "instant.h"
template<class T>
static void black_box(const T &t) {
asm volatile("" ::"m"(t) : "memory");
}
struct Args { struct Args {
size_t threads; size_t threads;
size_t iterations; size_t iterations;
@ -131,7 +136,7 @@ int main(int argc, char *argv[]) {
tmp.resize(args.key_size, 'x'); tmp.resize(args.key_size, 'x');
key.emplace_back(std::move(tmp)); 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); std::shuffle(keys.begin(), keys.end(), gen);
} }
keys.emplace_back(std::move(key)); keys.emplace_back(std::move(key));
@ -150,6 +155,7 @@ int main(int argc, char *argv[]) {
} }
kv->Commit(); kv->Commit();
delete kv; delete kv;
if (args.mode == "get") {
delete handle; delete handle;
delete db; delete db;
handles.clear(); handles.clear();
@ -157,6 +163,7 @@ int main(int argc, char *argv[]) {
s = rocksdb::OptimisticTransactionDB::Open(options, args.path, cfd, &handles, &db); s = rocksdb::OptimisticTransactionDB::Open(options, args.path, cfd, &handles, &db);
assert(s.ok()); assert(s.ok());
} }
}
handle = handles[0]; handle = handles[0];
for (size_t tid = 0; tid < args.threads; ++tid) { for (size_t tid = 0; tid < args.threads; ++tid) {
@ -203,6 +210,8 @@ int main(int argc, char *argv[]) {
auto *iter = db->NewIterator(ropt); auto *iter = db->NewIterator(ropt);
iter->Seek(prefix); iter->Seek(prefix);
while (iter->Valid()) { while (iter->Valid()) {
black_box(iter->key());
black_box(iter->value());
iter->Next(); iter->Next();
} }
delete iter; delete iter;

View File

@ -81,7 +81,8 @@ fn main() {
opt.sync_on_write = false; opt.sync_on_write = false;
opt.over_provision = true; // large value will use lots of memeory opt.over_provision = true; // large value will use lots of memeory
opt.inline_size = args.blob_size; 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(); let mut saved = opt.clone();
saved.tmp_store = false; saved.tmp_store = false;
let mut db = Mace::new(opt.validate().unwrap()).unwrap(); let mut db = Mace::new(opt.validate().unwrap()).unwrap();
@ -96,7 +97,7 @@ fn main() {
key.resize(args.key_size, b'x'); key.resize(args.key_size, b'x');
tk.push(key); tk.push(key);
} }
if args.random || args.mode == "get" { if args.random || args.mode == "get" || args.mode == "scan" {
tk.shuffle(&mut rng); tk.shuffle(&mut rng);
} }
keys.push(tk); keys.push(tk);
@ -110,11 +111,13 @@ fn main() {
} }
}); });
pre_tx.commit().unwrap(); pre_tx.commit().unwrap();
if args.mode == "get" {
drop(db); drop(db);
// re-open db // re-open db
saved.tmp_store = true; saved.tmp_store = true;
db = Mace::new(saved.validate().unwrap()).unwrap(); db = Mace::new(saved.validate().unwrap()).unwrap();
} }
}
let barrier = Arc::new(std::sync::Barrier::new(args.threads)); let barrier = Arc::new(std::sync::Barrier::new(args.threads));
let total_ops = Arc::new(std::sync::atomic::AtomicUsize::new(0)); let total_ops = Arc::new(std::sync::atomic::AtomicUsize::new(0));
@ -131,6 +134,7 @@ fn main() {
let st = start_time.clone(); let st = start_time.clone();
let val = value.clone(); let val = value.clone();
let prefix = format!("key_{tid}"); let prefix = format!("key_{tid}");
println!("prefix {}", prefix);
std::thread::spawn(move || { std::thread::spawn(move || {
// coreid::bind_core(tid); // coreid::bind_core(tid);