refactor(rust): use spinlock-based buffer pool (#9951)

Profiling has shown that using a spinlock-based buffer pool is
marginally (~1%) faster than the mutex-based one because it resolves
contention quicker.
This commit is contained in:
Thomas Eizinger
2025-07-23 09:22:48 +10:00
committed by GitHub
parent 86954a4f4a
commit 3e6fc8fda7

View File

@@ -10,7 +10,7 @@ use opentelemetry::{KeyValue, metrics::UpDownCounter};
#[derive(Clone)]
pub struct BufferPool<B> {
inner: Arc<lockfree_object_pool::MutexObjectPool<BufferStorage<B>>>,
inner: Arc<lockfree_object_pool::SpinLockObjectPool<BufferStorage<B>>>,
}
impl<B> BufferPool<B>
@@ -25,7 +25,7 @@ where
.build();
Self {
inner: Arc::new(lockfree_object_pool::MutexObjectPool::new(
inner: Arc::new(lockfree_object_pool::SpinLockObjectPool::new(
move || {
BufferStorage::new(
B::with_capacity(capacity),
@@ -65,8 +65,8 @@ where
}
pub struct Buffer<B> {
inner: lockfree_object_pool::MutexOwnedReusable<BufferStorage<B>>,
pool: Arc<lockfree_object_pool::MutexObjectPool<BufferStorage<B>>>,
inner: lockfree_object_pool::SpinLockOwnedReusable<BufferStorage<B>>,
pool: Arc<lockfree_object_pool::SpinLockObjectPool<BufferStorage<B>>>,
}
impl Buffer<Vec<u8>> {