Evg*_*sky 0 networking performance windows-server-2012 windows-8
关于直接缓存访问 (DCA)的 MSDN 页面(它是 NetDMA 的一部分)指出
Windows 8 及更高版本不支持 NetDMA 接口。
所以我猜 NetDMA 和 DCA 都消失了。由于这两个想法在性能方面似乎都是很好的想法并且相对较新,所以我的问题是:
有谁知道为什么微软删除了它,或者为什么删除该功能是有意义的?
根据此论坛帖子,NetDMA 已从 Window 8 和 Server 2012 / 2012 R2 中删除,因为它并未真正减少 CPU 使用率:
\n\n\n\n杰弗里·蒂皮特 [MSFT]
\n\n
\n xxxxxx@microsoft.com
\n\n> 知道为什么 Win 8 病房不支持此功能吗?
\n\n我在 Windows 8 中删除了 NetDMA。希望我有更多的线索:)
\n\nNetDMA 的目的是通过将 memcpy 卸载到通用卸载引擎来减少 CPU 使用率。
\n\n但在网络中,我们倾向于处理相当小的缓冲区。典型的网络缓冲区往往不大于 1500 字节。(是的,我们可以执行数千字节的 LSO,但 NetDMA 仅限于每个事务 2 页内存,因此 NetDMA 最多应与 8kb 缓冲区进行比较。)
\n\n哪个使用更少的CPU:
\n\n\n
\n\n- 设置到硬件的 DMA 卸载并在硬件中断其完成时继续
\n- CPU 上的 memcpy 1500 字节
\n对于较新的 CPU,答案往往是#2。
\n\n由于 NetDMA 的全部目的是减少 CPU 使用率,而它甚至没有提供明显的 CPU 减少,这使得 NetDMA 的好处令人怀疑。此外,它的采用率较低(没有多少供应商实现了 NetDMA 提供程序),并且保留该功能的价值并不存在。它的竞争对手 memcpy 更简单、支持更好、更容易调试,有时甚至更快。
\n\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xe2\x8b\xae
\n