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 "instant.h"
template<class T>
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,6 +155,7 @@ int main(int argc, char *argv[]) {
}
kv->Commit();
delete kv;
if (args.mode == "get") {
delete handle;
delete db;
handles.clear();
@ -157,6 +163,7 @@ int main(int argc, char *argv[]) {
s = rocksdb::OptimisticTransactionDB::Open(options, args.path, cfd, &handles, &db);
assert(s.ok());
}
}
handle = handles[0];
for (size_t tid = 0; tid < args.threads; ++tid) {
@ -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;

View File

@ -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,11 +111,13 @@ fn main() {
}
});
pre_tx.commit().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));
let total_ops = Arc::new(std::sync::atomic::AtomicUsize::new(0));
@ -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);