permutate config + impl

This commit is contained in:
GroovieGermanikus 2024-03-27 18:13:11 +01:00
parent fd3fe80336
commit 2a87e2f8d7
No known key found for this signature in database
GPG Key ID: 5B6EB831A5CD2015
1 changed files with 73 additions and 21 deletions

View File

@ -93,31 +93,60 @@ async fn main() {
let jh_runner = tokio::spawn(async move {
let mut interval = tokio::time::interval(bench_interval);
for run_count in 1.. {
let bench_config = bench_configs[run_count % bench_configs.len()].clone();
debug!(
"Invoke bench execution (#{}) on tenant <{}> using {}",
run_count, tenant_id, bench_config
);
const NUM_BENCH_IMPLS: usize = 2;
let benchrun_at = SystemTime::now();
let bench_impl: Box<dyn BenchTrait<Metric>> = if true {
Box::new(BenchRunnerBench1Impl {
benchrun_at,
tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(),
funded_payer: funded_payer.clone(),
size_tx,
})
} else {
Box::new(BenchRunnerConfirmationRateImpl {
benchrun_at,
tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(),
funded_payer: funded_payer.clone(),
size_tx,
})
let factors = factorize(run_count, &[bench_configs.len(), NUM_BENCH_IMPLS]);
let bench_config = bench_configs[factors[0]].clone();
let bench_impl: Box<dyn BenchTrait<Metric>> = match factors[1] {
0 => {
Box::new(BenchRunnerBench1Impl {
benchrun_at,
tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(),
funded_payer: funded_payer.clone(),
size_tx,
})
}
1 => {
Box::new(BenchRunnerConfirmationRateImpl {
benchrun_at,
tenant_config: tenant_config.clone(),
bench_config: bench_config.clone(),
funded_payer: funded_payer.clone(),
size_tx,
})
}
_ => unreachable!(),
};
debug!(
"Invoke bench execution (#{}) on tenant <{}> using {}",
run_count, tenant_id, &bench_config
);
// let bench_impl: Box<dyn BenchTrait<Metric>> = if true {
// Box::new(BenchRunnerBench1Impl {
// benchrun_at,
// tenant_config: tenant_config.clone(),
// bench_config: bench_config.clone(),
// funded_payer: funded_payer.clone(),
// size_tx,
// })
// } else {
// Box::new(BenchRunnerConfirmationRateImpl {
// benchrun_at,
// tenant_config: tenant_config.clone(),
// bench_config: bench_config.clone(),
// funded_payer: funded_payer.clone(),
// size_tx,
// })
// };
if let Some(postgres_session) = postgres_session.as_ref() {
let _dbstatus = upsert_benchrun_status(
postgres_session,
@ -165,6 +194,29 @@ async fn main() {
join_all(jh_tenant_task).await;
}
// dimensions: least-significant first
fn factorize(i: usize, dimensions: &[usize]) -> Vec<usize> {
let mut i = i;
let mut result = Vec::new();
for &dim in dimensions {
result.push(i % dim);
i /= dim;
}
result
}
#[test]
fn test_factorize() {
assert_eq!(factorize(0, &[2, 3]), vec![0, 0]);
assert_eq!(factorize(1, &[2, 3]), vec![1, 0]);
assert_eq!(factorize(2, &[2, 3]), vec![0, 1]);
assert_eq!(factorize(3, &[2, 3]), vec![1, 1]);
assert_eq!(factorize(4, &[2, 3]), vec![0, 2]);
assert_eq!(factorize(5, &[2, 3]), vec![1, 2]);
}
// R: result
#[async_trait]
trait BenchRunner<M>: Send + Sync + 'static {