我想知道为什么linux内核(或任何其他主流操作系统)没有零拷贝网络功能的原因?零拷贝我的意思是,没有复制数据包/数据流以传递给用户空间中的应用程序,例如使用内存池类型的分配器来共享内核和用户空间之间的内存。我自己想出了3个理论:
a)我猜有安全问题。但当它们仅用作缓冲区时,是否真的没有办法让用户空间和内核之间共享内存?
b)我猜有稳定性问题。但我们不能假设谁使用零拷贝网络,例如需要instanciate并传递内存池为内核调用是否知道内存管理?要注意避免泄漏吗?
c)到目前为止还没有完成/需要。我无法想象没有人要求这个功能,因为每个使用小数据包大小的人通常会受到“慢速”TCP堆栈实施的瓶颈,并且有第三方工具提供用于0-copy网络以供特殊使用网卡。
随意发布任何猜测,但请注明您是否正在假设或更深入了解保持StackOverflow质量的原因: - )
答案 0 :(得分:5)
有第三方zero-copy networking for Linux,但它不是标准功能。
注意,使用TCP进行零拷贝可能不方便,因为TCP段承载头和有效负载,但应用程序仅涉及有效负载,因此必须将有效负载而不是头部复制到应用程序的连续缓冲区中。 p>