diff --git a/bench-tps/src/bench.rs b/bench-tps/src/bench.rs index fc0072c971..0c0ec1b5e6 100644 --- a/bench-tps/src/bench.rs +++ b/bench-tps/src/bench.rs @@ -1,5 +1,6 @@ use solana_metrics; +use crate::cli::Config; use bincode; use log::*; use rayon::prelude::*; @@ -32,7 +33,6 @@ use std::time::Instant; use solana_librapay_api::librapay_transaction; pub const MAX_SPENDS_PER_TX: u64 = 4; -pub const NUM_LAMPORTS_PER_ACCOUNT: u64 = 128; #[derive(Debug)] pub enum BenchTpsError { @@ -43,30 +43,6 @@ pub type Result = std::result::Result; pub type SharedTransactions = Arc>>>; -pub struct Config { - pub id: Keypair, - pub threads: usize, - pub thread_batch_sleep_ms: usize, - pub duration: Duration, - pub tx_count: usize, - pub sustained: bool, - pub use_move: bool, -} - -impl Default for Config { - fn default() -> Self { - Self { - id: Keypair::new(), - threads: 4, - thread_batch_sleep_ms: 0, - duration: Duration::new(std::u64::MAX, 0), - tx_count: 500_000, - sustained: false, - use_move: false, - } - } -} - type LibraKeys = (Keypair, Pubkey, Pubkey, Vec); fn get_recent_blockhash(client: &T) -> (Hash, FeeCalculator) { @@ -98,6 +74,7 @@ where duration, tx_count, sustained, + num_lamports_per_account, .. } = config; @@ -210,7 +187,7 @@ where } i += 1; - if should_switch_directions(NUM_LAMPORTS_PER_ACCOUNT, i) { + if should_switch_directions(num_lamports_per_account, i) { reclaim_lamports_back_to_source_account = !reclaim_lamports_back_to_source_account; } } diff --git a/bench-tps/src/cli.rs b/bench-tps/src/cli.rs index 0052428c90..8ac13be69a 100644 --- a/bench-tps/src/cli.rs +++ b/bench-tps/src/cli.rs @@ -7,6 +7,8 @@ use solana_drone::drone::DRONE_PORT; use solana_sdk::fee_calculator::FeeCalculator; use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil}; +const NUM_LAMPORTS_PER_ACCOUNT_DEFAULT: u64 = 64 * 1024; + /// Holds the configuration for a single run of the benchmark pub struct Config { pub entrypoint_addr: SocketAddr, @@ -23,6 +25,7 @@ pub struct Config { pub read_from_client_file: bool, pub target_lamports_per_signature: u64, pub use_move: bool, + pub num_lamports_per_account: u64, } impl Default for Config { @@ -42,6 +45,7 @@ impl Default for Config { read_from_client_file: false, target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature, use_move: false, + num_lamports_per_account: NUM_LAMPORTS_PER_ACCOUNT_DEFAULT, } } } @@ -146,6 +150,15 @@ pub fn build_args<'a, 'b>() -> App<'a, 'b> { verification when the cluster is operating at target-signatures-per-slot", ), ) + .arg( + Arg::with_name("num_lamports_per_account") + .long("num-lamports-per-account") + .value_name("LAMPORTS") + .takes_value(true) + .help( + "Number of lamports per account.", + ), + ) } /// Parses a clap `ArgMatches` structure into a `Config` @@ -220,5 +233,9 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config { args.use_move = matches.is_present("use-move"); + if let Some(v) = matches.value_of("num_lamports_per_account") { + args.num_lamports_per_account = v.to_string().parse().expect("can't parse lamports"); + } + args } diff --git a/bench-tps/src/main.rs b/bench-tps/src/main.rs index 14f8ae0fc2..77d726b156 100644 --- a/bench-tps/src/main.rs +++ b/bench-tps/src/main.rs @@ -5,9 +5,7 @@ extern crate solana_move_loader_program; mod bench; mod cli; -use crate::bench::{ - do_bench_tps, generate_and_fund_keypairs, generate_keypairs, Config, NUM_LAMPORTS_PER_ACCOUNT, -}; +use crate::bench::{do_bench_tps, generate_and_fund_keypairs, generate_keypairs}; use solana_core::gossip_service::{discover_cluster, get_multi_client}; use solana_genesis::PrimordialAccountDetails; use solana_sdk::fee_calculator::FeeCalculator; @@ -33,26 +31,24 @@ fn main() { entrypoint_addr, drone_addr, id, - threads, num_nodes, - duration, tx_count, - thread_batch_sleep_ms, - sustained, client_ids_and_stake_file, write_to_client_file, read_from_client_file, target_lamports_per_signature, use_move, - } = cli_config; + num_lamports_per_account, + .. + } = &cli_config; - if write_to_client_file { - let (keypairs, _) = generate_keypairs(&id, tx_count as u64 * 2); + if *write_to_client_file { + let (keypairs, _) = generate_keypairs(&id, *tx_count as u64 * 2); let num_accounts = keypairs.len() as u64; - let max_fee = FeeCalculator::new(target_lamports_per_signature).max_lamports_per_signature; + let max_fee = FeeCalculator::new(*target_lamports_per_signature).max_lamports_per_signature; let num_lamports_per_account = (num_accounts - 1 + NUM_SIGNATURES_FOR_TXS * max_fee) / num_accounts - + NUM_LAMPORTS_PER_ACCOUNT; + + num_lamports_per_account; let mut accounts = HashMap::new(); keypairs.iter().for_each(|keypair| { accounts.insert( @@ -75,7 +71,7 @@ fn main() { println!("Connecting to the cluster"); let (nodes, _replicators) = - discover_cluster(&entrypoint_addr, num_nodes).unwrap_or_else(|err| { + discover_cluster(&entrypoint_addr, *num_nodes).unwrap_or_else(|err| { eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err); exit(1); }); @@ -90,7 +86,7 @@ fn main() { exit(1); } - let (keypairs, move_keypairs, keypair_balance) = if read_from_client_file && !use_move { + let (keypairs, move_keypairs, keypair_balance) = if *read_from_client_file && !use_move { let path = Path::new(&client_ids_and_stake_file); let file = File::open(path).unwrap(); @@ -114,11 +110,11 @@ fn main() { } else { generate_and_fund_keypairs( &client, - Some(drone_addr), + Some(*drone_addr), &id, - tx_count, - NUM_LAMPORTS_PER_ACCOUNT, - use_move, + *tx_count, + *num_lamports_per_account, + *use_move, ) .unwrap_or_else(|e| { eprintln!("Error could not fund keys: {:?}", e); @@ -126,19 +122,9 @@ fn main() { }) }; - let config = Config { - id, - threads, - thread_batch_sleep_ms, - duration, - tx_count, - sustained, - use_move, - }; - do_bench_tps( vec![client], - config, + cli_config, keypairs, keypair_balance, move_keypairs,