The MSDN page on Direct Cache Access (DCA), which is part of NetDMA, states

The NetDMA interface is not supported in Windows 8 and later.

So I guess both NetDMA and DCA are gone. As both seemed such good ideas performance-wise and were relatively new, my question is:

Does anyone know why MS removed it, or why the removal of that feature would have made sense?

  • The only possible answer to this question, as to the reason its no longer suports, is because Microsoft choose not to support it. As for the specific reason, unless that reason has been published by Microsot, we can't possible know the reason why they choose not to support it. – Ramhound May 26 '15 at 14:00
  • @Ramhound No reason to dismiss/downvote a question because YOU don't happen to know the answer. Someone else might. E.g. some MS engineer might have blogged about it somewhere. It's just neither I nor you have come across it. Yet? Features are rarely removed outright (rather than deprecated), and you'd think there's a good reason for it. – Eugene Beresovsky May 26 '15 at 14:27
  • 1
    "Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise." - Asking why something was removed from Windows is seeking an opionion. Downvoting is annoymous. You can't possible know who downvoted your question. – Ramhound May 26 '15 at 14:35
  • @Ramhound Nice in theory, as it turns out: The exact reason by the MS person responsible has been found by Greg Bray, giving the only answer. That's what I wanted, albeit, admittedly, more than I expected. – Eugene Beresovsky May 28 '15 at 22:29

According to this forum post NetDMA was removed from Window 8 and Server 2012 / 2012 R2 due to not really reducing CPU usage:

Jeffrey Tippet [MSFT]

> Any clue why was this feature not supported Win 8 on wards?

I removed NetDMA in Windows 8. Hopefully, I have slightly more than a clue :)

The purpose of NetDMA was to reduce CPU usage by offloading memcpy to a generic offload engine.

But in networking, we tend to handle fairly small buffers. A typical network buffer tends to not be larger than 1500 bytes. (Yes we can do LSOs of many kilobytes, but NetDMA was limited to only 2 pages of memory per transaction, so at most NetDMA should be compared to an 8kb buffer.)

Which uses less CPU:

  1. Setting up a DMA offload to the hardware & continuing when the hardware interrupts its completion
  2. memcpy 1500 bytes on the CPU

With newer CPUs, the answer tends to be #2.

Since the whole purpose of NetDMA was to reduce CPU usage, and it wasn't even providing a clear CPU reduction, that makes NetDMA a dubious benefit. Add to that it had low adoption (not many vendors implemented a NetDMA provider), and the value of keeping the feature wasn't there. Its competitor, memcpy, is simpler, better-supported, easier to debug, and is sometimes even faster.


| improve this answer | |
  • Awesome, Greg. I didn't expect this authoritative an answer. And DCA - the copying of the data directly into the cache of a specific core - being impossible without (something like) NetDMA, went away with it. – Eugene Beresovsky May 28 '15 at 22:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.