Windows Timer Resolutions – Why Disabling The High Precision Event Timer Makes Sense
The HPET (High Precision Event Timer) is a timer that is used in most PCs and in some cases, it increases performance since it is a very precise timer. However, what was noted by many gamers trying to optimize their systems is that HPET can also cause FPS loss, freezes in games, and higher latency overall.
Why is this issue occurring and what should you do with HPET and your Windows timer resolution for better FPS stability and higher precision at the same time?
Why Disable HPET?
While HPET is an extremely precise timer (14.32MHz) which in theory would mean that it would perform the best, in practice when tuning your system for gaming it seems that HPET is too precise bogging down your machine.
Gaming seems to benefit from comparatively less precise but more stable and consistent timers and ticks (TSC 3.32MHz) that have a beneficial impact on your percentiles and low FPS. In short, the level of precision HPET offers is not needed when gaming and will result in worse performance overall.
How to Disable HPET?
To get rid of HPET you need to open CMD with administrator privileges and type – bcdedit /deletevalue useplatformclock and then restart your machine. This will disable HPET on your machine, and to test that the changes took effect you can either use the bcdedit/enum command (no value for useplatformclock) or use TimerBench (pictured above) which gives you a more beginner-friendly interface.
As explained in this clarification post you do not need to disable HPET in the BIOS or Device Manager because those changes either do nothing or cause issues by enabling outdated system timers.
Once off, your system will use a TSC clock and you will need to then select between running RTC or TSC ticks, TSC sync policy, etc.
Most custom Windows 10/11 builds already have HPET off so if you get an error message after putting in the command it simply means that HPET was already disabled.
Choosing Between TSC & RTC Ticks
Your system clock has already been put in place (TSC) which means the next important component is to figure out the system tick. You can find more information about the system ticks in the clarification post but the short answer is that you will need to test both ticks (TSC+RTC vs TSC+TSC) to see which one runs better on your system.
RTC is an outdated tick that is not dynamic and has no optimizations which might decrease your system performance and conflict with high polling rate mice. RTC is recommended for unoptimized systems or people who just want the process to be as short as possible without further testing.
Most tuned systems should run TSC+TSC since it is a higher precision timer resolution compared to RTC which was intended for legacy applications (still lower precision than HPET clock).
How to Disable Dynamic Tick
Dynamic tick is a power-saving feature enabled on laptops that helps them preserve battery life. If you are aiming for the best possible performance and inputs such a feature being enabled is counterproductive.
To disable dynamic tick open CMD with administrator privileges and use the command – bcdedit /set disabledynamictick yes. Restart your machine afterward and you should be set (check with bcdedit /enum).
Adjusting Your Windows Timer Resolution
To take full advantage of the bcdedits you have done you need to manually adjust your system’s timer resolution. To do so you can use a simple utility like Memory Cleaner set to your desired timer resolution.
The reason you would do this is because Windows by default runs 15ms on idle and 1ms when you need higher precision for timer resolution values. You can achieve higher precision by using a manual micro-adjusted timer resolution as explained here and test the values using the MeasureSleep utility.
Values used: 5070 – 10000 – 5000
Your Windows timer resolution will behave differently depending on what tick you have chosen to use (RTC/TSC) therefore the values you will settle on will be different. If your system is set up correctly you should be able to achieve 1ms sleep delays with low deltas.
Thanks for your review, so far some cmds worked a bit for me on Win 11, though I can not still get rid of my Kernel core associated with Nvidia drivers processes latency… It goes into 11,5 ms at minimum (using latencymon) in kernel timer latency (I do not know what kind of impact it has on my high end PC), while DPC latency shows a constant 1.06 Ms latency thanks to your cmds that stabilized it, even though before I had nano spikes at few nanoseconds, I’d rather think that better have a constant DPC latency, than spikes down… Read more »
Yes, constant latency is better because it means your inputs will feel similar. Spikes, even if they have lower latency, might lead to inconsistent inputs.
I have an rtx 4080, my fix was to go into NVidia control panel and choose ‘prefer maximum performance.’ that corrected most of the issues I was having with regards to latency
What you were experiencing was most likely a driver with hidh DPC latency at idle so making the card always work fixed your issue.
Are you sure we need to disable the UseplatformTick Yes for new system intel 10th/11/12?For windows 11 21H1 and Windows 10 newest build?
Hello, you would want to use the “bcdedit /set useplatformtick yes” command to disable synthetic timers in your Windows. As explained in the article you do this to get a “clean” number without the extra digits at the end which can mess up your inputs. The command therefore is not to disable it, but to use it. To check that you have done everything correctly you should be able to set your resolution timer to 1 ms and also in TimerBench 1.5 you should see that you are using the TSC timer (hardware timer instead of the software HPET timer).
For me, on the Intel 12th, it’s already 15.625 and 10ms and 1ms. so I don’t need to add the command?
In that case technically you do not need to do it, but I would use it just in case because I would be paranoid about it 🙂
Hello, can’t the commands used affect the stability of the system?
I have heard that in the new versions of windows the commands are not needed anymore
sorry for my english
Hello, the stability of the system is not impacted at all since you are simply changing a software timer for a hardware one. At the same time certain applications might not play nice if you do use a timer resolution that is lower than 1 ms, but i have yet to meet a case where this was a big issue.
You will also want to use these commands in newer versions of Windows as well because they are getting incrementally worse than the older builds (1709>1809>21H2, etc in terms of latency).
This is complete snakeoil.
An HPET is a high-resolution timer that’s used to compute how many frames per second you are getting. By turning it off, your computer uses a less accurate source for measuring time.
In short, disabling it does nothing to improve performance, it just makes your FPS data less accurate. Don’t bother with this crap.
I am not sure how exactly you arrived at your conclusion but I can prove with numbers that HPET not only increases latency but also leads to less stable FPS in games. You can simply download TimerBench, run a test on HPET and then run a test with it disabled (TSC timer) and you can see the differences. I have done this test on multiple setups and disabling HPET has ALWAYS led to better performance no matter the platform used. This is also a well known fact in the PC tweaking community so all custom Windows ISOs come with HPET… Read more »
I don’t think Intelguy is wrong. It’s a higher resolution timer so it sees more of what’s going on hence the use of the word High Precision Event Timer. The difference is the effective output between the two (HPET on vs HPET off) What you describe as being lower input lag is the effective input to output flow. And it’s true, it HPET off does give the feel of lower input lag because the observed precision/resolution of data in the flow is not as fine-grained as when HPET is on. Thus graphs look stable from the capture. Being termed “snakeoil”… Read more »
From my own research and testing the best way to use HPET is to keep it as a backup clock so your TSC timer (invariant) can sync and prevent desynchronization. I talked a bit more about platform clocks and tick combos in this newer article, but from the information available online TSC runs at an average 3MHz, while Hpet runs at 22MHz (as you have said it is a higher resolution timer). This results in unnecessary load for the PC when such precision is not needed and will in turn slow down the performance of your PC. Gaming is not… Read more »
OMG you INSANEEEE¡¡¡¡¡¡¡ my polling rate just get so much smooth, my aim to much better, i was on 800 – 1200 mouse hz, my aim was very inconsistent, now im on 950 1050 hz I LOVE YOU
Very useful instructive article!
I noticed some improvements but in some cases performance dropped a bit. It seems to affect mainly vulkan apps in combination with reshade negatively some times.
One question, if I want to revert all settings do I just type a NO instead of YES in the cmd lines?
Yeah, depending on the command you can revert it to the original option by using the opposite yes/no command. Usually using TSC + RTC (bcdedit /deletevalue useplatformclock – bcdedit /set useplatformtick Yes) results in the best performance. You can also try using HPET + RTC (bcdedit /set useplatformclock Yes – bcdedit /set useplatformtick Yes – make sure HPET is enabled in BIOS) or TSC + TSC (without desync: bcdedit /deletevalue useplatformclock – bcdedit /deletevalue useplatformtick – make sure HPET is enabled in BIOS). Your results will vary depending on the game engine and overall system optimizations.
Ah thats great! Thnx for the quick reply and guide! Much appreciated. <3
Hi Chris.
My MouseTester result is kinda strange. It is not consistent as yours.
I am already using Invariant TSC.
I am using Logitech G502 Hero at 1600DPI (1000Hz).
Could you please give me some advice based on the attached image?
There are many steps you can take to achieve a stable polling rate: make sure the mouse is plugged in directly to the motherboard, turn off all power savings in your BIOS (C-states, any sort of downclocking mechanisms, etc), run a no-idle power plan, try different combinations of clock+tick with bcdedit commands, etc. Usually if you have good hardware and no power savings in your BIOS you are 90% done with having a stable graph.
By default ‘useplatformclock’ is not defined on bcdedit, so the deletevalue command merely resets it to default, it wont disable HPET, but rather not use HPET by default whilst letting apps use it on demand (such as hwinfo). Setting ‘useplatformclock’ to ‘no’ however will disable HPET so not used even when requested. Because of this I can see why people have said its snakeoil, as you have merely been resetting it to default and then saying it has better performance. If useplatformclock is populated, then it means something either the user or an app has actually put it there, then… Read more »
Hi Chris! My sleep latency is high, around 15ms, delta 14ms. Where can be the problem? Bios settings? bcdedit/enum same like yours. MemoryCleaner doesn’t want to start with my Win 11 so I have to use ISLC (set on 0.51ms).
Hello, BIOS settings can affect the timer – c-states or other energy saving options. I would assume if you run the same bcdedit commands you should get close to my results. I have tested 2 W11 custom installs and on both I could get 1ms sleep which tells me it is possible on W11. I would suggest resetting your BCD commands/checking your BIOS settings and trying to set them again one by one.
I’ve scoured my BIOS for all the things to disable and tweak. I actually get some weird activity where my sleep drops from 15ms to 6ms for a few dozen lines in Measuresleep
I fixed this, now I have 0.0200ms delta, befor around 14.00 ms. I had to add this:
Why would i be getting 15ms on sleep? My Resolution is set to .500 and HPET is off using TSC+TSC
This is most likely due to the fact that you are using a newer Win 10 build which applies a different implementation of the timer res (https://github.com/amitxv/PC-Tuning/blob/main/docs/research.md#fixing-timing-precision-in-windows-after-the-great-rule-change). You would need to either use an older Win 10 build or a newer Win 11 custom ISO which fixes these issues. I tested W11 XOS and FoxOS and both are very good. If you are already on an older Win10 or Win11 then something must be wrong with your bcd edits or BIOS settings.
Not working on Win10 22H2 + X670. No matter what I do, it doesn’t go below 15.5 ms (delta 14.55). What should I do?
Newer Win 10 versions changed the way timer res is applied (https://github.com/amitxv/PC-Tuning/blob/main/docs/research.md#fixing-timing-precision-in-windows-after-the-great-rule-change). Basically if you want a good timer res you either use older Win 10 versions or swap to Windows 11 which also fixed the timers. Custom Windows 11 ISOs with the new input stack are actually very good and are very close to old Win 10 ISOs (XOS-FoxOS are the custom W11 versions I tested and both worked very well).
Hi mate, where can I dload (or guide) to test W11 XOS?
You can just join the XOS discord and download the ISO from there. https://discord.gg/6q6vcVrZ
I don’t know what I’m doing wrong here. I have followed your steps however my “slept” timer does not fall below 15-16ms. I have disabled HPET, my QRC type in TimerBench says Invariant TSC, disabled all power savings, tried setting my resolution timer to 0.5 and 0.507 but my slept timer does not budge at all.
Any tips with what I might be possibly doing wrong over here?
My build is a Ryzen 5800x3d, x570 Aorus Master
Hello, this most likely has to do with the Windows version you are running (the great rule change https://github.com/amitxv/PC-Tuning/blob/main/docs/research.md#fixing-timing-precision-in-windows-after-the-great-rule-change). New Win 10 builds suffer from this issue and you can try the fix referenced in the link. There is no issue with older Win 10 builds (1709/1803/1809) and newest Win 11 builds.
Hello, thx for review!
– and have you checked whether it is possible to set equal 2 ms, 6 ms on a personal computer (Windows 22H2). how to make it?
– maybe these values are better for the mouse sensitivity in game, because frequent requests only load processor threads
You can set the the precision of the timer to be lower (increase value) and you will have higher sleep cycle ms. This however would not help your game/inputs since it just means the intervals between inputs will take longer since the CPU sleeps for more time.