From 8fcdc22283a5b04fe673cd7a050a63d9fcc16f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Fri, 7 Jun 2024 23:13:53 +0200 Subject: [PATCH] Add stats info --- pageserver/ctl/src/layers.rs | 2 +- pageserver/src/tenant/storage_layer/image_layer.rs | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/pageserver/ctl/src/layers.rs b/pageserver/ctl/src/layers.rs index 3c7bc935a0..ffcb972613 100644 --- a/pageserver/ctl/src/layers.rs +++ b/pageserver/ctl/src/layers.rs @@ -344,7 +344,7 @@ pub(crate) async fn main(cmd: &LayerCmd) -> Result<()> { tmp_dir: Utf8PathBuf, storage: Arc, file_key: RemotePath, - ) -> Result, u64)>, anyhow::Error> + ) -> Result, u64, u64)>, anyhow::Error> { let _permit = semaphore.acquire().await?; let cancel = CancellationToken::new(); diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index 6c5a4f2b7e..7d811f500e 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -57,6 +57,7 @@ use std::os::unix::prelude::FileExt; use std::str::FromStr; use std::sync::Arc; use tokio::sync::OnceCell; +use tokio::time::Instant; use tokio_stream::StreamExt; use tracing::*; @@ -370,7 +371,7 @@ impl ImageLayer { dest_repo_path: &Utf8Path, path: &Utf8Path, ctx: &RequestContext, - ) -> anyhow::Result, u64)>> { + ) -> anyhow::Result, u64, u64)>> { fn make_conf( image_compression: Option, dest_repo_path: &Utf8Path, @@ -388,13 +389,15 @@ impl ImageLayer { ]; let mut stats = Vec::new(); for image_compression in image_compressions { + let start = Instant::now(); let size = Self::compressed_size_for_conf( path, ctx, make_conf(image_compression, dest_repo_path), ) .await?; - stats.push((image_compression, size)); + let elapsed_ms = start.elapsed().as_millis() as u64; + stats.push((image_compression, size, elapsed_ms)); tokio::task::yield_now().await; } Ok(stats) @@ -442,16 +445,11 @@ impl ImageLayer { .await?; let cursor = block_reader.block_cursor(); - let mut counter = 0u32; while let Some(r) = key_offset_stream.next().await { let (key, offset) = r?; let key = Key::from_slice(&key); let content = cursor.read_blob(offset, ctx).await?; writer.put_image(key, content.into(), ctx).await?; - counter += 1; - if counter % 2048 == 0 { - tokio::task::yield_now().await; - } } Ok(writer.size()) }