0

我在阅读 PACKET_MMAP 内核文档(https://www.kernel.org/doc/Documentation/networking/packet_mmap.txt)时偶然发现了 PF_RING

有人可以解释 PACKET_MMAP 中 PF_RING 和 PACKET_RX_RING/PACKET_TX_RING 之间的实际技术(实现细节和差异)之间的区别吗

4

1 回答 1

0

PF_RING 有两种截然不同的操作模式。

  • 一种叫做“vanilla”的操作“高于”驱动程序级别,因此它应该与 PACKET_MMAP 最相似。它们都只是在用户应用程序和网络堆栈之间共享一个缓冲区。我认为 PF_RING 也会丢弃数据包,所以可以说它是排他的。相反,PACKET_MMAP 让内核堆栈处理复制到用户空间后的数据包。
  • “DNA”或“零拷贝”模式实现内核绕过。驱动程序的缓冲区本身是共享的,而不是将数据复制到共享的环形缓冲区。显然,这需要自定义驱动程序,这意味着没有其他进程能够从受影响的接口接收流量。支持许多普通卡。由于减少了复制和上下文切换和中断(如果您愿意,您可以进行轮询),您可以压缩更多的性能。最接近的上游技术是AF_XDP。

我可能弄错了一些事情(出于好奇,我只是在 Google 上搜索了一下,而且绝不是 PF_RING 方面的专家),所以请注意其他答案。我确实认为我写的大部分内容都是准确的。

于 2020-04-03T04:12:27.537 回答