So here come the results of RME's latest driver 2.95:
Unrelated to the DAW being used, MP support being used or wether RME's driver implementation or Sonar's implementation of MMCSS is used MMCSS gets into troubles with low buffer sizes whenever there is
constant system load, even if that happens at lowest priorities. The higher/more constant the load the higher/more constant the audio-dropouts. That is because of MMCSS behavior to fall back to lowest priorities regulary, which also regulary turns the state of the audio-threads to READY (aka non-working). This shouldn't affect normal working conditions, but the combination of
both RME's and Sonar's MMCSS proves to be fatal (see below)!
1. Ableton Live, MP on, 64 samples, 1 track playing (so MP thread effectively not used) a)
RME MMCSS off, 50+% CPU load by Windows Explorer
I even checked with Prime95 running full load in the background, same picture. As long as no other priority 15 process/thread is colliding with Live's threads (like Process Explorer when set to Highest) there are no dropouts whatsoever.
b)
RME MMCSS on, 50+% CPU load by Windows Explorer
Dramatically different picture, even the slighest load will lead to dropouts and CPU load of RME's ASIO thread rises considerably. Gets even worse when more than 1 audio track is playing so that Live's MP thread starts working concurrently. Like mentioned before two reasons seem to at work here, a) RME ASIO-thread priority being higher than Live's MP threads' priority and b) MMCSS priorisation problems. The 50+ CPU load by Windows Explorer was generated by exploring a bug of Vista's Explorer (wrong type of URL link in Start Menu) and only chosen to demonstrate the problem in a reproduceable and somewhat extreme manner. Anything that produces higher load will produce audible dropouts, even if it's just occassional.
2. Cakewalk Sonar, 64 samples, 1 track playing (so MP thread effectively not used) a)
RME MMCSS off, Sonar MMCSS
on, 50+% CPU load by Windows Explorer
As you can see I was wrong in my former post that Sonar doesn't use MMCSS if MP support is turned off. It
does use MMCSS and it does so by changing the ASIO driver thread's priority. I couldn't see this before, because when MMCSS is turned on in RME's driver then the RME setting supersedes Sonar's when analysed via Process Explorer (see below under b)).
When MP support is turned on in Sonar then a second thread is created that also uses MMCSS with the same Base priority of 1 and Dynamic priority of 24. This runs pretty flawless as long as no constant system load is produced by background tasks (see above).
There seems to be a bug within either Sonar or the RME driver though. After starting Sonar the RME ASIO thread starts with a priority of 15 (MMCSS in RME driver turned off, MMCSS in Sonar turned on), after opening a set it changes to MMCSS priority 24. But after using and closing the Audio settings dialog in Sonar (even when nothing is changed and the dialog is closed by CANCEL) the priority of RME's thread changes back to 15 and Sonar's MMCSS for that thread is turned off, while Sonar's own MP thread keeps using MMCSS (checked back by ears, no more MMCSS related dropouts by RME ASIO thread once that happens). Only restarting Sonar and loading a set will reactivate MMCSS on the RME ASIO thread again.
b)
RME MMCSS on, Sonar MMCSS
on, 50+% CPU load by Windows Explorer
This is the worst case scenario. Obviously Sonar's MMCSS and RME's MMCSS fight each other with RME's MMCSS priorities superseding Sonar's. Even the slighest load will lead to dropouts (like simply turning on Aero or clicking things on the GUI). I take this as a proof that RME's MMCSS implementation should be turned
off by default while but the nice manual switch option of 2.95 could remain. :)
Turning off either Sonar's or RME's MMCSS eases the problems instantly, but using Sonar's MMCSS is still to be prefered. That is because with RME's MMCSS the MP audio threads of Sonar will only use non MMCSS priority 15, which may lead to priority related troubles like with Live.
Conclusion: Like stated before, the DAW should know best how to handle its own threads and priorities. Having a switchable option in RME's drivers is nice, but the default behavior should be to have MMCSS turned off on driver level. My hope is that DAW developers will incorporate MMCSS into their DAWs sooner or later.