Le pipe Linux sono implementate come un ring buffer di puntatori a pagine fisiche, con dimensione limitata e copia di pagina in write/read.
L’uso delle syscalls vmsplice e splice permette il trasferimento zero-copy fra buffer utente e pipe, migliorando da ~3.5GiB/s a ~32GiB/s.
Il profiling con perf evidenzia il costo di get_user_pages_fast, che converte memoria virtuale in struct page incrementando i refcount e camminando la page table.
L’impiego di Huge Pages (2MiB) riduce il numero di struct page da generare e accelera get_user_pages, ottenendo un’ulteriore +50% di throughput (~51GiB/s).
Il busy looping con flag non-blocking per vmsplice/splice elimina overhead di sincronizzazione e wake-up, raggiungendo ~62.5GiB/s nel benchmark sintetico.
Get notified when new stories are published for "🇮🇹 Hacker News Italiano"