我看到了这篇文章:
http://lwn.net/2001/0419/kernel.php3
零拷贝网络将在 2.4.4 中出现。这个补丁由 David Miller、Alexey Kuznetsov 等人开发和测试了一段时间,并在 2.4.2ac4 中被合并到“ac”内核系列中。在某种程度上,在稳定的内核系列中看到这是一个令人惊讶的变化,因为它在网络代码的深处进行了根本性的改变。然而,从所有报告来看,它是可靠的,并且在某些情况下,它应该会产生显着的性能优势。
有人可以告诉我 Linux 中是否默认存在零拷贝网络,或者这个补丁是否只是为了让想要零拷贝网络的人能够实现它?
换句话说,在当前的 Ubuntu 中,它是否始终执行零拷贝网络,或者我是否必须使用某些系统调用来利用上述补丁?
答案1
在 Linux 的内核 git 存储库中:
git log --oneline -- drivers/net | head -n5000 | egrep -i 'zero[[:space:]]*copy'
告诉我们:
- 7d9e6dd macvtap:如果 iov 需要的页面多于 MAX_SKB_FRAGS,则不要进行零复制
- 05464d2 tuntap:如果 iov 需要的页面多于 MAX_SKB_FRAGS,则不要进行零复制
- bd31fdd macvtap:使用 Zerocopy 时正确线性化 skb
- d09ec76 tuntap:使用 Zerocopy 时正确线性化 skb
- 19a6afb tuntap:在打开期间设置 SOCK_ZEROCOPY 标志
- 149d36f tun:向零复制回调报告孤立碎片错误
(我相信)这清楚而积极地回答了你的问题。 ;)