我想知道为什么linux内核(或任何其他主流操作系统)没有零拷贝网络功能的原因?我所说的零复制是指,数据包/数据流不会被复制以传递到用户空间中的应用程序,但例如使用内存池类型的分配器在内核和用户空间之间共享内存。我自己提出了3个理论:
a)我想存在安全问题。但是,当用户空间和内核仅用作缓冲区时,真的没有办法在用户空间和内核之间安全地共享内存吗?
b) 我猜想存在稳定性问题。但是我们不能假设无论谁使用零拷贝网络和例如需要实例化并传递内存池以供内核调用了解内存管理吗?是否有足够的意识来避免泄漏?
c) 到目前为止还没有完成/不需要。我真的无法想象没有人请求此功能,因为每个使用小数据包的人通常都会受到“缓慢”的 TCP 堆栈实现的瓶颈,并且有 3rd 方工具提供用于 0 副本网络,以供特殊使用网卡。
请随意发表任何猜测,但请标记您是否假设或对保持 StackOverflow 质量的原因有更深入的了解:-)
如今,零拷贝网络有几种选择:
-
PF_RING ZC(零复制).
-
Linux 原生零拷贝 TCP.
-
英特尔数据平面开发套件.
-
打开加载对于专有硬件。
请注意,TCP 的零复制可能不方便,因为 TCP 段携带标头和有效负载,但应用程序只关心有效负载,因此必须将有效负载而不是标头复制到应用程序的连续缓冲区中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)