diff --git a/pageserver/src/bin/psbench.rs b/pageserver/src/bin/psbench.rs index e848e30853..32eb4e026f 100644 --- a/pageserver/src/bin/psbench.rs +++ b/pageserver/src/bin/psbench.rs @@ -29,7 +29,7 @@ pub async fn get_page( query.put_u8(2); // Specifies get_page query query.put_u8(0); // Specifies this is not a "latest page" query query.put_u64(lsn.0); - page.write(&mut query); + page.write(&mut query).await?; query.freeze() }; @@ -43,7 +43,7 @@ pub async fn get_page( let response = match FeMessage::read_fut(pagestream).await? { Some(FeMessage::CopyData(page)) => page, - _ => panic!("AAAAA"), + r => panic!("AAAAA {:?}", r), }; let page = { @@ -169,7 +169,16 @@ async fn main() -> Result<()> { let mut updates_per_page: Vec<(&usize, &Page)> = updates_per_page .iter().map(|(k, v)| (v, k)).collect(); updates_per_page.sort(); - dbg!(updates_per_page); + updates_per_page.reverse(); + dbg!(&updates_per_page); + + let hottest_page = updates_per_page[0].1; + let first_update = lsn_page_pairs + .iter() + .filter(|(_lsn, page)| page == hottest_page) + .map(|(lsn, _page)| lsn) + .min() + .unwrap(); // Get raw TCP connection to the pageserver postgres protocol port let mut socket = tokio::net::TcpStream::connect("localhost:15000").await?; @@ -188,10 +197,18 @@ async fn main() -> Result<()> { _ = client.query(init_query.as_str(), &[]) => (), }; - let (some_lsn, some_page) = lsn_page_pairs[0].clone(); - let _page = get_page(&mut socket, &some_lsn, &some_page).await?; - - // TODO write tests + // TODO why is it failing? Page doesn't exist yet maybe? There's error in log file. + // TODO be mindful of caching, take multiple measurements, use monotonic time. + use std::time::{Duration, Instant}; + for (lsn, _pages) in writes_per_entry { + if lsn >= *first_update { + println!("Running get_page {:?} at {:?}", hottest_page, lsn); + let start = Instant::now(); + let _page = get_page(&mut socket, &lsn, &hottest_page).await?; + let duration = start.elapsed(); + println!("Time: {:?}", duration); + } + } Ok(()) } diff --git a/test_runner/performance/test_pageserver.py b/test_runner/performance/test_pageserver.py index 1e783d0f62..2d8be44fa2 100644 --- a/test_runner/performance/test_pageserver.py +++ b/test_runner/performance/test_pageserver.py @@ -15,7 +15,7 @@ def test_get_page(zenith_simple_env: ZenithEnv, zenbenchmark: ZenithBenchmarker) cur.execute('create table t (i integer);') cur.execute('insert into t values (0);') - for i in range(10000): + for i in range(100): cur.execute(f'update t set i = {i};') cur.execute("select * from t;")