11

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

a) 我想存在安全问题。但是,当它们仅用作缓冲区时,真的没有办法在用户空间和内核之间安全地共享内存吗?

b)我想存在稳定性问题。但是我们不能假设任何使用零拷贝网络并且需要实例化和传递内核调用的内存池的人都知道内存管理吗?足够了解以避免泄漏?

c)到目前为止还没有完成/不需要。我真的无法想象没有人要求这个功能,因为每个使用小数据包大小的人通常都会受到“慢” TCP 堆栈实现的瓶颈,并且有 3rd 方工具提供用于 0-copy 网络的特殊用途网卡。

随意发布任何猜测,但请标记您是否假设或更深入地了解保持 StackOverflow 质量的原因:-)

4

1 回答 1

8

如今,零拷贝网络有几种选择:

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

于 2014-03-03T15:04:21.220 回答