Formålet er at måle og optimere datagennemstrømningen gennem Linux pipes ved trinvis at forbedre et testprogram og bruge perf til profilering.
Skrivning/læsning med write/read opnår kun omkring 3,5GiB/s, fordi pipes er cirkulære buffere med 4KiB-sider og kræver kopiering og sideallokering i kernen.
Ved at bruge vmsplice og splice til zero-copy overførsler undgås kernekopiering, hvilket øger hastigheden til ca. 32GiB/s.
get_user_pages_fast (iov_iter_get_pages) udtrækker struct page-referencer fra brugerhukommelse, og ved at anvende 2MiB huge pages reduceres overhead yderligere og giver ~50 % bedre ydelse.
Ved at bruge nonblock-flag og busy looping i stedet for at vente på wakeups fjernes synkroniseringsventetid, så gennemstrømningen når ~62GiB/s mod fuld CPU-udnyttelse.
Optimeringsrejsen demonstrerer vigtige emner inden for højtydende I/O: zero-copy, ringbuffere, paging, sideallokering og synkroniseringsomkostninger.
Get notified when new stories are published for "🇩🇰 Hacker News Dansk"