Calculate bench client lamports based on signature fee (#4713)
* use fee calculator to compute max fee * review comments * shellcheck
This commit is contained in:
parent
2da7c7fbd3
commit
e43a634944
|
@ -4,6 +4,7 @@ use std::time::Duration;
|
|||
|
||||
use clap::{crate_description, crate_name, crate_version, App, Arg, ArgMatches};
|
||||
use solana_drone::drone::DRONE_PORT;
|
||||
use solana_sdk::fee_calculator::FeeCalculator;
|
||||
use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil};
|
||||
|
||||
/// Holds the configuration for a single run of the benchmark
|
||||
|
@ -20,6 +21,7 @@ pub struct Config {
|
|||
pub client_ids_and_stake_file: String,
|
||||
pub write_to_client_file: bool,
|
||||
pub read_from_client_file: bool,
|
||||
pub target_lamports_per_signature: u64,
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
|
@ -37,6 +39,7 @@ impl Default for Config {
|
|||
client_ids_and_stake_file: String::new(),
|
||||
write_to_client_file: false,
|
||||
read_from_client_file: false,
|
||||
target_lamports_per_signature: FeeCalculator::default().target_lamports_per_signature,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -126,6 +129,16 @@ pub fn build_args<'a, 'b>() -> App<'a, 'b> {
|
|||
.takes_value(true)
|
||||
.help("Read client keys and stakes from the YAML file"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("target_lamports_per_signature")
|
||||
.long("target-lamports-per-signature")
|
||||
.value_name("LAMPORTS")
|
||||
.takes_value(true)
|
||||
.help(
|
||||
"The cost in lamports that the cluster will charge for signature \
|
||||
verification when the cluster is operating at target-signatures-per-slot",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
/// Parses a clap `ArgMatches` structure into a `Config`
|
||||
|
@ -194,5 +207,9 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||
args.client_ids_and_stake_file = s.to_string();
|
||||
}
|
||||
|
||||
if let Some(v) = matches.value_of("target_lamports_per_signature") {
|
||||
args.target_lamports_per_signature = v.to_string().parse().expect("can't parse lamports");
|
||||
}
|
||||
|
||||
args
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ use crate::bench::{
|
|||
do_bench_tps, generate_and_fund_keypairs, generate_keypairs, Config, NUM_LAMPORTS_PER_ACCOUNT,
|
||||
};
|
||||
use solana::gossip_service::{discover_cluster, get_multi_client};
|
||||
use solana_sdk::fee_calculator::FeeCalculator;
|
||||
use solana_sdk::signature::Keypair;
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
|
@ -12,6 +13,9 @@ use std::io::prelude::*;
|
|||
use std::path::Path;
|
||||
use std::process::exit;
|
||||
|
||||
/// Number of signatures for all transactions in ~1 week at ~100K TPS
|
||||
pub const NUM_SIGNATURES_FOR_TXS: u64 = 100_000 * 60 * 60 * 24 * 7;
|
||||
|
||||
fn main() {
|
||||
solana_logger::setup();
|
||||
solana_metrics::set_panic_hook("bench-tps");
|
||||
|
@ -32,15 +36,21 @@ fn main() {
|
|||
client_ids_and_stake_file,
|
||||
write_to_client_file,
|
||||
read_from_client_file,
|
||||
target_lamports_per_signature,
|
||||
} = cli_config;
|
||||
|
||||
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 num_lamports_per_account = (num_accounts - 1 + NUM_SIGNATURES_FOR_TXS * max_fee)
|
||||
/ num_accounts
|
||||
+ NUM_LAMPORTS_PER_ACCOUNT;
|
||||
let mut accounts = HashMap::new();
|
||||
keypairs.iter().for_each(|keypair| {
|
||||
accounts.insert(
|
||||
serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap(),
|
||||
NUM_LAMPORTS_PER_ACCOUNT as u64,
|
||||
num_lamports_per_account,
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -108,6 +108,9 @@ while [[ -n $1 ]]; do
|
|||
if [[ $1 = --hashes-per-tick ]]; then
|
||||
genesisOptions="$genesisOptions $1 $2"
|
||||
shift 2
|
||||
elif [[ $1 = --target-lamports-per-signature ]]; then
|
||||
genesisOptions="$genesisOptions $1 $2"
|
||||
shift 2
|
||||
elif [[ $1 = --deploy-update ]]; then
|
||||
updatePlatforms="$updatePlatforms $2"
|
||||
shift 2
|
||||
|
|
|
@ -115,11 +115,23 @@ local|tar)
|
|||
echo "${pubkey}: $stakeNodesInGenesisBlock" >> ./solana-node-stakes/fullnode-stakes.yml
|
||||
done
|
||||
fi
|
||||
|
||||
lamports_per_signature="42"
|
||||
# shellcheck disable=SC2206 # Do not want to quote $genesisOptions
|
||||
genesis_args=($genesisOptions)
|
||||
for i in "${!genesis_args[@]}"; do
|
||||
if [[ "${genesis_args[$i]}" = --target-lamports-per-signature ]]; then
|
||||
lamports_per_signature="${genesis_args[$((i+1))]}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
rm -rf ./solana-client-accounts
|
||||
mkdir ./solana-client-accounts
|
||||
for i in $(seq 0 $((numBenchTpsClients-1))); do
|
||||
# shellcheck disable=SC2086 # Do not want to quote $benchTpsExtraArgs
|
||||
solana-bench-tps --write-client-keys ./solana-client-accounts/bench-tps"$i".yml $benchTpsExtraArgs
|
||||
solana-bench-tps --write-client-keys ./solana-client-accounts/bench-tps"$i".yml \
|
||||
--target-lamports-per-signature "$lamports_per_signature" $benchTpsExtraArgs
|
||||
# Skip first line, as it contains header
|
||||
tail -n +2 -q ./solana-client-accounts/bench-tps"$i".yml >> ./solana-client-accounts/client-accounts.yml
|
||||
echo "" >> ./solana-client-accounts/client-accounts.yml
|
||||
|
|
Loading…
Reference in New Issue