It's been a while since I've seen DPC spikes reaching 100% of a CPU core - that's huge (usually ~10% is enough for noticeable issues):
These DPC spikes are caused by netr28x.sys
driver (used by your WiFi adapter) and, to be more specific, by MlmeDynamicTxRateSwitching
function inside it:
Looking into some Linux sources (which does not necessary mean it is the same for Windows) for this driver, we can find what this function does:
This routine calculates the acumulated TxPER of eaxh TxRate. And
according to the calculation result, change CommonCfg.TxRate which
is the stable TX Rate we expect the Radio situation could sustained.
IRQL = DISPATCH_LEVEL
We can also see under which conditions it is called (once again, it's not necessary true for Windows):
// execute every 500ms
if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd)/*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))*/)
// perform dynamic tx rate switching based on past TX history
if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
&& (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)))
#endif // CONFIG_STA_SUPPORT //
So, for MlmeDynamicTxRateSwitching()
function to be called (hence, the DPC spike in your case to occur), the following conditions must be met:
- 500ms interval must pass (pAd->Mlme.PeriodicRound % 5 == 0)
- AutoRate switch must be enabled (RTMPAutoRateSwitchCheck(pAd))
- Device must support STA mode (CONFIG_STA_SUPPORT)
- Device must be operating in STA mode (IF_DEV_CONFIG_OPMODE_ON_STA(pAd))
- Device must be connected (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- Debugging must disabled (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
As your WiFi is operating as a station (STA) mode (you are using it to connect to WiFi access point), that satisfies #3 and #4 requirements. Also, as you are connected, you satisfy #5 as well. #1 and #6 is nothing that depends on us, leaving #2 as the only interesting requirement. So, in short, that means that causing RTMPAutoRateSwitchCheck()
function to return FALSE, by disabling Auto Rate Switch, would stop the driver from calling MlmeDynamicTxRateSwitching()
, resolving the DPC latency issues you have as well.
Following the information above as well as some general tips, please try the following (in the order):
- Look for updated drivers for your wireless adapter.
- Open your Wireless Device properties in Devices Manager and check for any Advanced settings having Auto values. Try setting them to a static value, depending on your network configuration, where possible.
- Open your router configuration page and check WiFi settings for Auto values. Try setting them to a static value, depending on your network configuration, where possible.
- Get a new USB Wireless adapter (they are pretty cheap these days).