From 21a2eae5462c00d8c4e85290faaa3172449f756c Mon Sep 17 00:00:00 2001 From: J Reece Wilson Date: Mon, 5 Aug 2024 05:19:58 +0100 Subject: [PATCH] [*] Fix: axboe is a piss baby retard who cant even write a thread safe ring buffer This is the dude tasked with managing Linshits IO stack, including the fundamentally flawed muh zero-syscall pissring (#a), the fucked io_submit apis that never worked properly (incl io_cancel that spuriously returns EINVAL despite all magics matching); the retard who stuck to Linus's idea that MUH O_DIRECT IS LE EVIL YOU MUST USE MY CACHES REEE REEE (#b); and the retard who got indirectly called out by Linus as being apart of the database maintainers who Linus didn't/doesnt like and who wanted these APIs in the first place (#c). #a This dumb cunt can't even write a ring buffer. He thinks the solution to everything is spawn a thread, like the glibc and libuv retards. He seems to think a ring buffer also magically hooks into a thread scheduler, and something something, orange lingo, muh zero syscall overhead as if the kernel should be/is constantly checking every thread for an arbitrary amount of IO ring buffers. #b "The whole notion of "direct IO" is totally braindamaged. Just say no. This is your brain: O This is your brain on O_DIRECT: . Any questions? I should have fought back harder. There really is no valid reason for EVER using O_DIRECT. You need a buffer whatever IO you do, and it might as well be the page cache. There are better ways to control the page cache than play games and think that a page cache isn't necessary. So don't use O_DIRECT." - Commit Torbals, maintainer of toy academic kernels #c "AIO is a horrible ad-hoc design, with the main excuse being "other, less gifted people, made that design, and we are implementing it for compatibility because database people - who seldom have any shred of taste - actually use it". But AIO was always really really ugly." - Commie Torbals, maintainer of toy academic kernels "Jens works for Oracle" - https://web.archive.org/web/20130402030321/https://events.linuxfoundation.org/jls06b --- Source/AuProcAddresses.Linux.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/AuProcAddresses.Linux.cpp b/Source/AuProcAddresses.Linux.cpp index 86b98ef7..d79bfc62 100644 --- a/Source/AuProcAddresses.Linux.cpp +++ b/Source/AuProcAddresses.Linux.cpp @@ -19,8 +19,6 @@ namespace Aurora { - #define read_barrier() __asm__ __volatile__("lfence" ::: "memory") - static const auto kAioRingMagic = 0xa10a10a1u; void InitLinuxAddresses() @@ -227,15 +225,21 @@ namespace Aurora while (i < max_nr) { - auto head = pRing->head; + auto head = AuAtomicLoad(&pRing->head); if (head == pRing->tail) { break; } events[i++] = pRing->events[head]; - read_barrier(); - pRing->head = (head + 1) % pRing->nr; + + auto nextHead = (head + 1) % pRing->nr; + if (AuAtomicCompareExchange(&pRing->head, + nextHead, + head) != head) + { + i--; + } } if (!i &&