Disabling SMT or Hyper-Threading for Better Latency
When it comes to game performance it is important to understand that although of great significance FPS is not the only measure you should be looking at. Another measurement that is as important as FPS (in my subjective opinion) is latency or how fast your PC executes inputs from your peripherals.
Better latency in simple terms translates to better inputs and a closer 1-to-1reaction of your in-game character to your real-time movement. We have already discussed ways in which you can decrease latency (custom Windows ISO, CMD commands, power plans, etc) and today I have tested another method through which you can shave off some milliseconds.
What Is SMT or Hyper-Threading
SMT (AMD) and Hyper-Threading (Intel) are technologies that allow more than one thread to run on each core allowing CPUs to be more efficient during their workloads. This is why most modern CPUs are described with a number of cores and threads (ex: my 5600X has 6 cores and 12 threads).
An unfortunate byproduct of these technologies is that in some cases a task is split between cores on different threads adding latency to whatever you are doing on your PC. This is a big drawback in competitive gaming where you want your inputs to translate as quickly as possible to in-game actions.
This is an overly simplified version of what these technologies do, but for the purpose of this article it is enough to understand a simple equation: SMT/Hyper-Threading ON = possibly better FPS and performance – while – SMT/Hyper-Threading OFF = better latency in games. In essence, I was curious how big would the difference in FPS be for gaming and how measurable would the difference in latency be if I would turn off SMT (since I have an AMD system) on my PC.
The way I tested latency with SMT on and off was LatencyMon since this is a very popular tool exactly for this task. I ran the benchmark 3 times for both SMT on and off and restarted each time to make sure the system is fresh.
I have also made sure to have no background applications running to have the closest possible result to a perfect scenario.
For the game testing, I have decided to use Apex Legends since this game is known for being a multi-threaded hog, allowing me to see how the game will behave if suddenly the extra threads are gone and it can only run with 1 thread per 1 core.
The test itself was a repetition of tasks in the training range since it is a controlled environment. Since this was not a proper benchmark the results are not 100% accurate but considering the results I have recorded and that the actions were repeated with consistency I am about 95% sure of the repeatability of the final results.
All of this was carried out on my PC which is running a PBO2 + Curve Optimizer overclock on my 5600X and my RTX 2070 which is overclocked and also is de-shrouded. I am also running a custom Windows install called KernelOS (1809) so my system is already tweaked out pretty hard.
The first thing I tested with SMT was LatencyMon where the results after 3 measurements were between 2.75us and 2.8us.
These results were consistent with all the other previous testing I have done on my system which did not surprise me at all.
In Apex I did the same set of actions 3 times as described in the methodology while measuring and recording the FPS using MSI Afterburner and RivaTuner. The settings in Apex were 1920×1080, 110 FOV, with every other setting on low for maximum FPS.
As you can see the results were all within the margin of error telling me that my set of actions repeated in the firing range can be considered a valid benchmark.
After going to the BIOS of my PC and disabling SMT I have started my second round of testing with restarts between each run of LatencyMon and all the other steps to ensure the validity of my results.
In LatencyMon with no background applications running the latency went down to 2.45us – 2.5us compared to the 2.75us and 2.8us.
Although I have measured a notable drop in my latency it was interesting that in Apex my FPS did not change at all and was all within the margin of error.
The conclusion here is pretty simple then – I have achieved lower latency without impacting my performance in my game of choice which is a net positive overall.
The limitations of my little study here are obvious – I have used only LatencyMon to measure the latency changes and have only used a single game (3 runs each to get a stable average). Moreover, since my system is running an AMD CPU I was not able to test the same process on an Intel system.
At the same time, my findings are consistent with most other PC tweakers that have experimented with this subject on different platforms.
The common conclusion is that for gaming, turning off SMT/Hyper-Threading might lead to a small loss in FPS (depending on the game engine and optimizations) while for workload tasks this will lead to a substantial loss in performance.
Since I am mainly interested in gaming I would say that turning off SMT/Hyper-Threading and lowering your latency is worth losing some FPS, especially if after running some tests you lose none like in the case of Apex.
While turning off SMT/Hyper-Threading might hinder your performance in work-oriented tasks if you are a competitive gamer like myself and you want the best possible latency, turning off SMT/Hyper-Threading is a step in the right direction.
The decrease in latency is clear while the drop in FPS and performance will depend on individual games and optimizations. At the same time as other reputable sources have noted “in gaming, overall there was no difference between SMT On and SMT Off, however, some games may show differences in CPU limited scenarios” (source) which then leads to my conclusion.
As a competitive gamer, you should turn off core virtualization for the benefit of lower latency. The only time this advice should not apply is when you can measure a huge difference in FPS in your game of choice which then renders it unplayable.
The Best Timer Resolution Utility
Optimizing your system by understanding what kind of timer you are using or how to further improve your performance might be confusing the moment you dive into this topic, but with time you will be able to test different combinations of clocks and ticks and figure out what works the best for you. With that […]
Cinebench 2024 – Updated Benchmarking Tool
As hardware becomes faster, the tools to benchmark and test for stability with said hardware need to improve as well to properly simulate an intensive use case. Cinebench has been a staple CPU testing utility that allows you to see if your chip is running normally compared to others, or if your overclocking is stable. […]
Understanding Bottlenecks – GPU Busy & Intel PresentMon
Bottlenecks are used as a scarecrow for new PC builders that can often lead them down the path of investing a lot more money into their build than previously anticipated. In truth, you will always be bottlenecked by something since PC hardware does not just simply scale linearly into infinity – there is always a […]
Why Dual Booting Is the Way to Go For Most Gamers
When optimizing a system for gaming you are most likely going to run a stripped-down version of Windows with the least amount of unnecessary components so your PC hardware can focus solely on pushing out FPS for your games. While this works best for gaming when you want to use the same machine for desktop […]
Are There Any Downsides to Using a No-Idle Power Plan?
When optimizing a system for gaming I often reference power plans, and how using a no-idle power plan can improve your mouse polling rate graphs, sleep delays, and lower DPC in LatencyMon. Most custom Windows ISOs come with custom no-idle power plans so finding one to use even for a basic install is not hard […]
MouseDataQueueSize Registry Tweak – Placebo or an Actual Improvement?
In trying to improve the way our PCs and peripherals behave multiple settings need to be tested. You can mess with the Windows clock and tick, you can micro-adjust your timer resolution for higher precision, you can use custom power plans, and you can even tune in-game settings that affect things like your render queue […]