update with review comments
This commit is contained in:
parent
9a0f9b910e
commit
3152090a66
|
@ -6,33 +6,17 @@ use solana_runtime::bank::*;
|
||||||
use solana_sdk::account::Account;
|
use solana_sdk::account::Account;
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use test::Bencher;
|
use test::Bencher;
|
||||||
|
|
||||||
fn compare_account(account1: &Account, account2: &Account) -> bool {
|
fn deposit_many(bank: &Bank, pubkeys: &mut Vec<Pubkey>, num: usize) {
|
||||||
if account1.data != account2.data
|
|
||||||
|| account1.owner != account2.owner
|
|
||||||
|| account1.executable != account2.executable
|
|
||||||
|| account1.lamports != account2.lamports
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn create_account(bank: &Bank, pubkeys: &mut Vec<Pubkey>, num: usize) {
|
|
||||||
for t in 0..num {
|
for t in 0..num {
|
||||||
let pubkey = Keypair::new().pubkey();
|
let pubkey = Pubkey::new_rand();
|
||||||
let mut default_account = Account::default();
|
let account = Account::new((t + 1) as u64, 0, &Account::default().owner);
|
||||||
pubkeys.push(pubkey.clone());
|
pubkeys.push(pubkey.clone());
|
||||||
default_account.lamports = (t + 1) as u64;
|
|
||||||
assert!(bank.get_account(&pubkey).is_none());
|
assert!(bank.get_account(&pubkey).is_none());
|
||||||
bank.deposit(&pubkey, (t + 1) as u64);
|
bank.deposit(&pubkey, (t + 1) as u64);
|
||||||
assert_eq!(
|
assert_eq!(bank.get_account(&pubkey).unwrap(), account);
|
||||||
compare_account(&bank.get_account(&pubkey).unwrap(), &default_account),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,32 +26,33 @@ fn test_accounts_create(bencher: &mut Bencher) {
|
||||||
let bank0 = Bank::new_with_paths(&genesis_block, Some("bench_a0".to_string()));
|
let bank0 = Bank::new_with_paths(&genesis_block, Some("bench_a0".to_string()));
|
||||||
bencher.iter(|| {
|
bencher.iter(|| {
|
||||||
let mut pubkeys: Vec<Pubkey> = vec![];
|
let mut pubkeys: Vec<Pubkey> = vec![];
|
||||||
create_account(&bank0, &mut pubkeys, 1000);
|
deposit_many(&bank0, &mut pubkeys, 1000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn test_accounts_squash(bencher: &mut Bencher) {
|
fn test_accounts_squash(bencher: &mut Bencher) {
|
||||||
let (genesis_block, _) = GenesisBlock::new(100_000);
|
let (genesis_block, _) = GenesisBlock::new(100_000);
|
||||||
let mut banks: Vec<Arc<Bank>> = Vec::with_capacity(50);
|
let mut banks: Vec<Arc<Bank>> = Vec::with_capacity(10);
|
||||||
banks.push(Arc::new(Bank::new_with_paths(
|
banks.push(Arc::new(Bank::new_with_paths(
|
||||||
&genesis_block,
|
&genesis_block,
|
||||||
Some("bench_a1".to_string()),
|
Some("bench_a1".to_string()),
|
||||||
)));
|
)));
|
||||||
let mut pubkeys: Vec<Pubkey> = vec![];
|
let mut pubkeys: Vec<Pubkey> = vec![];
|
||||||
create_account(&banks[0], &mut pubkeys, 250000);
|
deposit_many(&banks[0], &mut pubkeys, 250000);
|
||||||
banks[0].freeze();
|
banks[0].freeze();
|
||||||
|
// Measures the performance of the squash operation merging the accounts
|
||||||
|
// with the majority of the accounts present in the parent bank that is
|
||||||
|
// moved over to this bank.
|
||||||
bencher.iter(|| {
|
bencher.iter(|| {
|
||||||
for index in 1..10 {
|
|
||||||
banks.push(Arc::new(Bank::new_from_parent(
|
banks.push(Arc::new(Bank::new_from_parent(
|
||||||
&banks[index - 1],
|
&banks[0],
|
||||||
&Pubkey::default(),
|
&Pubkey::default(),
|
||||||
index as u64,
|
1u64,
|
||||||
)));
|
)));
|
||||||
for accounts in 0..10000 {
|
for accounts in 0..10000 {
|
||||||
banks[index].deposit(&pubkeys[accounts], (accounts + 1) as u64);
|
banks[1].deposit(&pubkeys[accounts], (accounts + 1) as u64);
|
||||||
}
|
|
||||||
banks[index].squash();
|
|
||||||
}
|
}
|
||||||
|
banks[1].squash();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1532,7 +1532,7 @@ mod tests {
|
||||||
let account = db.load(0, &pubkeys[idx], true).unwrap();
|
let account = db.load(0, &pubkeys[idx], true).unwrap();
|
||||||
let mut default_account = Account::default();
|
let mut default_account = Account::default();
|
||||||
default_account.lamports = (idx + 1) as u64;
|
default_account.lamports = (idx + 1) as u64;
|
||||||
assert_eq!(compare_account(&default_account, &account), true);
|
assert_eq!(default_account, account);
|
||||||
}
|
}
|
||||||
db.add_fork(1, Some(0));
|
db.add_fork(1, Some(0));
|
||||||
|
|
||||||
|
@ -1629,23 +1629,12 @@ mod tests {
|
||||||
} else {
|
} else {
|
||||||
let mut default_account = Account::default();
|
let mut default_account = Account::default();
|
||||||
default_account.lamports = account.lamports;
|
default_account.lamports = account.lamports;
|
||||||
assert_eq!(compare_account(&default_account, &account), true);
|
assert_eq!(default_account, account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compare_account(account1: &Account, account2: &Account) -> bool {
|
|
||||||
if account1.data != account2.data
|
|
||||||
|| account1.owner != account2.owner
|
|
||||||
|| account1.executable != account2.executable
|
|
||||||
|| account1.lamports != account2.lamports
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn check_storage(accounts: &AccountsDB, count: usize) -> bool {
|
fn check_storage(accounts: &AccountsDB, count: usize) -> bool {
|
||||||
let stores = accounts.storage.read().unwrap();
|
let stores = accounts.storage.read().unwrap();
|
||||||
assert_eq!(stores.len(), 1);
|
assert_eq!(stores.len(), 1);
|
||||||
|
@ -1662,7 +1651,7 @@ mod tests {
|
||||||
let account = accounts.load(fork, &pubkeys[idx], true).unwrap();
|
let account = accounts.load(fork, &pubkeys[idx], true).unwrap();
|
||||||
let mut default_account = Account::default();
|
let mut default_account = Account::default();
|
||||||
default_account.lamports = (idx + 1) as u64;
|
default_account.lamports = (idx + 1) as u64;
|
||||||
assert_eq!(compare_account(&default_account, &account), true);
|
assert_eq!(default_account, account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1682,7 +1671,7 @@ mod tests {
|
||||||
let account = accounts.load(0, &pubkeys[0], true).unwrap();
|
let account = accounts.load(0, &pubkeys[0], true).unwrap();
|
||||||
let mut default_account = Account::default();
|
let mut default_account = Account::default();
|
||||||
default_account.lamports = 1;
|
default_account.lamports = 1;
|
||||||
assert_eq!(compare_account(&default_account, &account), true);
|
assert_eq!(default_account, account);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in New Issue