使用普通 read/write 系统调用测得管道吞吐量约 3.5GiB/s,远低于内存带宽
通过 perf 分析发现管道写入读出存在大量页拷贝和锁竞争开销
使用 vmsplice/splice 零拷贝将数据直接在用户空间和内核管道缓冲区间传递,性能提升至约 32GiB/s
将缓冲区改用 2MiB 大页后,get_user_pages_fast 更高效,速率增加至约 51GiB/s
对 vmsplice 和 splice 使用非阻塞忙轮询,可进一步减少同步等待开销,速率达约 62.5GiB/s
文章还介绍了 Linux 管道内部的环形页缓冲、虚拟内存分页及 struct page 原理
Get notified when new stories are published for "🇨🇳 Hacker News 简体中文"