Исходная реализация через системные вызовы read/write обеспечивает лишь ~3.7 GiB/s из-за двойного копирования страниц, синхронизации и аллокаций.
Использование vmsplice/splice для zero-copy передачи между процессами поднимает пропускную способность до ~32 GiB/s.
Применение 2 MiB больших страниц (madvise MADV_HUGEPAGE) сокращает расходы на получение struct page и повышает скорость до ~51 GiB/s.
Переход на неблокирующий режим и busy-loop вместо ожидания во внутренних очередях дает дополнительный ~25% прирост до ~62.5 GiB/s.
Ключевые методы: профилирование perf, понимание реализации кольцевого буфера pipe, zero-copy сплайсинг, использование больших страниц и отказ от блокировок через busy-loop.
Get notified when new stories are published for "🇷🇺 Hacker News Русский"