Further Clarification on Timer Resolutions and HPET Settings
As explained in this previous article HPET or the High Precision Event Timer is a suboptimal setting if you are trying to get the best FPS stability and the lowest latency/most stable polling rate. While disabling it and just using the CPU TSC timer is a great start for most there are a couple of nuances you need to understand about your system clock and tick combinations to get the best possible outcome.
Contents
Do You Need to Disable HPET in BIOS?
No, disabling HPET in BIOS (for the motherboards that still give you this option) is not a good idea. This is because, with HPET in BIOS disabled, you will effectively run PMT which is a deprecated timer. If you disable HPET in BIOS and through CMD commands force TSC without HPET (PMT), it can lead to desync, clock skews, inconsistent polling rate, and weird FPS values.
Do You Need to Disable HPET in the Device Manager?
In most cases, the HPET device shown on your device manager doesn’t actually do much, and instead, you should focus on the two things mentioned above. Keep HPET ON in your BIOS and disable it in your Windows through CMD commands.
For ease of mind, you can also disable HPET in the Device Manager tab.
What Does ”Useplatformtick” Do?
Using the platform tick command will force your system to use RTC (real-time clock) which is an older tick. This is the usual combo that people go for when trying to stabilize their systems and polling rate for 4K-8K Hz mice (bcdedit /deletevalue useplatformclock & bcdedit /set useplatformtick Yes).
This results in your system using the TSC clock plus the RTC timer which is optimal for un-tweaked systems.
What Are Some Recommended Combinations of System Clocks and Ticks?
If you have a modern system with a tweaked BIOS and tweaked/custom Windows install it is recommended you try running TSC clock + TSC tick without desync: bcdedit /deletevalue useplatformclock – bcdedit /deletevalue useplatformtick – make sure HPET is enabled in BIOS.
For those who have a more basic system setup using the TSC clock + RTC tick is recommended: bcdedit /deletevalue useplatformclock – bcdedit /set useplatformtick Yes. This should result in better inputs in games and a more stable polling rate for your mice.
Additional BCD Commands
Besides testing and figuring out which system clock and tick runs the best on your system you should also disable dynamic tick since it is a power saving feature designed for laptops. You can do so by using the bcdedit /set disabledynamictick yes command. If you want to use RTC for system tick you can delete the value altogether (bcdedit /deletevalue disabledynamictick) since RTC is not a dynamic tick counter.
The last thing left to do is for you to test which TSC sync policy will work better on your system: bcdedit /set tscsyncpolicy Enhanced or Legacy. Test with both Enhanced and with Legacy and do different polling rate tests and FPS tests to see if you get better values with one of them, or if there are any changes at all..
How to Check What Settings Are Applied?
In the end, you can use bcdedit /enum to see what your BCD commands look like.
In my case, you can tell by looking at my CMD window that I am running TSC+TSC (HPET on in BIOS) and Legacy tscsyncpolicy which seems to work the best for my HSK Pro 4K Hz mouse.
You can tell because there is no value for useplatformclock (bcdedit /deletevalue useplatformclock – disabled HPET and forced TSC) and there is no value shown for useplatformtick which means it has also been deleted (bcdedit /deletevalue useplatformtick). If I was using RTC tick the bcdedit /enum command would have shown: useplatformtick Yes.
The one thing that is shown clearly is that I am using Legacy tscsyncpolicy denoted by the “tscsyncpolicy” set to Legacy. All of these BCD commands are particular to your system so you should test all the possible combinations and figure out which one works the best.
So, I got everything but one little detail. Why on the first post you suggest to disable dynamicticks as they’re a power saving feature, but on this post you suggest to enable them in order to run TSC without desync? Is there an interaction I’m missing between these two or just an odd typo?
Windows actually had 3 values for these bcd commands. You can enable/disable or you can delete the value which is a third option altogether. I have tested the disabled command and the delete command for dynamic ticks and have seen no difference in polling graphs or performance. In short you can either disable or delete the dynamic tick command and test which one works better for you. If you plan on using RTC tick you can 100% just delete the value since its not a dynamic tick. Updated the paragraph a bit to reflect this info. Thank!
Got it now, thanks! That was bugging me as I wasn’t sure what was the optimal combination. Currently running TSC+TSC+Enhanced with dynamic ticks disabled and games feel super responsive. I thought TSC+TSC+Enhanced would impact performance negatively with low fps and stutters but it wasn’t the case even in a rather low end PC. Once again, thanks for the clarification.
Have you found tscsyncpolicy Enhanced or Legacy to be better for first person shooters?
I have tested both but I am currently using the deleted value for the TSC sync policy. The differences were very, very small in my graphs and you should test all 3 options (legacy, enhanced, and deleted since it works as a third value) and see what works best for you.
So you literally used “Deleted” as the value (bcdedit /set tscsyncpolicy deleted)? Or do you mean bcdedit /deletevalue tscsyncpolicy
bcdedit /deletevalue useplatformclock
bcdedit /deletevalue useplatformtick
bcdedit /deletevalue disabledynamictick
bcdedit /deletevalue tscsyncpolicy
These are the bcd commands I run on any install before I do anything. Then I test variations to see which one runs better.
I was able to set useplatformtick to yes but I cant seem to get TSC + TSC. I will check to see if hpet is on in bios but it did seem to be on in device manager.
Hi, i have so many problem, im using ggos build 20h2 and i did everything you said but when i use 5000 value in memory cleaner the current time shows 0.496ms and according to this photo there is no consistency, what is the problem? btw i have disabled hpet and rtc
20H2 is a new win 10 build so the timer resolution is applied differently. Older win 10 builds or new win 11 builds do not have this issue. You can try fixing your build by looking at the great rule change in the GitHub (https://github.com/amitxv/PC-Tuning/blob/main/docs/research.md#fixing-timing-precision-in-windows-after-the-great-rule-change)
Might be a dumb question, i did the cmd commands and tried to test ticks with MeasureSleep i get consistent .04996 but slept goes to 15ms, is there anything i can do to make it lower? Thanks for the guide!
Hey, I dont understand why my tscsyncpolicy doesnt want to show in /enum. cmd prompt seems to be taking the command to change it per your command, but I can never see it for some reason. Is there anything you have to enable first to edit that value?
Edit: Nvm, you just have to set the bootmenupolicy to Legacy first. Figured it out.
For WIN10, turn off HPET, use ISIC, and then simply open the DPC Latency Checker.