aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralexvru <alexvru@ydb.tech>2023-09-08 12:47:59 +0300
committeralexvru <alexvru@ydb.tech>2023-09-08 13:52:14 +0300
commite4028d4db95cf836e24ffb060b3215b667ecd457 (patch)
tree6341f8889ec45ff873c3f60fbf10cbd2bde33d16
parent3b02a457d931811bd5353708dbc8dc74a5fa42b5 (diff)
downloadydb-e4028d4db95cf836e24ffb060b3215b667ecd457.tar.gz
Revert commit rXXXXXX, Introduce perfect activation queue
-rw-r--r--library/cpp/actors/core/CMakeLists.darwin-x86_64.txt1
-rw-r--r--library/cpp/actors/core/CMakeLists.linux-aarch64.txt1
-rw-r--r--library/cpp/actors/core/CMakeLists.linux-x86_64.txt1
-rw-r--r--library/cpp/actors/core/CMakeLists.windows-x86_64.txt1
-rw-r--r--library/cpp/actors/core/executor_pool_base.cpp6
-rw-r--r--library/cpp/actors/core/executor_pool_base.h4
-rw-r--r--library/cpp/actors/core/executor_pool_basic.cpp8
-rw-r--r--library/cpp/actors/core/executor_pool_io.cpp16
-rw-r--r--library/cpp/actors/core/executor_pool_io.h2
-rw-r--r--library/cpp/actors/core/executor_pool_united.cpp12
-rw-r--r--library/cpp/actors/core/mailbox.cpp36
-rw-r--r--library/cpp/actors/core/mailbox.h3
-rw-r--r--library/cpp/actors/core/perfect_activation_queue.cpp95
-rw-r--r--library/cpp/actors/core/perfect_activation_queue.h29
-rw-r--r--library/cpp/actors/core/ya.make2
15 files changed, 43 insertions, 174 deletions
diff --git a/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt b/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt
index 392a1b5ea7..c5c1629513 100644
--- a/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt
+++ b/library/cpp/actors/core/CMakeLists.darwin-x86_64.txt
@@ -77,7 +77,6 @@ target_sources(cpp-actors-core PRIVATE
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic_provider.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/worker_context.cpp
- ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/perfect_activation_queue.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/probes.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/process_stats.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/scheduler_actor.cpp
diff --git a/library/cpp/actors/core/CMakeLists.linux-aarch64.txt b/library/cpp/actors/core/CMakeLists.linux-aarch64.txt
index cf4e5c9440..23f4e3ba64 100644
--- a/library/cpp/actors/core/CMakeLists.linux-aarch64.txt
+++ b/library/cpp/actors/core/CMakeLists.linux-aarch64.txt
@@ -78,7 +78,6 @@ target_sources(cpp-actors-core PRIVATE
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic_provider.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/worker_context.cpp
- ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/perfect_activation_queue.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/probes.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/process_stats.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/scheduler_actor.cpp
diff --git a/library/cpp/actors/core/CMakeLists.linux-x86_64.txt b/library/cpp/actors/core/CMakeLists.linux-x86_64.txt
index cf4e5c9440..23f4e3ba64 100644
--- a/library/cpp/actors/core/CMakeLists.linux-x86_64.txt
+++ b/library/cpp/actors/core/CMakeLists.linux-x86_64.txt
@@ -78,7 +78,6 @@ target_sources(cpp-actors-core PRIVATE
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic_provider.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/worker_context.cpp
- ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/perfect_activation_queue.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/probes.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/process_stats.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/scheduler_actor.cpp
diff --git a/library/cpp/actors/core/CMakeLists.windows-x86_64.txt b/library/cpp/actors/core/CMakeLists.windows-x86_64.txt
index 392a1b5ea7..c5c1629513 100644
--- a/library/cpp/actors/core/CMakeLists.windows-x86_64.txt
+++ b/library/cpp/actors/core/CMakeLists.windows-x86_64.txt
@@ -77,7 +77,6 @@ target_sources(cpp-actors-core PRIVATE
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/monotonic_provider.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/worker_context.cpp
- ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/perfect_activation_queue.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/probes.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/process_stats.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/scheduler_actor.cpp
diff --git a/library/cpp/actors/core/executor_pool_base.cpp b/library/cpp/actors/core/executor_pool_base.cpp
index c8e3c0aa71..10362a7a2b 100644
--- a/library/cpp/actors/core/executor_pool_base.cpp
+++ b/library/cpp/actors/core/executor_pool_base.cpp
@@ -71,7 +71,7 @@ namespace NActors {
{}
TExecutorPoolBase::~TExecutorPoolBase() {
- while (Activations.Pop())
+ while (Activations.Pop(0))
;
}
@@ -105,7 +105,7 @@ namespace NActors {
}
void TExecutorPoolBase::ScheduleActivation(ui32 activation) {
- ScheduleActivationEx(activation, 0);
+ ScheduleActivationEx(activation, AtomicIncrement(ActivationsRevolvingCounter));
}
Y_FORCE_INLINE bool IsAllowedToCapture(IExecutorPool *self) {
@@ -121,7 +121,7 @@ namespace NActors {
TlsThreadContext->CapturedType = TlsThreadContext->SendingType;
}
if (activation) {
- ScheduleActivationEx(activation, 0);
+ ScheduleActivationEx(activation, AtomicIncrement(ActivationsRevolvingCounter));
}
}
diff --git a/library/cpp/actors/core/executor_pool_base.h b/library/cpp/actors/core/executor_pool_base.h
index 6a321e32f8..e94ffdbad9 100644
--- a/library/cpp/actors/core/executor_pool_base.h
+++ b/library/cpp/actors/core/executor_pool_base.h
@@ -3,7 +3,6 @@
#include "executor_pool.h"
#include "executor_thread.h"
#include "scheduler_queue.h"
-#include "perfect_activation_queue.h"
#include <library/cpp/actors/util/affinity.h>
#include <library/cpp/actors/util/unordered_cache.h>
#include <library/cpp/actors/util/threadparkpad.h>
@@ -46,7 +45,8 @@ namespace NActors {
const i16 PoolThreads;
TIntrusivePtr<TAffinity> ThreadsAffinity;
TAtomic Semaphore = 0;
- TPerfectActivationQueue Activations;
+ TUnorderedCache<ui32, 512, 4> Activations;
+ TAtomic ActivationsRevolvingCounter = 0;
volatile bool StopFlag = false;
public:
TExecutorPoolBase(ui32 poolId, ui32 threads, TAffinity* affinity);
diff --git a/library/cpp/actors/core/executor_pool_basic.cpp b/library/cpp/actors/core/executor_pool_basic.cpp
index a607435a1a..b27f98487f 100644
--- a/library/cpp/actors/core/executor_pool_basic.cpp
+++ b/library/cpp/actors/core/executor_pool_basic.cpp
@@ -230,7 +230,7 @@ namespace NActors {
} while (true);
}
- ui32 TBasicExecutorPool::GetReadyActivation(TWorkerContext& wctx, ui64 /*revolvingCounter*/) {
+ ui32 TBasicExecutorPool::GetReadyActivation(TWorkerContext& wctx, ui64 revolvingCounter) {
TWorkerId workerId = wctx.WorkerId;
Y_VERIFY_DEBUG(workerId < PoolThreads);
@@ -264,7 +264,7 @@ namespace NActors {
}
}
} else {
- if (const ui32 activation = Activations.Pop()) {
+ if (const ui32 activation = Activations.Pop(++revolvingCounter)) {
if (workerId >= 0) {
AtomicSet(Threads[workerId].WaitingFlag, TThreadCtx::WS_RUNNING);
}
@@ -320,8 +320,8 @@ namespace NActors {
}
}
- void TBasicExecutorPool::ScheduleActivationEx(ui32 activation, ui64 /*revolvingCounter*/) {
- Activations.Push(activation);
+ void TBasicExecutorPool::ScheduleActivationEx(ui32 activation, ui64 revolvingCounter) {
+ Activations.Push(activation, revolvingCounter);
bool needToWakeUp = false;
TAtomic x = AtomicGet(Semaphore);
diff --git a/library/cpp/actors/core/executor_pool_io.cpp b/library/cpp/actors/core/executor_pool_io.cpp
index 8fc0299169..f315effe0c 100644
--- a/library/cpp/actors/core/executor_pool_io.cpp
+++ b/library/cpp/actors/core/executor_pool_io.cpp
@@ -22,11 +22,11 @@ namespace NActors {
TIOExecutorPool::~TIOExecutorPool() {
Threads.Destroy();
- while (ThreadQueue.Pop())
+ while (ThreadQueue.Pop(0))
;
}
- ui32 TIOExecutorPool::GetReadyActivation(TWorkerContext& wctx, ui64 /*revolvingCounter*/) {
+ ui32 TIOExecutorPool::GetReadyActivation(TWorkerContext& wctx, ui64 revolvingCounter) {
i16 workerId = wctx.WorkerId;
Y_VERIFY_DEBUG(workerId < PoolThreads);
@@ -38,7 +38,7 @@ namespace NActors {
const TAtomic x = AtomicDecrement(Semaphore);
if (x < 0) {
TThreadCtx& threadCtx = Threads[workerId];
- ThreadQueue.Push(workerId + 1);
+ ThreadQueue.Push(workerId + 1, revolvingCounter);
hpnow = GetCycleCountFast();
elapsed += hpnow - hpstart;
if (threadCtx.Pad.Park())
@@ -48,7 +48,7 @@ namespace NActors {
}
while (!RelaxedLoad(&StopFlag)) {
- if (const ui32 activation = Activations.Pop()) {
+ if (const ui32 activation = Activations.Pop(++revolvingCounter)) {
hpnow = GetCycleCountFast();
elapsed += hpnow - hpstart;
wctx.AddElapsedCycles(ActorSystemIndex, elapsed);
@@ -86,12 +86,12 @@ namespace NActors {
ScheduleQueue->Writer.Push(deadline.MicroSeconds(), ev.Release(), cookie);
}
- void TIOExecutorPool::ScheduleActivationEx(ui32 activation, ui64 /*revolvingWriteCounter*/) {
- Activations.Push(activation);
+ void TIOExecutorPool::ScheduleActivationEx(ui32 activation, ui64 revolvingWriteCounter) {
+ Activations.Push(activation, revolvingWriteCounter);
const TAtomic x = AtomicIncrement(Semaphore);
if (x <= 0) {
- for (;;) {
- if (const ui32 x = ThreadQueue.Pop()) {
+ for (;; ++revolvingWriteCounter) {
+ if (const ui32 x = ThreadQueue.Pop(revolvingWriteCounter)) {
const ui32 threadIdx = x - 1;
Threads[threadIdx].Pad.Unpark();
return;
diff --git a/library/cpp/actors/core/executor_pool_io.h b/library/cpp/actors/core/executor_pool_io.h
index dc4e872df3..f3f1a11819 100644
--- a/library/cpp/actors/core/executor_pool_io.h
+++ b/library/cpp/actors/core/executor_pool_io.h
@@ -18,7 +18,7 @@ namespace NActors {
};
TArrayHolder<TThreadCtx> Threads;
- TPerfectActivationQueue ThreadQueue;
+ TUnorderedCache<ui32, 512, 4> ThreadQueue;
THolder<NSchedulerQueue::TQueueType> ScheduleQueue;
TTicketLock ScheduleLock;
diff --git a/library/cpp/actors/core/executor_pool_united.cpp b/library/cpp/actors/core/executor_pool_united.cpp
index cdd37a4fbd..2e689dec59 100644
--- a/library/cpp/actors/core/executor_pool_united.cpp
+++ b/library/cpp/actors/core/executor_pool_united.cpp
@@ -33,7 +33,7 @@ namespace NActors {
TAtomic Waiters = 0; // Number of idle cpus, waiting for activations in this pool
char Padding[64 - sizeof(TAtomic)];
- TPerfectActivationQueue Activations; // MPMC-queue for mailbox activations
+ TUnorderedCache<ui32, 512, 4> Activations; // MPMC-queue for mailbox activations
TAtomic Active = 0; // Number of mailboxes ready for execution or currently executing
TAtomic Tokens = 0; // Pending tokens (token is required for worker to start execution, guarantees concurrency limit and activation availability)
volatile bool StopFlag = false;
@@ -51,7 +51,7 @@ namespace NActors {
TStackVec<TCpu*, 15> WakeOrderCpus;
~TPool() {
- while (Activations.Pop()) {}
+ while (Activations.Pop(0)) {}
}
void Stop() {
@@ -63,8 +63,8 @@ namespace NActors {
}
// Add activation of newly scheduled mailbox. Returns generated token (unless concurrency is exceeded)
- bool PushActivation(ui32 activation, ui64 /*revolvingCounter*/) {
- Activations.Push(activation);
+ bool PushActivation(ui32 activation, ui64 revolvingCounter) {
+ Activations.Push(activation, revolvingCounter);
TAtomicBase active = AtomicIncrement(Active);
if (active <= Concurrency) { // token generated
AtomicIncrement(Tokens);
@@ -103,9 +103,9 @@ namespace NActors {
}
// Get activation. Requires acquired token.
- void BeginExecution(ui32& activation, ui64 /*revolvingCounter*/) {
+ void BeginExecution(ui32& activation, ui64 revolvingCounter) {
while (!RelaxedLoad(&StopFlag)) {
- if (activation = Activations.Pop()) {
+ if (activation = Activations.Pop(++revolvingCounter)) {
return;
}
SpinLockPause();
diff --git a/library/cpp/actors/core/mailbox.cpp b/library/cpp/actors/core/mailbox.cpp
index b0d9a9802d..b28fdc0771 100644
--- a/library/cpp/actors/core/mailbox.cpp
+++ b/library/cpp/actors/core/mailbox.cpp
@@ -93,15 +93,15 @@ namespace NActors {
}
}
- while (MailboxCacheSimple.Pop())
+ while (MailboxCacheSimple.Pop(0))
;
- while (MailboxCacheRevolving.Pop())
+ while (MailboxCacheRevolving.Pop(0))
;
- while (MailboxCacheHTSwap.Pop())
+ while (MailboxCacheHTSwap.Pop(0))
;
- while (MailboxCacheReadAsFilled.Pop())
+ while (MailboxCacheReadAsFilled.Pop(0))
;
- while (MailboxCacheTinyReadAsFilled.Pop())
+ while (MailboxCacheTinyReadAsFilled.Pop(0))
;
}
@@ -276,11 +276,11 @@ namespace NActors {
return x;
}
- ui32 TMailboxTable::TryAllocateMailbox(TMailboxType::EType type, ui64 /*revolvingCounter*/) {
+ ui32 TMailboxTable::TryAllocateMailbox(TMailboxType::EType type, ui64 revolvingCounter) {
switch (type) {
case TMailboxType::Simple:
do {
- if (ui32 ret = MailboxCacheSimple.Pop()) {
+ if (ui32 ret = MailboxCacheSimple.Pop(revolvingCounter)) {
AtomicDecrement(CachedSimpleMailboxes);
return ret;
}
@@ -288,7 +288,7 @@ namespace NActors {
return 0;
case TMailboxType::Revolving:
do {
- if (ui32 ret = MailboxCacheRevolving.Pop()) {
+ if (ui32 ret = MailboxCacheRevolving.Pop(revolvingCounter)) {
AtomicDecrement(CachedRevolvingMailboxes);
return ret;
}
@@ -296,7 +296,7 @@ namespace NActors {
return 0;
case TMailboxType::HTSwap:
do {
- if (ui32 ret = MailboxCacheHTSwap.Pop()) {
+ if (ui32 ret = MailboxCacheHTSwap.Pop(revolvingCounter)) {
AtomicDecrement(CachedHTSwapMailboxes);
return ret;
}
@@ -304,7 +304,7 @@ namespace NActors {
return 0;
case TMailboxType::ReadAsFilled:
do {
- if (ui32 ret = MailboxCacheReadAsFilled.Pop()) {
+ if (ui32 ret = MailboxCacheReadAsFilled.Pop(revolvingCounter)) {
AtomicDecrement(CachedReadAsFilledMailboxes);
return ret;
}
@@ -312,7 +312,7 @@ namespace NActors {
return 0;
case TMailboxType::TinyReadAsFilled:
do {
- if (ui32 ret = MailboxCacheTinyReadAsFilled.Pop()) {
+ if (ui32 ret = MailboxCacheTinyReadAsFilled.Pop(revolvingCounter)) {
AtomicDecrement(CachedTinyReadAsFilledMailboxes);
return ret;
}
@@ -329,27 +329,27 @@ namespace NActors {
template
bool TMailboxTable::GenericSendTo<&IExecutorPool::SpecificScheduleActivation>(TAutoPtr<IEventHandle>& ev, IExecutorPool* executorPool);
- void TMailboxTable::ReclaimMailbox(TMailboxType::EType type, ui32 hint, ui64 /*revolvingCounter*/) {
+ void TMailboxTable::ReclaimMailbox(TMailboxType::EType type, ui32 hint, ui64 revolvingCounter) {
if (hint != 0) {
switch (type) {
case TMailboxType::Simple:
- MailboxCacheSimple.Push(hint);
+ MailboxCacheSimple.Push(hint, revolvingCounter);
AtomicIncrement(CachedSimpleMailboxes);
break;
case TMailboxType::Revolving:
- MailboxCacheRevolving.Push(hint);
+ MailboxCacheRevolving.Push(hint, revolvingCounter);
AtomicIncrement(CachedRevolvingMailboxes);
break;
case TMailboxType::HTSwap:
- MailboxCacheHTSwap.Push(hint);
+ MailboxCacheHTSwap.Push(hint, revolvingCounter);
AtomicIncrement(CachedHTSwapMailboxes);
break;
case TMailboxType::ReadAsFilled:
- MailboxCacheReadAsFilled.Push(hint);
+ MailboxCacheReadAsFilled.Push(hint, revolvingCounter);
AtomicIncrement(CachedReadAsFilledMailboxes);
break;
case TMailboxType::TinyReadAsFilled:
- MailboxCacheTinyReadAsFilled.Push(hint);
+ MailboxCacheTinyReadAsFilled.Push(hint, revolvingCounter);
AtomicIncrement(CachedTinyReadAsFilledMailboxes);
break;
default:
@@ -571,7 +571,7 @@ namespace NActors {
ui32 bufIndex;
for (bufIndex = 0; index != endIndex && bufIndex != bufSize; ++bufIndex, ++index)
buf[bufIndex] = lineIndexMask | index;
- cache->PushBulk(buf, bufIndex);
+ cache->PushBulk(buf, bufIndex, index);
AtomicAdd(*counter, bufIndex);
}
diff --git a/library/cpp/actors/core/mailbox.h b/library/cpp/actors/core/mailbox.h
index 27a668aa0c..0f1c3abc10 100644
--- a/library/cpp/actors/core/mailbox.h
+++ b/library/cpp/actors/core/mailbox.h
@@ -5,7 +5,6 @@
#include "executor_pool.h"
#include "mailbox_queue_simple.h"
#include "mailbox_queue_revolving.h"
-#include "perfect_activation_queue.h"
#include <library/cpp/actors/util/unordered_cache.h>
#include <library/cpp/threading/queue/mpsc_htswap.h>
#include <library/cpp/threading/queue/mpsc_read_as_filled.h>
@@ -301,7 +300,7 @@ namespace NActors {
TAtomic LastAllocatedLine;
TAtomic AllocatedMailboxCount;
- using TMailboxCache = TPerfectActivationQueue;
+ typedef TUnorderedCache<ui32, 512, 4> TMailboxCache;
TMailboxCache MailboxCacheSimple;
TAtomic CachedSimpleMailboxes;
TMailboxCache MailboxCacheRevolving;
diff --git a/library/cpp/actors/core/perfect_activation_queue.cpp b/library/cpp/actors/core/perfect_activation_queue.cpp
deleted file mode 100644
index d1975b5a47..0000000000
--- a/library/cpp/actors/core/perfect_activation_queue.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "perfect_activation_queue.h"
-
-#include <util/string/builder.h>
-
-namespace NActors {
-
- static constexpr ui32 SizeBits = 20;
- static constexpr ui32 SizeItems = 1 << SizeBits;
- static constexpr ui32 SizeMask = SizeItems - 1;
-
- // index conversion: CCCCCCCCCBBBBBAAA is converted to CCCCCCCCCAAABBBBB
- static constexpr ui32 StripeSizeBitsA = 4; // makes a cacheline of 64 bytes
- static constexpr ui32 StripeSizeBitsB = 4;
-
- static void *AllocateItems(size_t size, size_t alignment) {
-#if defined(_win_)
- return _aligned_malloc(size, alignment);
-#else
- return aligned_alloc(alignment, size);
-#endif
- }
-
- TPerfectActivationQueue::TPerfectActivationQueue()
- : QueueData(static_cast<TItem*>(AllocateItems(SizeItems * sizeof(TItem), 4096)))
- {
- Y_VERIFY(QueueData);
- memset(QueueData, 0, SizeItems * sizeof(TItem));
- }
-
- TPerfectActivationQueue::~TPerfectActivationQueue() {
- free(QueueData);
- }
-
- void TPerfectActivationQueue::Push(ui32 value) {
- Y_VERIFY(value && value != Max<ui32>());
- for (;;) {
- const ui64 writeIndex = WriteIndex++;
- TItem *ptr = QueueData + ConvertIndex(writeIndex & SizeMask);
- const TItem cell = __atomic_exchange_n(ptr, value, __ATOMIC_SEQ_CST);
-
- if (!cell) { // cell was free
- return;
- } else if (cell == Max<ui32>()) { // cell was forbidden
- __atomic_store_n(ptr, 0, __ATOMIC_SEQ_CST);
- } else {
- Y_FAIL();
- }
- }
- }
-
- ui32 TPerfectActivationQueue::Pop() {
- for (;;) {
- const ui64 readIndex = ReadIndex++;
- TItem *ptr = QueueData + ConvertIndex(readIndex & SizeMask);
- TItem cell = __atomic_exchange_n(ptr, 0, __ATOMIC_SEQ_CST);
- if (cell) {
- Y_VERIFY(cell < Max<ui32>());
- return cell;
- }
-
- // value is either not yet written, or this is a free cell -- forbid this cell for now
- for (ui32 i = 0; i < 10; ++i) {
- _mm_pause();
- }
-
- cell = __atomic_exchange_n(ptr, Max<ui32>(), __ATOMIC_SEQ_CST);
- if (cell) {
- Y_VERIFY(cell < Max<ui32>());
- __atomic_store_n(ptr, 0, __ATOMIC_SEQ_CST);
- } else if (ReadIndex < WriteIndex) {
- continue; // give it another try, it was just a race
- }
-
- return cell;
- }
- }
-
- void TPerfectActivationQueue::PushBulk(ui32 *values, size_t count) {
- while (count--) {
- Push(*values++);
- }
- }
-
- ui32 TPerfectActivationQueue::ConvertIndex(ui32 index) {
- constexpr ui32 maskA = (1 << StripeSizeBitsA) - 1;
- const ui32 a = index & maskA;
-
- constexpr ui32 maskB = (1 << StripeSizeBitsB) - 1;
- const ui32 b = index >> StripeSizeBitsA & maskB;
-
- const ui32 other = index >> StripeSizeBitsA + StripeSizeBitsB;
- return other << StripeSizeBitsA + StripeSizeBitsB | a << StripeSizeBitsB | b;
- }
-
-}
diff --git a/library/cpp/actors/core/perfect_activation_queue.h b/library/cpp/actors/core/perfect_activation_queue.h
deleted file mode 100644
index 79e08c27d6..0000000000
--- a/library/cpp/actors/core/perfect_activation_queue.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#pragma once
-
-#include "defs.h"
-
-namespace NActors {
-
- class TPerfectActivationQueue {
- using TItem = ui32;
-
- alignas(64) std::atomic_uint64_t ReadIndex = 0;
- alignas(64) std::atomic_uint64_t WriteIndex = 0;
-
- TItem *QueueData;
-
- public:
- static constexpr ui32 Concurrency = 1;
-
- public:
- TPerfectActivationQueue();
- ~TPerfectActivationQueue();
- void Push(ui32 value);
- ui32 Pop();
- void PushBulk(ui32 *values, size_t count);
-
- private:
- static ui32 ConvertIndex(ui32 index);
- };
-
-} // NActors
diff --git a/library/cpp/actors/core/ya.make b/library/cpp/actors/core/ya.make
index 0eb021d871..649effd22f 100644
--- a/library/cpp/actors/core/ya.make
+++ b/library/cpp/actors/core/ya.make
@@ -85,8 +85,6 @@ SRCS(
monotonic_provider.h
worker_context.cpp
worker_context.h
- perfect_activation_queue.cpp
- perfect_activation_queue.h
probes.cpp
probes.h
process_stats.cpp