wire up confirmation_rate + bench1

This commit is contained in:
GroovieGermanikus 2024-03-27 18:54:14 +01:00
parent 4a6a594873
commit 8aca443d56
No known key found for this signature in database
GPG Key ID: 5B6EB831A5CD2015
5 changed files with 98 additions and 37 deletions

View File

@ -14,14 +14,14 @@ use solana_sdk::signature::{read_keypair_file, Keypair, Signature, Signer};
#[derive(Clone, Copy, Debug, Default, serde::Serialize)] #[derive(Clone, Copy, Debug, Default, serde::Serialize)]
pub struct Metric { pub struct Metric {
tx_sent: u64, pub txs_sent: u64,
tx_confirmed: u64, pub txs_confirmed: u64,
// in ms // in ms
average_confirmation_time: f32, pub average_confirmation_time: f32,
// in slots // in slots
average_slot_confirmation_time: f32, pub average_slot_confirmation_time: f32,
tx_send_errors: u64, pub txs_send_errors: u64,
tx_unconfirmed: u64, pub txs_un_confirmed: u64,
} }
/// TC2 send multiple runs of num_txs, measure the confirmation rate /// TC2 send multiple runs of num_txs, measure the confirmation rate
@ -149,10 +149,10 @@ pub async fn send_bulk_txs_and_wait(
}; };
Ok(Metric { Ok(Metric {
tx_sent, txs_sent: tx_sent,
tx_send_errors, txs_send_errors: tx_send_errors,
tx_confirmed, txs_confirmed: tx_confirmed,
tx_unconfirmed, txs_un_confirmed: tx_unconfirmed,
average_confirmation_time: average_confirmation_time_ms, average_confirmation_time: average_confirmation_time_ms,
average_slot_confirmation_time, average_slot_confirmation_time,
}) })
@ -162,27 +162,27 @@ fn calc_stats_avg(stats: &[Metric]) -> Metric {
let len = stats.len(); let len = stats.len();
let mut avg = Metric { let mut avg = Metric {
tx_sent: 0, txs_sent: 0,
tx_send_errors: 0, txs_send_errors: 0,
tx_confirmed: 0, txs_confirmed: 0,
tx_unconfirmed: 0, txs_un_confirmed: 0,
average_confirmation_time: 0.0, average_confirmation_time: 0.0,
average_slot_confirmation_time: 0.0, average_slot_confirmation_time: 0.0,
}; };
for stat in stats { for stat in stats {
avg.tx_sent += stat.tx_sent; avg.txs_sent += stat.txs_sent;
avg.tx_send_errors += stat.tx_send_errors; avg.txs_send_errors += stat.txs_send_errors;
avg.tx_confirmed += stat.tx_confirmed; avg.txs_confirmed += stat.txs_confirmed;
avg.tx_unconfirmed += stat.tx_unconfirmed; avg.txs_un_confirmed += stat.txs_un_confirmed;
avg.average_confirmation_time += stat.average_confirmation_time; avg.average_confirmation_time += stat.average_confirmation_time;
avg.average_slot_confirmation_time += stat.average_slot_confirmation_time; avg.average_slot_confirmation_time += stat.average_slot_confirmation_time;
} }
avg.tx_sent /= len as u64; avg.txs_sent /= len as u64;
avg.tx_send_errors /= len as u64; avg.txs_send_errors /= len as u64;
avg.tx_confirmed /= len as u64; avg.txs_confirmed /= len as u64;
avg.tx_unconfirmed /= len as u64; avg.txs_un_confirmed /= len as u64;
avg.average_confirmation_time /= len as f32; avg.average_confirmation_time /= len as f32;
avg.average_slot_confirmation_time /= len as f32; avg.average_slot_confirmation_time /= len as f32;

View File

@ -22,7 +22,7 @@ pub async fn benchnew_confirmation_rate_servicerunner(
cu_price_micro_lamports: bench_config.cu_price_micro_lamports, cu_price_micro_lamports: bench_config.cu_price_micro_lamports,
}; };
let max_timeout = Duration::from_secs(60); let max_timeout = Duration::from_secs(60);
let result = send_bulk_txs_and_wait(&rpc, &funded_payer, 1, &tx_params, max_timeout).await; let result = send_bulk_txs_and_wait(&rpc, &funded_payer, bench_config.tx_count, &tx_params, max_timeout).await;
result.unwrap_or_else(|err| { result.unwrap_or_else(|err| {
error!("Failed to send bulk txs and wait: {}", err); error!("Failed to send bulk txs and wait: {}", err);
confirmation_rate::Metric::default() confirmation_rate::Metric::default()

View File

@ -99,13 +99,13 @@ async fn main() {
let benchrun_at = SystemTime::now(); let benchrun_at = SystemTime::now();
let permutation = factorize(run_count, &[bench_configs.len(), NUM_BENCH_IMPLS]); let permutation = factorize(run_count, &[NUM_BENCH_IMPLS, bench_configs.len()]);
let bench_config = bench_configs[permutation[0]].clone(); let bench_config = bench_configs[permutation[1]].clone();
let bench_impl: Box<dyn BenchTrait> = match permutation[1] { let bench_impl: Box<dyn BenchTrait> = match permutation[0] {
0 => { 0 => {
Box::new(BenchRunnerBench1Impl { Box::new(BenchRunnerConfirmationRateImpl {
benchrun_at, benchrun_at,
tenant_config: tenant_config.clone(), tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(), bench_config: bench_config.clone(),
@ -115,7 +115,7 @@ async fn main() {
}) })
} }
1 => { 1 => {
Box::new(BenchRunnerConfirmationRateImpl { Box::new(BenchRunnerBench1Impl {
benchrun_at, benchrun_at,
tenant_config: tenant_config.clone(), tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(), bench_config: bench_config.clone(),
@ -238,6 +238,7 @@ impl BenchRunner for BenchRunnerBench1Impl {
self.size_tx, self.size_tx,
) )
.await; .await;
self.metric.set(metric).unwrap();
} }
} }

View File

@ -83,7 +83,7 @@ impl BenchMetricsPostgresSaver for BenchRunnerBench1Impl {
.execute( .execute(
r#" r#"
INSERT INTO INSERT INTO
benchrunner.bench_metrics ( benchrunner.bench_metrics_bench1 (
tenant, tenant,
ts, ts,
prio_fees, prio_fees,
@ -107,7 +107,44 @@ impl BenchMetricsPostgresSaver for BenchRunnerBench1Impl {
#[async_trait] #[async_trait]
impl BenchMetricsPostgresSaver for BenchRunnerConfirmationRateImpl { impl BenchMetricsPostgresSaver for BenchRunnerConfirmationRateImpl {
async fn try_save_results_postgres(&self, postgres_session: &PostgresSessionCache) -> anyhow::Result<()> { async fn try_save_results_postgres(&self, postgres_session: &PostgresSessionCache) -> anyhow::Result<()> {
todo!(); let metric = self.metric.get().expect("metric not set");
let metricjson = serde_json::to_value(metric).unwrap();
let values: &[&(dyn ToSql + Sync)] = &[
&self.tenant_config.tenant_id,
&self.benchrun_at,
&(self.bench_config.cu_price_micro_lamports as i64),
&(metric.txs_sent as i64),
&(metric.txs_confirmed as i64),
&(metric.txs_un_confirmed as i64),
&(metric.average_confirmation_time as f32),
&(metric.average_slot_confirmation_time as f32),
&metricjson,
];
postgres_session
.get_session()
.await?
.execute(
r#"
INSERT INTO
benchrunner.bench_metrics_confirmation_rate (
tenant,
ts,
prio_fees,
txs_sent,
txs_confirmed,
txs_un_confirmed,
average_confirmation_time_ms,
average_slot_confirmation_time_ms,
metric_json
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
"#,
values,
)
.await?;
Ok(())
} }
} }

View File

@ -1,7 +1,16 @@
CREATE SCHEMA benchrunner; CREATE SCHEMA benchrunner;
CREATE TABLE benchrunner.bench_metrics (
CREATE TABLE benchrunner.bench_runs (
tenant text NOT NULL,
ts timestamp NOT NULL,
status text NOT NULL,
PRIMARY KEY (tenant, ts)
);
CREATE TABLE benchrunner.bench_metrics_bench1 (
tenant text NOT NULL, tenant text NOT NULL,
ts timestamp NOT NULL, ts timestamp NOT NULL,
prio_fees int8 NOT NULL, prio_fees int8 NOT NULL,
@ -13,14 +22,28 @@ CREATE TABLE benchrunner.bench_metrics (
PRIMARY KEY (tenant, ts) PRIMARY KEY (tenant, ts)
); );
CREATE TABLE benchrunner.bench_runs (
tenant text NOT NULL, CREATE TABLE benchrunner.bench_metrics_confirmation_rate (
ts timestamp NOT NULL, tenant text NOT NULL,
status text NOT NULL, ts timestamp NOT NULL,
PRIMARY KEY (tenant, ts) prio_fees int8 NOT NULL,
txs_sent int8 NOT NULL,
txs_confirmed int8 NOT NULL,
txs_un_confirmed int8 NOT NULL,
average_confirmation_time_ms real NOT NULL,
average_slot_confirmation_time_ms real NOT NULL,
metric_json jsonb NOT NULL,
PRIMARY KEY (tenant, ts)
); );
GRANT USAGE ON SCHEMA benchrunner TO r_benchrunner; GRANT USAGE ON SCHEMA benchrunner TO r_benchrunner;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA benchrunner TO r_benchrunner;
GRANT USAGE ON SCHEMA benchrunner TO ro_benchrunner; GRANT USAGE ON SCHEMA benchrunner TO ro_benchrunner;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA benchrunner TO r_benchrunner;
ALTER DEFAULT PRIVILEGES IN SCHEMA benchrunner GRANT SELECT, INSERT, UPDATE ON TABLES TO r_benchrunner;
GRANT SELECT ON ALL TABLES IN SCHEMA benchrunner TO ro_benchrunner; GRANT SELECT ON ALL TABLES IN SCHEMA benchrunner TO ro_benchrunner;
ALTER DEFAULT PRIVILEGES IN SCHEMA benchrunner GRANT SELECT ON TABLES TO ro_benchrunner;
ALTER TABLE benchrunner.bench_metrics RENAME TO bench_metrics_bench1;