From 4967591ff8dc023491379956c64c1942eff3cbdd Mon Sep 17 00:00:00 2001 From: amir Date: Sat, 7 Mar 2026 01:40:31 +0100 Subject: [PATCH] Improving the lock free mpmc queue Making the queue growable Add padding to avoir false sharing Add sleep() and SwitchToThread() to limit spinning --- binaries/changlog.txt | 4 ++ binaries/file_hasher_v3.2.exe | Bin 0 -> 165376 bytes platform.h | 12 +++-- platform_windows.c | 84 ++++++++++++++++++++++++++++------ 4 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 binaries/file_hasher_v3.2.exe diff --git a/binaries/changlog.txt b/binaries/changlog.txt index 86dc9f8..07bcec1 100644 --- a/binaries/changlog.txt +++ b/binaries/changlog.txt @@ -9,3 +9,7 @@ v3.0: Simple mutex/critical section based MPMC queue reusable hashing buffer v3.1: Lock free MPMC queue + +v3.2: Making the lock free MPMC queue growable +Add padding to avoir false sharing +Add sleep() and SwitchToThread() to limit spinning diff --git a/binaries/file_hasher_v3.2.exe b/binaries/file_hasher_v3.2.exe new file mode 100644 index 0000000000000000000000000000000000000000..836439627045a5e291161617a76af97b17a1eb84 GIT binary patch literal 165376 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%0D-97kc} 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 = capacity; - q->mask = capacity - 1; + q->capacity = max_capacity; + q->mask = max_capacity - 1; - q->slots = malloc(sizeof(MPMCSlot) * capacity); + size_t bytes = sizeof(MPMCSlot) * max_capacity; - for (size_t i = 0; i < capacity; i++) { + q->slots = VirtualAlloc(NULL, bytes, MEM_RESERVE, PAGE_READWRITE); + + if (!q->slots) { + fprintf(stderr, "VirtualAlloc reserve failed\n"); + exit(1); + } + + q->commit_step = (64ull * 1024 * 1024) / sizeof(MPMCSlot); + + q->committed = q->commit_step; + + VirtualAlloc(q->slots, q->commit_step * sizeof(MPMCSlot), MEM_COMMIT, + PAGE_READWRITE); + + for (size_t i = 0; i < q->committed; i++) { atomic_init(&q->slots[i].seq, i); q->slots[i].data = NULL; } @@ -97,6 +111,27 @@ void mpmc_init(MPMCQueue *q, size_t capacity) { atomic_init(&q->tail, 0); } +static void mpmc_commit_more(MPMCQueue *q) { + size_t start = q->committed; + + size_t new_commit = start + q->commit_step; + if (new_commit > q->capacity) + new_commit = q->capacity; + + if (!atomic_compare_exchange_strong(&q->committed, &start, new_commit)) + return; // another thread already committed + + size_t count = new_commit - start; + + VirtualAlloc(&q->slots[start], count * sizeof(MPMCSlot), MEM_COMMIT, + PAGE_READWRITE); + + for (size_t i = start; i < new_commit; i++) { + atomic_init(&q->slots[i].seq, i); + q->slots[i].data = NULL; + } +} + void mpmc_push(MPMCQueue *q, FileEntry *item) { MPMCSlot *slot; size_t pos; @@ -110,15 +145,27 @@ void mpmc_push(MPMCQueue *q, FileEntry *item) { intptr_t diff = (intptr_t)seq - (intptr_t)pos; if (diff == 0) { + if (atomic_compare_exchange_weak_explicit(&q->tail, &pos, pos + 1, memory_order_relaxed, memory_order_relaxed)) break; + } else if (diff < 0) { - // queue full - _mm_pause(); + + size_t committed = + atomic_load_explicit(&q->committed, memory_order_relaxed); + + if (pos >= committed) { + mpmc_commit_more(q); + continue; + } + + Sleep(1000); // queue actually full + } else { - _mm_pause(); + + Sleep(1000); } } @@ -131,6 +178,8 @@ FileEntry *mpmc_pop(MPMCQueue *q) { MPMCSlot *slot; size_t pos; + int spins = 0; + for (;;) { pos = atomic_load_explicit(&q->head, memory_order_relaxed); @@ -146,13 +195,20 @@ FileEntry *mpmc_pop(MPMCQueue *q) { memory_order_relaxed)) break; - // } else if (diff < 0) { - // - // _mm_pause(); // wait for producers + } else if (diff < 0) { + + Sleep(1000); } else { + if (++spins > 10) { - _mm_pause(); + SwitchToThread(); // yield CPU + spins = 0; + + } else { + + _mm_pause(); + } } } @@ -527,7 +583,7 @@ int main(int argc, char **argv) { // Step 1: Scan all folders // ------------------------------- - mpmc_init(&g_file_queue, 65536); + mpmc_init(&g_file_queue, 1024 * 1024 * 1024); DirQueue q; memset(&q, 0, sizeof(q));