From 111449522fc3c4e9d12aedbdf6d8bc4cd561b880 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 9 Nov 2023 16:47:43 +0000 Subject: [PATCH] synchronize work start --- pageserver/src/bin/getpage_bench_libpq.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pageserver/src/bin/getpage_bench_libpq.rs b/pageserver/src/bin/getpage_bench_libpq.rs index a12d14278a..3c34be4928 100644 --- a/pageserver/src/bin/getpage_bench_libpq.rs +++ b/pageserver/src/bin/getpage_bench_libpq.rs @@ -9,6 +9,7 @@ use pageserver::repository; use pageserver_api::reltag::RelTag; use rand::prelude::*; +use tokio::sync::Barrier; use tracing::info; use utils::logging; @@ -137,9 +138,15 @@ async fn main() { let stats = Arc::new(Stats::default()); + let num_work_tasks = tenant_timelines.len() * args.num_tasks; + + let start_work_barrier = Arc::new(tokio::sync::Barrier::new(num_work_tasks + 1)); + tokio::spawn({ let stats = Arc::clone(&stats); + let start_work_barrier = Arc::clone(&start_work_barrier); async move { + start_work_barrier.wait().await; loop { let start = std::time::Instant::now(); tokio::time::sleep(std::time::Duration::from_secs(1)).await; @@ -161,6 +168,7 @@ async fn main() { client.clone(), tenant_id, timeline_id, + Arc::clone(&start_work_barrier), stats, )); tasks.push(t); @@ -176,6 +184,7 @@ fn timeline( http_client: Client, tenant_id: String, timeline_id: String, + start_work_barrier: Arc, stats: Arc, ) -> impl Future + Send + Sync { async move { @@ -227,14 +236,13 @@ fn timeline( let mut tasks = Vec::>::new(); - let _start = std::time::Instant::now(); - for _i in 0..args.num_tasks { let ranges = ranges.clone(); let _weights = weights.clone(); let _client = http_client.clone(); let tenant_id = tenant_id.clone(); let timeline_id = timeline_id.clone(); + let start_work_barrier = Arc::clone(&start_work_barrier); let task = tokio::spawn({ let stats = Arc::clone(&stats); async move { @@ -245,6 +253,7 @@ fn timeline( ) .await .unwrap(); + start_work_barrier.wait().await; for _i in 0..args.num_requests { let key = { let mut rng = rand::thread_rng();