mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 08:47:57 +00:00
Drop system cache for trie benchmarks (#7242)
* add system clear cache * move to shared * rearrange a little-a * add few tricks also * use tempdir for buf as well * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
@@ -88,6 +88,61 @@ impl BenchPair {
|
||||
}
|
||||
}
|
||||
|
||||
/// Drop system cache.
|
||||
///
|
||||
/// Will panic if cache drop is impossbile.
|
||||
pub fn drop_system_cache() {
|
||||
#[cfg(target_os = "windows")] {
|
||||
log::warn!(
|
||||
target: "bench-logistics",
|
||||
"Clearing system cache on windows is not supported. Benchmark might totally be wrong.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
std::process::Command::new("sync")
|
||||
.output()
|
||||
.expect("Failed to execute system cache clear");
|
||||
|
||||
#[cfg(target_os = "linux")] {
|
||||
log::trace!(target: "bench-logistics", "Clearing system cache...");
|
||||
std::process::Command::new("echo")
|
||||
.args(&["3", ">", "/proc/sys/vm/drop_caches", "2>", "/dev/null"])
|
||||
.output()
|
||||
.expect("Failed to execute system cache clear");
|
||||
|
||||
let temp = tempfile::tempdir().expect("Failed to spawn tempdir");
|
||||
let temp_file_path = format!("of={}/buf", temp.path().to_string_lossy());
|
||||
|
||||
// this should refill write cache with 2GB of garbage
|
||||
std::process::Command::new("dd")
|
||||
.args(&["if=/dev/urandom", &temp_file_path, "bs=64M", "count=32"])
|
||||
.output()
|
||||
.expect("Failed to execute dd for cache clear");
|
||||
|
||||
// remove tempfile of previous command
|
||||
std::process::Command::new("rm")
|
||||
.arg(&temp_file_path)
|
||||
.output()
|
||||
.expect("Failed to remove temp file");
|
||||
|
||||
std::process::Command::new("sync")
|
||||
.output()
|
||||
.expect("Failed to execute system cache clear");
|
||||
|
||||
log::trace!(target: "bench-logistics", "Clearing system cache done!");
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")] {
|
||||
log::trace!(target: "bench-logistics", "Clearing system cache...");
|
||||
if let Err(err) = std::process::Command::new("purge").output() {
|
||||
log::error!("purge error {:?}: ", err);
|
||||
panic!("Could not clear system cache. Run under sudo?");
|
||||
}
|
||||
log::trace!(target: "bench-logistics", "Clearing system cache done!");
|
||||
}
|
||||
}
|
||||
|
||||
/// Pre-initialized benchmarking database.
|
||||
///
|
||||
/// This is prepared database with genesis and keyring
|
||||
@@ -124,6 +179,13 @@ impl Clone for BenchDb {
|
||||
&fs_extra::dir::CopyOptions::new(),
|
||||
).expect("Copy of seed database is ok");
|
||||
|
||||
// We clear system cache after db clone but before any warmups.
|
||||
// This populates system cache with some data unrelated to actual
|
||||
// data we will be quering further under benchmark (like what
|
||||
// would have happened in real system that queries random entries
|
||||
// from database).
|
||||
drop_system_cache();
|
||||
|
||||
BenchDb { keyring, directory_guard: Guard(dir), database_type }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user