使用和不使用ScatterGather *** 作进行零拷贝

使用和不使用ScatterGather *** 作进行零拷贝,第1张

概述我刚读了一个解释零复制机制的article.它讨论了有和没有Scatter / Gather支持的零拷贝之间的区别.网卡没有SG支持,数据副本如下NIC支持SG,数据副本如下总之,使用SG支持的零拷贝可以消除一个CPU拷贝.我的问题是为什么内核缓冲区中的数据可能会分散?最佳答案因为默认情况下Linux内核的映射/内存分配工具会创建几乎连续但可能是物理上不相交

我刚读了一个解释零复制机制的article.

它讨论了有和没有Scatter / Gather支持的零拷贝之间的区别.

网卡没有SG支持,数据副本如下

NIC支持SG,数据副本如下

总之,使用SG支持的零拷贝可以消除一个cpu拷贝.

我的问题是为什么内核缓冲区中的数据可能会分散?

最佳答案因为默认情况下linux内核的映射/内存分配工具会创建几乎连续但可能是物理上不相交的内存区域.
这意味着从文件系统中读取sendfile()在内部进入内核虚拟内存中的缓冲区,DMA代码必须将“transmogrify”(缺少更好的词)转换为网卡的DMA引擎可以查看的内容.

由于DMA(通常但并非总是)使用物理地址,这意味着您要么复制数据缓冲区(进入一个特殊分配的物理上连续的内存区域,上面的套接字缓冲区),要么将其传输到一个物理页面-a时间.

另一方面,如果您的DMA引擎能够将多个物理上不相交的内存区域聚合成单个数据传输(称为“分散 – 聚集”),那么您可以简单地传递一个物理地址列表,而不是复制缓冲区. (指向内核缓冲区的物理上连续的子段,这是上面的聚合描述符),您不再需要为每个物理页面启动单独的DMA传输.这通常更快,但是否可以完成取决于DMA引擎的功能.

总结

以上是内存溢出为你收集整理的使用和不使用Scatter / Gather *** 作进行零拷贝全部内容,希望文章能够帮你解决使用和不使用Scatter / Gather *** 作进行零拷贝所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存