From e37236fd56c0844159be7a9201c3771446e5855d Mon Sep 17 00:00:00 2001 From: John Spray Date: Sat, 20 Jul 2024 18:22:25 +0100 Subject: [PATCH] moar cpu efficiency --- .../src/tenant/storage_layer/inmemory_layer.rs | 15 +++++++++++++++ pageserver/src/tenant/timeline.rs | 4 +--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pageserver/src/tenant/storage_layer/inmemory_layer.rs b/pageserver/src/tenant/storage_layer/inmemory_layer.rs index 5941a52e98..acbd2ed856 100644 --- a/pageserver/src/tenant/storage_layer/inmemory_layer.rs +++ b/pageserver/src/tenant/storage_layer/inmemory_layer.rs @@ -521,6 +521,21 @@ impl InMemoryLayer { self.put_value_locked(&mut inner, key, lsn, buf, ctx).await } + pub(crate) async fn put_values( + &self, + values: Vec<(Lsn, Key, smallvec::SmallVec<[u8; 256]>)>, + ctx: &RequestContext, + ) -> Result<()> { + let mut inner = self.inner.write().await; + self.assert_writable(); + for (lsn, key, buf) in values { + self.put_value_locked(&mut inner, key, lsn, &buf, ctx) + .await?; + } + + Ok(()) + } + async fn put_value_locked( &self, locked_inner: &mut RwLockWriteGuard<'_, InMemoryLayerInner>, diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index ca53d66b75..fc8a2d5824 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -6018,9 +6018,7 @@ impl<'a> TimelineWriter<'a> { .handle_open_layer_action(first_lsn, action, ctx) .await?; - for (lsn, key, buf) in serialized { - layer.put_value(key, lsn, &buf, ctx).await?; - } + layer.put_values(serialized, ctx).await?; // Update the current size only when the entire write was ok. // In case of failures, we may have had partial writes which