Change benchmark path to target/ or OUT_DIR

Also reduce some code duplication with cleanup_dirs fn.
This commit is contained in:
Stephen Akridge 2019-02-23 14:23:55 -08:00 committed by sakridge
parent c46b2541fe
commit 5216952691
6 changed files with 68 additions and 41 deletions

11
Cargo.lock generated
View File

@ -1089,6 +1089,15 @@ dependencies = [
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "memmap"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "memoffset"
version = "0.2.1"
@ -2259,6 +2268,7 @@ dependencies = [
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3003,6 +3013,7 @@ dependencies = [
"checksum make-cmd 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8ca8afbe8af1785e09636acb5a41e08a765f5f0340568716c18a8700ba3c0d3"
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
"checksum memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db4c41318937f6e76648f42826b1d9ade5c09cafb5aef7e351240a70f39206e9"
"checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff"
"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
"checksum mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425"

View File

@ -4,7 +4,8 @@ extern crate test;
use rand::{thread_rng, Rng};
use solana_runtime::appendvec::AppendVec;
use std::path::Path;
use std::env;
use std::path::PathBuf;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::{Arc, RwLock};
use std::thread::spawn;
@ -13,10 +14,17 @@ use test::Bencher;
const START_SIZE: u64 = 4 * 1024 * 1024;
const INC_SIZE: u64 = 1 * 1024 * 1024;
fn get_appendvec_bench_path(path: &str) -> PathBuf {
let out_dir = env::var("OUT_DIR").unwrap_or_else(|_| "target".to_string());
let mut buf = PathBuf::new();
buf.push(&format!("{}/{}", out_dir, path));
buf
}
#[bench]
fn appendvec_atomic_append(bencher: &mut Bencher) {
let path = Path::new("/media/nvme0/bench/bench_append");
let mut vec = AppendVec::<AtomicUsize>::new(path, true, START_SIZE, INC_SIZE);
let path = get_appendvec_bench_path("bench_append");
let mut vec = AppendVec::<AtomicUsize>::new(&path, true, START_SIZE, INC_SIZE);
bencher.iter(|| {
if vec.append(AtomicUsize::new(0)).is_none() {
assert!(vec.grow_file().is_ok());
@ -28,9 +36,9 @@ fn appendvec_atomic_append(bencher: &mut Bencher) {
#[bench]
fn appendvec_atomic_random_access(bencher: &mut Bencher) {
let path = Path::new("/media/nvme0/bench/bench_ra");
let mut vec = AppendVec::<AtomicUsize>::new(path, true, START_SIZE, INC_SIZE);
let size = 10_000_000;
let path = get_appendvec_bench_path("bench_ra");
let mut vec = AppendVec::<AtomicUsize>::new(&path, true, START_SIZE, INC_SIZE);
let size = 1_000_000;
for _ in 0..size {
if vec.append(AtomicUsize::new(0)).is_none() {
assert!(vec.grow_file().is_ok());
@ -46,9 +54,9 @@ fn appendvec_atomic_random_access(bencher: &mut Bencher) {
#[bench]
fn appendvec_atomic_random_change(bencher: &mut Bencher) {
let path = Path::new("/media/nvme0/bench/bench_rax");
let mut vec = AppendVec::<AtomicUsize>::new(path, true, START_SIZE, INC_SIZE);
let size = 10_000_000;
let path = get_appendvec_bench_path("bench_rax");
let mut vec = AppendVec::<AtomicUsize>::new(&path, true, START_SIZE, INC_SIZE);
let size = 1_000_000;
for _ in 0..size {
if vec.append(AtomicUsize::new(0)).is_none() {
assert!(vec.grow_file().is_ok());
@ -70,9 +78,9 @@ fn appendvec_atomic_random_change(bencher: &mut Bencher) {
#[bench]
fn appendvec_atomic_random_read(bencher: &mut Bencher) {
let path = Path::new("/media/nvme0/bench/bench_read");
let mut vec = AppendVec::<AtomicUsize>::new(path, true, START_SIZE, INC_SIZE);
let size = 100_000_000;
let path = get_appendvec_bench_path("bench_read");
let mut vec = AppendVec::<AtomicUsize>::new(&path, true, START_SIZE, INC_SIZE);
let size = 1_000_000;
for _ in 0..size {
if vec.append(AtomicUsize::new(0)).is_none() {
assert!(vec.grow_file().is_ok());
@ -90,12 +98,12 @@ fn appendvec_atomic_random_read(bencher: &mut Bencher) {
#[bench]
fn appendvec_concurrent_lock_append(bencher: &mut Bencher) {
let path = Path::new("bench_lock_append");
let path = get_appendvec_bench_path("bench_lock_append");
let vec = Arc::new(RwLock::new(AppendVec::<AtomicUsize>::new(
path, true, START_SIZE, INC_SIZE,
&path, true, START_SIZE, INC_SIZE,
)));
let vec1 = vec.clone();
let size = 100_000_000;
let size = 1_000_000;
let count = Arc::new(AtomicUsize::new(0));
let count1 = count.clone();
spawn(move || loop {
@ -130,12 +138,12 @@ fn appendvec_concurrent_lock_append(bencher: &mut Bencher) {
#[bench]
fn appendvec_concurrent_get_append(bencher: &mut Bencher) {
let path = Path::new("bench_get_append");
let path = get_appendvec_bench_path("bench_get_append");
let vec = Arc::new(RwLock::new(AppendVec::<AtomicUsize>::new(
path, true, START_SIZE, INC_SIZE,
&path, true, START_SIZE, INC_SIZE,
)));
let vec1 = vec.clone();
let size = 100_000_000;
let size = 1_000_000;
let count = Arc::new(AtomicUsize::new(0));
let count1 = count.clone();
spawn(move || loop {

View File

@ -68,6 +68,7 @@ $program \
$maybe_no_leader_rotation \
--identity "$SOLANA_CONFIG_DIR"/bootstrap-leader.json \
--ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger \
--accounts "$SOLANA_CONFIG_DIR"/bootstrap-leader-accounts \
--rpc-port 8899 \
> >($bootstrap_leader_logger) 2>&1 &
pid=$!

View File

@ -157,6 +157,7 @@ if ((!self_setup)); then
fullnode_id_path=$SOLANA_CONFIG_DIR/fullnode-id.json
fullnode_json_path=$SOLANA_CONFIG_DIR/fullnode.json
ledger_config_dir=$SOLANA_CONFIG_DIR/fullnode-ledger
accounts_config_dir=$SOLANA_CONFIG_DIR/fullnode-accounts
else
mkdir -p "$SOLANA_CONFIG_DIR"
fullnode_id_path=$SOLANA_CONFIG_DIR/fullnode-id-x$self_setup_label.json
@ -181,6 +182,7 @@ else
}
ledger_config_dir=$SOLANA_CONFIG_DIR/fullnode-ledger-x$self_setup_label
accounts_config_dir=$SOLANA_CONFIG_DIR/fullnode-accounts-x$self_setup_label
fi
[[ -r $fullnode_id_path ]] || {
@ -256,6 +258,7 @@ $program \
--identity "$fullnode_json_path" \
--network "$leader_address" \
--ledger "$ledger_config_dir" \
--accounts "$accounts_config_dir" \
> >($fullnode_logger) 2>&1 &
pid=$!
oom_score_adj "$pid" 1000

View File

@ -13,7 +13,8 @@ use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::transaction::Transaction;
use solana_sdk::vote_program;
use std::collections::BTreeMap;
use std::fs::{create_dir_all, read_dir, remove_dir_all};
use std::env;
use std::fs::{create_dir_all, remove_dir_all};
use std::path::Path;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::{Arc, Mutex, RwLock};
@ -167,16 +168,20 @@ pub struct Accounts {
paths: String,
}
fn get_paths_vec(paths: &str) -> Vec<String> {
paths.split(',').map(|s| s.to_string()).collect()
}
fn cleanup_dirs(paths: &str) {
let paths = get_paths_vec(&paths);
paths.iter().for_each(|p| {
let _ignored = remove_dir_all(p);
})
}
impl Drop for Accounts {
fn drop(&mut self) {
let paths: Vec<String> = self.paths.split(',').map(|s| s.to_string()).collect();
paths.iter().for_each(|p| {
let _ignored = remove_dir_all(p);
});
let entry = read_dir(ACCOUNTSDB_DIR);
if entry.is_ok() && entry.unwrap().count() == 0 {
let _ignored = remove_dir_all(ACCOUNTSDB_DIR);
}
cleanup_dirs(&self.paths);
}
}
@ -210,16 +215,14 @@ impl AccountsDB {
}
fn add_storage(&self, paths: &str) {
let paths: Vec<String> = paths.split(',').map(|s| s.to_string()).collect();
let paths = get_paths_vec(&paths);
let mut stores: Vec<AccountStorage> = vec![];
paths.iter().for_each(|p| {
let keypair = Keypair::new();
let path = format!("{}/{}", p, keypair.pubkey());
let storage = AccountStorage {
appendvec: self.new_account_storage(&path),
appendvec: self.new_account_storage(&p),
status: AtomicUsize::new(AccountStorageStatus::StorageAvailable as usize),
count: AtomicUsize::new(0),
path: path.to_string(),
path: p.to_string(),
};
stores.push(storage);
});
@ -652,7 +655,15 @@ impl Accounts {
fn make_new_dir() -> String {
static ACCOUNT_DIR: AtomicUsize = AtomicUsize::new(0);
let dir = ACCOUNT_DIR.fetch_add(1, Ordering::Relaxed);
format!("{}/{}", ACCOUNTSDB_DIR, dir.to_string())
let out_dir = env::var("OUT_DIR").unwrap_or_else(|_| "target".to_string());
let keypair = Keypair::new();
format!(
"{}/{}/{}/{}",
out_dir,
ACCOUNTSDB_DIR,
keypair.pubkey(),
dir.to_string()
)
}
fn make_default_paths() -> String {
@ -1341,13 +1352,6 @@ mod tests {
true
}
fn cleanup_dirs(paths: &str) {
let paths: Vec<String> = paths.split(',').map(|s| s.to_string()).collect();
paths.iter().for_each(|p| {
let _ignored = remove_dir_all(p);
})
}
#[test]
fn test_account_one() {
let paths = "one".to_string();

View File

@ -746,7 +746,7 @@ mod tests {
// Close the validator so that rocksdb has locks available
validator_exit();
let (bank_forks, bank_forks_info, _, _) = new_banks_from_blocktree(&validator_ledger_path, "accounts");
let (bank_forks, bank_forks_info, _, _) = new_banks_from_blocktree(&validator_ledger_path, "");
let bank = bank_forks.working_bank();
let entry_height = bank_forks_info[0].entry_height;