Linux 上默认实现“零拷贝网络”吗?

Linux 上默认实现“零拷贝网络”吗?

我看到了这篇文章:

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:向零复制回调报告孤立碎片错误

(我相信)这清楚而积极地回答了你的问题。 ;)

相关内容