为什么在Linux内核中没有零拷贝联网?

我想知道为什么Linux内核(或任何其他主stream操作系统)没有零拷贝networkingfunction的原因? 通过零拷贝我的意思是说,一个数据包/数据stream不会被复制传递给用户空间中的应用程序,但是例如使用内存池types的分配器来共享内核和用户空间之间的内存。 我自己提出了三个理论:

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

b)我想有稳定的顾虑。 但是,我们不能假设谁使用零拷贝networking,例如需要实例化并传递一个用于内核调用的内存池,是否知道内存pipe理? 意识到足以避免泄漏?

c)目前为止还没有完成/需要。 我无法真正想象没有人要求这个function,因为每个使用小包的人通常都会受到“慢”TCP协议栈实施的阻碍,并且有第三方工具提供了0复制networking以供特殊用途使用网卡。

随意张贴任何猜测,但请标记你是否承担或有更深层次的理由保持StackOverflow质量:-)

Solutions Collecting From Web of "为什么在Linux内核中没有零拷贝联网?"

Linux有第三方零拷贝网络 ,但这不是一个标准功能。

请注意,使用TCP进行零复制可能不方便,因为TCP段承载标头和有效载荷,但应用程序只涉及有效载荷,所以有效载荷而不是标头必须复制到您的应用程序的连续缓冲区中。