为什么在没有 DMA 的情况下使用套接字拼接无法提高性能?
在 维基百科对 splice 的介绍中,我发现:
当对套接字使用 splice() 时,网络控制器 (NIC) 必须 支持DMA。
当网卡不支持 DMA 时,splice() 将不会传送任何数据 性能改进。这样做的原因是每个页面 管道将只填充帧大小(可用 4096 的 1460 字节 每页字节数)。
据我了解,拼接提高了性能,因为:
- 上下文切换较少
- 它最大限度地减少了副本数量(至少两个 DMA 副本)
如果 NIC 不支持 DMA 副本,我们将使用 CPU 副本。这仍然比必须进入用户空间的普通副本要好。
所以,我不明白为什么维基百科说如果 NIC 中没有 DMA 支持,性能就不会提高。
In Wikipedia's introduction to splice, I found:
When using splice() with sockets, the network controller (NIC) must
support DMA.When the NIC does not support DMA then splice() will not deliver any
performance improvement. The reason for this is that each page of the
pipe will just fill up to frame size (1460 bytes of the available 4096
bytes per page).
From what I understand, the splice improves performance because:
- there's less context switching
- it minimizes the number of copies (minimum two DMA copies)
If the NIC does not support DMA copy, we use CPU copy. This is still better than normal copies which have to go to the user space.
So, I don't understand why Wikipedia says there's no performance improvements without DMA support in NIC.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
也许维基百科是错的?那篇文章已经被标记为引用较少......
Maybe wikipedia is wrong? That article is already flagged as being light on citations...