NetDMA(和直接缓存访问?)已从 Windows 8 / Server 2012 中删除。为什么?

Evg*_*sky 0 networking performance windows-server-2012 windows-8

关于直接缓存访问 (DCA)的 MSDN 页面(它是 NetDMA 的一部分)指出

Windows 8 及更高版本不支持 NetDMA 接口。

所以我猜 NetDMA 和 DCA 都消失了。由于这两个想法在性能方面似乎都是很好的想法并且相对较新,所以我的问题是:

有谁知道为什么微软删除了它,或者为什么删除该功能是有意义的?

Gre*_*ray 6

根据此论坛帖子,NetDMA 已从 Window 8 和 Server 2012 / 2012 R2 中删除,因为它并未真正减少 CPU 使用率:

\n\n
\n

杰弗里·蒂皮特 [MSFT]
\n xxxxxx@microsoft.com

\n\n
\n\n

> 知道为什么 Win 8 病房不支持此功能吗?

\n\n

我在 Windows 8 中删除了 NetDMA。希望我有更多的线索:)

\n\n

NetDMA 的目的是通过将 memcpy 卸载到通用卸载引擎来减少 CPU 使用率。

\n\n

但在网络中,我们倾向于处理相当小的缓冲区。典型的网络缓冲区往往不大于 1500 字节。(是的,我们可以执行数千字节的 LSO,但 NetDMA 仅限于每个事务 2 页内存,因此 NetDMA 最多应与 8kb 缓冲区进行比较。)

\n\n

哪个使用更少的CPU:

\n\n
    \n
  1. 设置到硬件的 DMA 卸载并在硬件中断其完成时继续
  2. \n
  3. CPU 上的 memcpy 1500 字节
  4. \n
\n\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
\n