gpt4 book ai didi

linux - "zero copy networking"与 "kernel bypass"?

转载 作者:IT老高 更新时间:2023-10-28 12:37:46 31 4
gpt4 key购买 nike

“零拷贝网络”和“内核绕过”有什么区别?这两个短语的意思是相同的,还是不同的?内核绕过是“零复制网络”中使用的一种技术吗?这就是关系?

最佳答案

What is the difference between "zero-copy networking" and "kernel bypass"? Are they two phrases meaning the same thing, or different? Is kernel bypass a technique used within "zero copy networking" and this is the relationship?

TL;DR - 它们是不同的概念,但内核绕过 API/框架很可能支持零拷贝。


用户绕过

也应该考虑这种通信方式。 DMA-to-DMA 事务可能完全不涉及 CPU。这个想法是使用 splice() 或类似的函数来完全避免 用户空间。注意,使用 splice(),整个数据流不需要绕过用户空间。可以在用户空间中读取 header ,并将数据直接流式传输到磁盘。最常见的缺点是 splice() 不执行校验和卸载。

零拷贝

零拷贝 的概念只是网络缓冲区固定在适当的位置,不会四处移动。在许多情况下,这并不是真正有益的。大多数现代网络硬件支持scatter gather ,也称为缓冲区描述符等。其思想是网络硬件理解物理指针。缓冲区描述符通常包括,

  1. 数据指针
  2. 长度
  3. 下一个缓冲区描述符

好处是网络 header 不需要并排IPTCP存在应用程序 header 可以与应用程序数据物理上分开。

如果 Controller 不支持这一点,则 TCP/IP header 必须位于 用户数据 之前,以便在发送到 网络 Controller

零拷贝还意味着一些内核用户 MMU 设置,以便共享页面。

内核绕过

当然,你可以绕过内核。这就是 pcap和其他嗅探器软件已经做了一段时间了。但是,pcap 不会阻止正常的内核处理;但这个概念类似于内核绕过框架所允许的。即,直接将数据包传递到将发生处理 header 的用户空间。

但是,除非与特定的硬件相关联,否则很难看到 用户空间 会获得明确的胜利。某些网络 Controller 可能在 Controller 中支持分散聚集,而其他可能不支持。

有多种内核接口(interface)的化身来完成内核旁路。困难在于接收到的数据和产生用于传输的数据会发生什么。这通常涉及其他设备,因此有很多解决方案。


把这些放在一起......

Are they two phrases meaning the same thing, or different?

如上希望解释的那样,它们是不同的。

Is kernel bypass a technique used within "zero copy networking" and this is the relationship?

恰恰相反。内核绕过可以使用零拷贝,并且很可能会支持它,因为缓冲区完全在应用程序的控制之下。此外,内核和用户空间之间没有内存共享(这意味着不需要 MMU 共享页面以及可能导致的任何缓存/TLB 影响)。所以如果你使用kernel bypass,支持零拷贝往往是有利的;所以一开始可能看起来是一样的。

如果 scatter-gather DMA 可用(大多数现代 Controller ),用户空间或内核都可以使用它。 零拷贝在这种情况下就没那么有用了。

引用:

关于linux - "zero copy networking"与 "kernel bypass"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343365/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com