From: Jaya Prakash Date: Wed, 1 Jul 2026 13:22:48 +0000 (+0000) Subject: os/bluestore: add fast-path allocation latency perf counter for Allocator X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b883573faabca54109a2ddf6556f4be49ebbfc6f;p=ceph.git os/bluestore: add fast-path allocation latency perf counter for Allocator Fixes: https://tracker.ceph.com/issues/76936 Signed-off-by: Jaya Prakash --- diff --git a/src/os/bluestore/AllocatorBase.cc b/src/os/bluestore/AllocatorBase.cc index a7c068dcfeb..3f0a78bfceb 100644 --- a/src/os/bluestore/AllocatorBase.cc +++ b/src/os/bluestore/AllocatorBase.cc @@ -215,7 +215,7 @@ void AllocatorPerf::_init_logger(std::string_view name) { b.add_time_avg(l_bluestore_allocator_alloc_process_lat, "alloc_process_lat", - "Allocator processing latency", + "Allocator processing latency while holding lock", "apl", PerfCountersBuilder::PRIO_USEFUL); b.add_time_avg(l_bluestore_allocator_lock_wait_lat, @@ -223,6 +223,11 @@ void AllocatorPerf::_init_logger(std::string_view name) { "Allocator lock wait latency", "lwl", PerfCountersBuilder::PRIO_USEFUL); + b.add_time_avg(l_bluestore_allocator_nolock_process_lat, + "nolock_process_lat", + "Allocator lockless fast-path allocation latency", + "fpl", + PerfCountersBuilder::PRIO_USEFUL); logger = b.create_perf_counters(); diff --git a/src/os/bluestore/AllocatorBase.h b/src/os/bluestore/AllocatorBase.h index dc567c3c2c9..3db35466007 100644 --- a/src/os/bluestore/AllocatorBase.h +++ b/src/os/bluestore/AllocatorBase.h @@ -26,6 +26,7 @@ enum { l_bluestore_allocator_first = 732300, l_bluestore_allocator_alloc_process_lat, l_bluestore_allocator_lock_wait_lat, + l_bluestore_allocator_nolock_process_lat, l_bluestore_allocator_last }; diff --git a/src/os/bluestore/Btree2Allocator.cc b/src/os/bluestore/Btree2Allocator.cc index 7531f059852..d01839d3518 100644 --- a/src/os/bluestore/Btree2Allocator.cc +++ b/src/os/bluestore/Btree2Allocator.cc @@ -86,9 +86,13 @@ int64_t Btree2Allocator::allocate( max_alloc_size = p2align(uint64_t(cap), (uint64_t)block_size); } uint64_t cached_chunk_offs = 0; + auto fast_alloc_start = mono_clock::now(); if (cache && cache->try_get(&cached_chunk_offs, want)) { num_free -= want; extents->emplace_back(cached_chunk_offs, want); + logger->tinc_with_max( + l_bluestore_allocator_nolock_process_lat, + mono_clock::now() - fast_alloc_start); return want; } auto lock_wait_start = mono_clock::now();