Add num_lamports_per_account as a configurable argument (#5869)
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
use solana_metrics;
|
use solana_metrics;
|
||||||
|
|
||||||
|
use crate::cli::Config;
|
||||||
use bincode;
|
use bincode;
|
||||||
use log::*;
|
use log::*;
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
@ -32,7 +33,6 @@ use std::time::Instant;
|
|||||||
use solana_librapay_api::librapay_transaction;
|
use solana_librapay_api::librapay_transaction;
|
||||||
|
|
||||||
pub const MAX_SPENDS_PER_TX: u64 = 4;
|
pub const MAX_SPENDS_PER_TX: u64 = 4;
|
||||||
pub const NUM_LAMPORTS_PER_ACCOUNT: u64 = 128;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum BenchTpsError {
|
pub enum BenchTpsError {
|
||||||
@ -43,30 +43,6 @@ pub type Result<T> = std::result::Result<T, BenchTpsError>;
|
|||||||
|
|
||||||
pub type SharedTransactions = Arc<RwLock<VecDeque<Vec<(Transaction, u64)>>>>;
|
pub type SharedTransactions = Arc<RwLock<VecDeque<Vec<(Transaction, u64)>>>>;
|
||||||
|
|
||||||
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<Keypair>);
|
type LibraKeys = (Keypair, Pubkey, Pubkey, Vec<Keypair>);
|
||||||
|
|
||||||
fn get_recent_blockhash<T: Client>(client: &T) -> (Hash, FeeCalculator) {
|
fn get_recent_blockhash<T: Client>(client: &T) -> (Hash, FeeCalculator) {
|
||||||
@ -98,6 +74,7 @@ where
|
|||||||
duration,
|
duration,
|
||||||
tx_count,
|
tx_count,
|
||||||
sustained,
|
sustained,
|
||||||
|
num_lamports_per_account,
|
||||||
..
|
..
|
||||||
} = config;
|
} = config;
|
||||||
|
|
||||||
@ -210,7 +187,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
i += 1;
|
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;
|
reclaim_lamports_back_to_source_account = !reclaim_lamports_back_to_source_account;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ use solana_drone::drone::DRONE_PORT;
|
|||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
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
|
/// Holds the configuration for a single run of the benchmark
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub entrypoint_addr: SocketAddr,
|
pub entrypoint_addr: SocketAddr,
|
||||||
@ -23,6 +25,7 @@ pub struct Config {
|
|||||||
pub read_from_client_file: bool,
|
pub read_from_client_file: bool,
|
||||||
pub target_lamports_per_signature: u64,
|
pub target_lamports_per_signature: u64,
|
||||||
pub use_move: bool,
|
pub use_move: bool,
|
||||||
|
pub num_lamports_per_account: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@ -42,6 +45,7 @@ impl Default for Config {
|
|||||||
read_from_client_file: false,
|
read_from_client_file: false,
|
||||||
target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature,
|
target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature,
|
||||||
use_move: false,
|
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",
|
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`
|
/// 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");
|
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
|
args
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,7 @@ extern crate solana_move_loader_program;
|
|||||||
mod bench;
|
mod bench;
|
||||||
mod cli;
|
mod cli;
|
||||||
|
|
||||||
use crate::bench::{
|
use crate::bench::{do_bench_tps, generate_and_fund_keypairs, generate_keypairs};
|
||||||
do_bench_tps, generate_and_fund_keypairs, generate_keypairs, Config, NUM_LAMPORTS_PER_ACCOUNT,
|
|
||||||
};
|
|
||||||
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
||||||
use solana_genesis::PrimordialAccountDetails;
|
use solana_genesis::PrimordialAccountDetails;
|
||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
@ -33,26 +31,24 @@ fn main() {
|
|||||||
entrypoint_addr,
|
entrypoint_addr,
|
||||||
drone_addr,
|
drone_addr,
|
||||||
id,
|
id,
|
||||||
threads,
|
|
||||||
num_nodes,
|
num_nodes,
|
||||||
duration,
|
|
||||||
tx_count,
|
tx_count,
|
||||||
thread_batch_sleep_ms,
|
|
||||||
sustained,
|
|
||||||
client_ids_and_stake_file,
|
client_ids_and_stake_file,
|
||||||
write_to_client_file,
|
write_to_client_file,
|
||||||
read_from_client_file,
|
read_from_client_file,
|
||||||
target_lamports_per_signature,
|
target_lamports_per_signature,
|
||||||
use_move,
|
use_move,
|
||||||
} = cli_config;
|
num_lamports_per_account,
|
||||||
|
..
|
||||||
|
} = &cli_config;
|
||||||
|
|
||||||
if write_to_client_file {
|
if *write_to_client_file {
|
||||||
let (keypairs, _) = generate_keypairs(&id, tx_count as u64 * 2);
|
let (keypairs, _) = generate_keypairs(&id, *tx_count as u64 * 2);
|
||||||
let num_accounts = keypairs.len() as u64;
|
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)
|
let num_lamports_per_account = (num_accounts - 1 + NUM_SIGNATURES_FOR_TXS * max_fee)
|
||||||
/ num_accounts
|
/ num_accounts
|
||||||
+ NUM_LAMPORTS_PER_ACCOUNT;
|
+ num_lamports_per_account;
|
||||||
let mut accounts = HashMap::new();
|
let mut accounts = HashMap::new();
|
||||||
keypairs.iter().for_each(|keypair| {
|
keypairs.iter().for_each(|keypair| {
|
||||||
accounts.insert(
|
accounts.insert(
|
||||||
@ -75,7 +71,7 @@ fn main() {
|
|||||||
|
|
||||||
println!("Connecting to the cluster");
|
println!("Connecting to the cluster");
|
||||||
let (nodes, _replicators) =
|
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);
|
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
||||||
exit(1);
|
exit(1);
|
||||||
});
|
});
|
||||||
@ -90,7 +86,7 @@ fn main() {
|
|||||||
exit(1);
|
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 path = Path::new(&client_ids_and_stake_file);
|
||||||
let file = File::open(path).unwrap();
|
let file = File::open(path).unwrap();
|
||||||
|
|
||||||
@ -114,11 +110,11 @@ fn main() {
|
|||||||
} else {
|
} else {
|
||||||
generate_and_fund_keypairs(
|
generate_and_fund_keypairs(
|
||||||
&client,
|
&client,
|
||||||
Some(drone_addr),
|
Some(*drone_addr),
|
||||||
&id,
|
&id,
|
||||||
tx_count,
|
*tx_count,
|
||||||
NUM_LAMPORTS_PER_ACCOUNT,
|
*num_lamports_per_account,
|
||||||
use_move,
|
*use_move,
|
||||||
)
|
)
|
||||||
.unwrap_or_else(|e| {
|
.unwrap_or_else(|e| {
|
||||||
eprintln!("Error could not fund keys: {:?}", 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(
|
do_bench_tps(
|
||||||
vec![client],
|
vec![client],
|
||||||
config,
|
cli_config,
|
||||||
keypairs,
|
keypairs,
|
||||||
keypair_balance,
|
keypair_balance,
|
||||||
move_keypairs,
|
move_keypairs,
|
||||||
|
Reference in New Issue
Block a user