Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

6年前关闭。



Improve this question




我想知道为什么Linux内核(或任何其他主流OS)没有零拷贝网络功能的原因?零拷贝是指数据包/数据流不会被复制以传递给用户空间中的应用程序,例如使用内存池类型的分配器在内核空间和用户空间之间共享内存。我自己提出了3个理论:

a)我猜这里有安全隐患。但是,当仅将它们用作缓冲区时,真的没有办法使用户空间和内核之间安全地共享内存吗?

b)我认为存在稳定性问题。但是我们不能假设谁使用零拷贝网络和需要实例化并通过一个内存池,以便内核调用知道内存管理吗?知道足以避免泄漏吗?

c)到目前为止尚未完成/不需要。我真的无法想象没有人要求此功能,因为每个使用小数据包的人通常都会受到“慢速” TCP堆栈实现的瓶颈,并且那里提供了第三方工具可用于0副本网络,可与特殊功能一起使用网卡。

随意发表任何猜测,但请注明您是在假设还是对保持StackOverflow-quality的原因有更深入的了解:-)

最佳答案

如今,零复制网络有一些选择:

  • PF_RING ZC (Zero Copy)
  • Linux native zero-copy TCP
  • Intel Data Plane Development Kit
  • 专有硬件的OpenOnload

  • 请注意,使用TCP进行零复制可能很不方便,因为TCP段带有 header 和有效负载,但是应用程序仅与有效负载有关,因此必须将有效负载而非 header 复制到应用程序的连续缓冲区中。

    07-24 09:45
    查看更多