Possible fix to the Windows 10 NVMe freezing during workloads such as RealBench
Originally Posted by hotstocks
I get those random pauses under load or even sometimes playing youtube videos micro pauses making voice sound like robots. I am on Win 10 Anniversary, so it is not just with Creators.
Also to the Asus employees,
One thing that is real annoying and should be easy to fix is the motherboard RGB lighting when set to temperature is completely useless because it is always red. Even idling at 35C with a water cooler it is red because 35C on an X chip is read as 55C. So either the code needs to take in account the fake +20C or it should be like Corsair Link software where you can change the slider values for green, yellow, and red temperatures. I would like to look into my case window and see red ONLY when the cpu or motherboard is hot and loaded, not when idling. When idling it should be green, minimal load should be yellow, only full loads should be red.
Seeing how this seems to be releated to NVMe SSD's I think I've found the solution but haven't tested it extensively yet. By default windows 10 allows an nvme drive to enter power saving states after just 100 milliseconds. Increasing this value to the maximum allowed that being 60000 (60 seconds) should prevent the nvme drive from pretty much ever entering a power saving state and should fix this. Seeing how windows 7 doesn't have this setting at all and effectively lets the nvme drive stay in it's full powered state at all times (as long as PCIe Link State Power Management is disabled atleast, or maybe the time required to deem the drive "idle" is sufficiently high even with it enabled for the drive to never enter a power saving state) would also explain why this bug doesn't seem to exist in windows 7.
To change the nvme idle timeout value you first need to apply a registry tweak to unhide the setting in advanced power settings. Make sure to export/backup HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings before you change anything!
After you've done this open for the following registry key:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\d639518a-e56d-4345-8af2-b9f32fb26109
From there change Attributes
(Remove = hidden) to 2
(Add = unhidden)
With the creators update there's also a second NVMe timeout value called SEC NVMe Idle Timeout
that doesn't seem to exist in previous windows 10 versions (determined this by looking through powercfg dumps from previous windows 10 versions such as this
). I'm not 100% sure what this does exactly (google yielded nothing, probably because this value didn't exist before) so proceed at your own risk but unlike the previous value that's set to 100ms regardless of whether you're running on battery power or not this one is set to 200ms if you're not running on batter power and 100ms if you are. To unhide this again change attributes value from 1 to 2 for the following registry key:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\6b013a00-f775-4d61-9036-a62f7e7a6a5b
After this you should see the following in advanced power options under Hard disk:
(the reason you see other normally hidden values here is that what I personally did is I exported all power setting registry keys, opened the .reg file in Notepad++ and replaced all "Attributes"=dword:00000001 with "Attributes"=dword:00000002 and after that imported the changes back by running the reg file. You might want to do this too if you're curious to see what other hidden settings there are but if you do naturally don't change anything if you don't know what it does there's a reason many of these settings are hidden after all)
Changing both values to 60000
should prevent the NVMe drive from excessively entering a power saving state. Another thing I noticed and confirmed to be caused by these power saving states is that while the drive is in a power saving state the power on hours SMART value doesn't increment properly which results in a much lower power on hours value being reported than what's true. I'm gonna continue testing this myself but from preliminary testing this seems to do the trick. SSD power saving states have caused many problems in the past I'm sure some of you are aware of so I'm pretty confident this is what's causing the freezing. Seeing how low the power usage of SSD's are in the first place it's pretty stupid that aggressive power saving features like these get defaulted to on in the first place even if using the high performance power plan and not running on battery power.
.reg files to hide/unhide NVMe Idle Timeout
and SEC NVMe Idle Timeout
(only apply the SEC NVMe Idle Timeout if you're on Windows 10 Creators Update!):
NVMeIdleTimeoutRegistryTweaks.zip 2k .zip file
EDIT: Updated .reg files that also remove the 60000 millisecond cap so that the timeout value can be increased all the way up to 1569325055 milliseconds (~18 days), see this post
NVMeIdleTimeoutRegistryTweaksv2.zip 2k .zip file
EDIT2: Sadly this doesn't seem to completely fix the problem.
I'm gonna continue using this tweak myself though till I've determined if this atleast fixes the power on hours reporting problem which it should from what I've found with google. It's also possible that this tweak only applies when you're using the stock windows NVMe driver, I tried that before but saw now difference compared to the samsung nvme driver. I'm gonna try switching back to the stock windows nvme driver next to give this one last try.
EDIT3: Final update for now. There's definitely an improvement with the stock windows nvme driver over the samsung nvme driver (with the NVMe Idle Timeout tweak applied). Also found out that the SEC NVMe Idle Timeout value is probably samsung specific instead of being creators update specific seeing how after switching to the stock driver the NVMe Idle Timeout registry settings got reset (both valuemax and attributes). After unhiding the value again it it was already set to 60000 so the change did persist even with the registry settings reset. SEC NVMe Idle Timeout also got set back to 60000 even though it's registry settings didn't get reset so it's possible values higher than 60000 don't stick even if you uncap the limit. Here are all my current posting relating to these registry tweaks: 1 2 3 4 5 6 7 8Edited by ggdfdgd3 - 4/24/17 at 3:36pm