From 79c577c2ebc97771d292f9ae87a85dfd869821a8 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Wed, 4 Oct 2023 16:47:18 +0000 Subject: [PATCH] async version of previous commit both perform badly in uncontended case, so, not an option --- pageserver/src/page_cache.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pageserver/src/page_cache.rs b/pageserver/src/page_cache.rs index 9c142d00fc..c17b1b4b4a 100644 --- a/pageserver/src/page_cache.rs +++ b/pageserver/src/page_cache.rs @@ -250,7 +250,7 @@ pub struct PageCache { /// Index of the next candidate to evict, for the Clock replacement algorithm. /// This is interpreted modulo the page cache size. - next_evict_slot: std::sync::Mutex, + next_evict_slot: tokio::sync::Mutex, size_metrics: &'static PageCacheSizeMetrics, } @@ -882,7 +882,7 @@ impl PageCache { &self, _permit_witness: &PinnedSlotsPermit, ) -> anyhow::Result<(usize, tokio::sync::RwLockWriteGuard)> { - let mut next_evict_slot = self.next_evict_slot.lock().unwrap(); + let mut next_evict_slot = self.next_evict_slot.lock().await; loop { let slot_idx = *next_evict_slot % self.slots.len(); *next_evict_slot = next_evict_slot.wrapping_add(1); @@ -943,7 +943,7 @@ impl PageCache { materialized_page_map: Default::default(), immutable_page_map: Default::default(), slots, - next_evict_slot: std::sync::Mutex::new(0), + next_evict_slot: tokio::sync::Mutex::new(0), size_metrics, pinned_slots: Arc::new(tokio::sync::Semaphore::new(num_pages)), }