— This post is unfinished and should be considered early BETA version until further notice. I am hoping for some feedback / input.
*** I have had several conversations with folks who are or have purported to be knowledgeable in this subject. To date they have all backed out or disappeared once I request to publish their statements and names. That all changed today as I received input from an expert in regards to the useplatformclock tweak.
IMHO it is very important to read what he has to say. The full email exchange is at the bottom of this post.
****Edit 22DEC2014
Folks, I’ve done all I can with these tweaks.
I cannot reproduce results others (mostly overclockers) are seeing with this.
This does not mean some folks are not seeing a positive effect, simply that I’m unable to reproduce it.
Please read the 2 email conversations at the end of this article.
For me, this issue is now closed.
3 purported performance tweaks benchmarked.
They are: useplatformclock, tscsyncpolicy, and disabledynamictick.
Opening Statement
These tweaks have been mentioned in some places (and to me) as performance tweaks. I set out to see if they were.
The Tweaks, Defined
bcdedit /set useplatformclock true
bcdedit /set tscsyncpolicy Enhanced
bcdedit /set disabledynamictick yes
The commonality they share is they are setting that involve the system clock.
In general Windows will use the best timer your hardware supports and may use a mix of timers.
“Best” does not always mean fastest. Fastest can mean errors.
These settings can harm battery life.
As I understand it, Windows 8.1 defaults to invariant TSC when hardware supports it.
These tweaks are applied via Command Prompt (Admin).
To remove them:
bcdedit /deletevalue useplatformclock
bcdedit /deletevalue tscsyncpolicy
bcdedit /deletevalue disabledynamictick
To view bcdedit settings:
bcdedit /enum
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542202%28v=vs.85%29.aspx
useplatformclock [ yes | no ]
Forces the use of the platform clock as the system’s performance counter.
Note This option should only be used for debugging.
tscsyncpolicy [ Default | Legacy | Enhanced ]
Controls the times stamp counter synchronization policy. This option should only be used for debugging.
Note The option is available starting in Windows 8 and Windows Server 2012.
disabledynamictick [ yes | no ]
Enables and disables dynamic timer tick feature. The option is available starting with Windows 8 and Windows Server 2012.
Note This option should only be used for debugging.
The Tweaks, More Info
If you also use Linux on your machine you can check system messages for which timer your system supports.
From my machine:
2013-12-01T07:31:10.607644-05:00 XXXXXXXXXX kernel: [ 0.000000] hpet clockevent registered
2013-12-01T07:31:10.607645-05:00 XXXXXXXXXX kernel: [ 0.000000] tsc: Fast TSC calibration using PIT
2013-12-01T07:31:10.607645-05:00 XXXXXXXXXX kernel: [ 0.001000] tsc: Detected 2693.799 MHz processor
2013-12-01T07:31:10.607753-05:00 XXXXXXXXXX kernel: [ 0.036518] TSC deadline timer enabled
2013-12-01T07:31:10.608522-05:00 XXXXXXXXXX kernel: [ 1.818067] tsc: Refined TSC clocksource calibration: 2693.880 MHz
2013-12-01T07:31:10.608528-05:00 XXXXXXXXXX kernel: [ 2.818095] Switched to clocksource tsc
Useplatformclock
a.k.a – HPET tweak
Forces Windows to use hardware timer instead of OS default.
Tscsyncpolicy
Very little information exists at Microsoft.com on tscsyncpolicy:
https://www.google.com/#filter=0&q=tscsyncpolicy+site:microsoft.com
Disabledynamictick
Very little information exists at Microsoft.com on disabledynamictick:
https://www.google.com/#q=disabledynamictick+-social+-answers+site:microsoft.com
The only legitimate use for this I have seen is as a fix for hardware issues that has since been fixed.
Example:
Issue: http://withinwindows.com/within-windows/2012/06/28/workaround-for-windows-8-freezing-issues
Fixed: http://withinwindows.com/within-windows/2012/07/10/hotfix-available-for-windows-8-freezing-issues
Places I Found Info:
The Windows Timestamp Project – Microsecond Resolution Time Services for Windows
Microsoft: Timers, Timer Resolution, and Development of Efficient Code
Wikipedia – High Precision Event Timer
Wikipedia – Time Stamp Counter
Oracle – High Resolution Timesource (Linux)
A Negative Ping Value, Hang Condition, Poor Performance or Machine Checks may be experienced on IBM System X Multinode Servers running Microsoft Windows 2008 R2 – IBM System x
Microsoft – Guidelines For Providing Multimedia Timer Support (old info but informative)
Intel 64 and IA-32 Architectures Software Developer’s Manual
Interesting Forum Posts
http://www.neowin.net/forum/topic/1075781-tweak-enable-hpet-in-bios-and-os-for-better-performance-and-fps/
http://forums.guru3d.com/showthread.php?s=21dd8ddd4aa9dc89114ceec5f271c275&t=368604
http://rog.asus.com/forum/showthread.php?23113-HPET-High-Precision-Event-Timer&s=d1869792a05a1efea5d936c63e0908a9
Tools
LatencyMon
Benchmarks
Hardware: My Laptop (Intel i7)
OS: Windows 8.1
PCMark8 Pro – Creative Conventional 3.0 (external monitor)
Download & Info
(click score to see details at futuremark page)
PCMark8 | Score |
baseline | 3589 |
useplatformclock | 3538 |
tscsyncpolicy | 3589 |
disabledynamictick | 3589 |
3dMark Pro – Fire Strike Extreme 1.1 (external monitor)Download
Download & Info
(click score to see details at futuremark page)
3dMark | Score |
baseline | 791 |
useplatformclock | 792 |
tscsyncpolicy | 792 |
disabledynamictick | 791 |
Passmark 8.0
Download
Setup: Laptop plugged in to external monitor. Forced Passmark to use Nvidia card instead of Intel. (full scores here)
Passmark | baseline | useplatformclock | tscsyncpolicy | disabledynamictick |
Rating | 3720.8 | 3590.0 | 3728.2 | 3619.2 |
Nvidia TimerTiming
Download
16 Tests. Without useplatform tweak is faster 14 of 16.
Before useplatform tweak. | After useplatform tweak |
Report file for timing the various timers.*** Key number is the avg time. The smaller this number, the faster the timer. QueryPerformanceFrequency() freq = 0 2630752 method 0: QueryPerfCntr..() 100 times tot: 0 3 avg: 0.030000 avg time: 1.14036e-008 method 0: QueryPerfCntr..() 500 times tot: 0 14 avg: 0.028000 avg time: 1.06433e-008 method 0: QueryPerfCntr..() 1000 times tot: 0 27 avg: 0.027000 avg time: 1.02632e-008 method 0: QueryPerfCntr..() 10000 times tot: 0 279 avg: 0.027900 avg time: 1.06053e-008method 1: GetTickCount() 100 times tot: 0 1 avg: 0.010000 avg time: 3.80119e-009 method 1: GetTickCount() 500 times tot: 0 4 avg: 0.008000 avg time: 3.04096e-009 method 1: GetTickCount() 1000 times tot: 0 31 avg: 0.031000 avg time: 1.17837e-008 method 1: GetTickCount() 10000 times tot: 0 79 avg: 0.007900 avg time: 3.00294e-009method 2: TimeGetTime() 100 times tot: 0 16 avg: 0.160000 avg time: 6.08191e-008 method 2: TimeGetTime() 500 times tot: 0 22 avg: 0.044000 avg time: 1.67253e-008 method 2: TimeGetTime() 1000 times tot: 0 42 avg: 0.042000 avg time: 1.5965e-008 method 2: TimeGetTime() 10000 times tot: 0 406 avg: 0.040600 avg time: 1.54328e-008method 3: Pentium internal high-freq cntr() 100 times tot: 0 3 avg: 0.030000 avg time: 1.14036e-008 method 3: Pentium internal high-freq cntr() 500 times tot: 0 11 avg: 0.022000 avg time: 8.36263e-009 method 3: Pentium internal high-freq cntr() 1000 times tot: 0 20 avg: 0.020000 avg time: 7.60239e-009 method 3: Pentium internal high-freq cntr() 10000 times tot: 0 192 avg: 0.019200 avg time: 7.29829e-009 |
Report file for timing the various timers.*** Key number is the avg time. The smaller this number, the faster the timer. QueryPerformanceFrequency() freq = 0 14318180 method 0: QueryPerfCntr..() 100 times tot: 0 1079 avg: 10.790000 avg time: 7.53587e-007 method 0: QueryPerfCntr..() 500 times tot: 0 5205 avg: 10.410000 avg time: 7.27048e-007 method 0: QueryPerfCntr..() 1000 times tot: 0 10331 avg: 10.331000 avg time: 7.2153e-007 method 0: QueryPerfCntr..() 10000 times tot: 0 103280 avg: 10.328000 avg time: 7.21321e-007method 1: GetTickCount() 100 times tot: 0 33 avg: 0.330000 avg time: 2.30476e-008 method 1: GetTickCount() 500 times tot: 0 40 avg: 0.080000 avg time: 5.5873e-009 method 1: GetTickCount() 1000 times tot: 0 68 avg: 0.068000 avg time: 4.74921e-009 method 1: GetTickCount() 10000 times tot: 0 457 avg: 0.045700 avg time: 3.19175e-009method 2: TimeGetTime() 100 times tot: 0 136 avg: 1.360000 avg time: 9.49841e-008 method 2: TimeGetTime() 500 times tot: 0 167 avg: 0.334000 avg time: 2.3327e-008 method 2: TimeGetTime() 1000 times tot: 0 284 avg: 0.284000 avg time: 1.98349e-008 method 2: TimeGetTime() 10000 times tot: 0 2284 avg: 0.228400 avg time: 1.59517e-008method 3: Pentium internal high-freq cntr() 100 times tot: 0 35 avg: 0.350000 avg time: 2.44444e-008 method 3: Pentium internal high-freq cntr() 500 times tot: 0 72 avg: 0.144000 avg time: 1.00571e-008 method 3: Pentium internal high-freq cntr() 1000 times tot: 0 125 avg: 0.125000 avg time: 8.73016e-009 method 3: Pentium internal high-freq cntr() 10000 times tot: 0 1148 avg: 0.114800 avg time: 8.01778e-009 |
Conclusion
Notes:
1 – Since I am not experiencing any stuttering or lagging issues I can only attest to the performance impact. You should fully update Windows as many of these issues have reportedly been fixed.
2 – When viewing info on this subject on the web (especially forum posts), anecdotal evidence suggests that the effect of these tweaks may be hardware dependant. I’m unsure what would drive this variation (bad hardware, BIOS, drivers???). I’ve only tested these tweaks on my laptop.
3 – I understand that these tweaks can show improved latency numbers. I cannot see where this is translating into any performance benefit.
4 – Latency can influence things like audio recording. Most likely real-time high-end type use. I’ve not tested this.
5 – Although it would take far more benchmarks across many different types of hardware, it seems if the useplatformclock tweak has any effect it is negative.
(On my laptop PCMark 8, Passmark show slightly lower scores. It gets spanked by TimerTiming.)
6 – I’m not an engineer or developer. Do with this info as you see fit.
My results indicate that on a computer not experiencing issues these tweaks have no performance benefit.
Email from an expert ( he is a high-level software engineer):
– – – – Begin Email Conversation – – – –
Hi Eric,
I came across your Tweak site and saw some interesting tests regarding some tweaks. I noticed that one of the tweaks you tested was related to the PlatformClock.
bcdedit /set useplatformclock true
https://www.tweakhound.com/2014/01/30/timer-tweaks-benchmarked/
FWIW, I wanted to provide some additional insight as I’ve been involved with this since 2008 R2 when the Stamp Counter (TSC)was (Re)-introduced to Windows. The PlatformClock parameter / tweak is not meant to “improve” performance per say, it’s meant for stability and compatibility purposes which can (and will) improve performance over use of the TSC when enabled on / within the correct (Server) configuration environment.
You may recall that traditionally Windows (as do most x86 based OSs) function on the assumption / use of a Single Clock Domain for a given server, however with the ability of servers to be physically “scaled” (connected together) to create a larger “multinode” server (IE – 2, 3, 4, 5, 6, 7 or 8 node), we have a problem where each server has it’s own local “clock”. This creates a “multi-clock” domain which in and of itself is not bad, however, the “clocks” are Not synchronized across all nodes (unless Hardware clock synchronization is implemented which is very difficult/involved to implement) therefore there can be clock skew / drift between nodes & processors (other than Node 0) which can lead to thread scheduling and timing issues which at minimum can lead to performance problems in addition to other strange & bizarre behavior (poor network & disk performance, hang conditions, etc. etc. etc.).
The problem is encountered within a multi-clock domain beginning in 2008 R2 when the TSC was re-introduced as the default Clock (as mentioned above) Vs the use of the HPET (or Power Management (ACPI / PMclock)) Clock that prior OS versions used. The TSC is very fast and reliable but in using the TSC as the default Source Clock, the OS assumes a Single clock source. Depending upon which node the RDTSC thread executes, clock synchronization may / can become skewed resulting in thread scheduling problems and issues such as is mentioned above.
This said, to alleviate this potential problem on some older servers and certain multi-node scalable server platforms, “bcdedit /set useplatformclock true” should be implemented to circumvent these potential problems. Note: Even if the default system (platform) clock is HPET, ACPI / PMclock, etc, Windows must be explicitly told to use the Platform Clock else TSC will be used.
I wrote the following Knowledge Base (Retain Tip) article back in 2011 as a result of problems encountered when TSC was re-introduced in 2008 R2. Please note that these issues are not limited to IBM but can impact any vendor, system / server on which a multi-clock domain environment exists:
A Negative Ping Value, Hang Condition, Poor Performance or Machine Checks may be experienced on IBM System X Multinode Servers running Microsoft Windows 2008 R2 – IBM System x
The following is a good general article from MS related to Time Stamps and there are other on the web as well:
Acquiring high-resolution time stamps
Regards,
Ron Arndt
– – – – My Reply – – – –
Hi Ron,
Thank you very much for your highly informative email.
As far as it applies to desktops and gaming in particular what is your expert opinion of the tweak in question?
Also I would like to add what your email to the article, with your permission.
If you want to revise it in any way that is fine,
Thanks,
Eric Vaughan
– – – – His Reply – – – –
Hi Eric,
You may add the contents of the email and formatted as you see fit (IE some detail might cause confusion so polish / trim as needed) …
…
From a Desktop / Gaming standpoint, there should be no need to use the useplatformclock tweak within a Desktop / Laptop / Workstation environment unless there are known problems with the system using the TSC that could not be resolved within the vendor’s BIOS/UEFI code (which should be a known and documented issue within the vendor’s support forums, etc.).
In general, TSC is much faster for the OS and Apps to utilize than the other methods which should provide better overall performance by avoiding additional latencies due to additional overhead of the other clock counter methods.
This said, it is possible that depending upon the era of the HW platform (desktop, laptop, workstation, etc) that there may be some stability issues of some systems running Win7 / 2008 R2 (due to HW / FW and OS (TSC) implementations) being within a transitional period of time where a system may have better stability when using a system’s default (or configured platform clock within BIOS/UEFI) which is not the TSC (HPET, ACPI/PM_Timer) so stability is also a performance consideration.
In short, the TSC provides the lowest overhead which can and does translate to lower overhead / latency generally resulting in better performance and therefore the use of the TSC for Windows 2008 R2 (Windows 7) and later should remain as the default clock source unless known issues or problems are encountered.
Also, you might notice more of a difference in performance when testing single processor (socket) and single core processor packages Vs multi-socket / multi-core processor packages and configurations. I believe some of the more current desktops / workstations or Main Boards have more than one processor socket & core per processor which may be an interesting test behavior as we see the personal systems become more like the servers of a few years ago.
Regards,
Ron Arndt
– – – – End Email Conversation – – – –
– – – – Begin Email Conversation 2 – – – –
From JS:
I like your article on this very much, but you neglected to mention the aspect of overclocking and it’s effects on timing.
For example, if I overclock my FSB via SetFSB with the default timer, WinTimerTester shows that the longer I run it, the more out of sync QueryPerformanceCounter and GetTickCount get.
This causes severe problems in some games, notably “Battlefield: Bad Company 2”. I’m only able to play it for a few minutes before the game gets horribly out of sync and is unplayable.
If I set useplatformclock to true, I don’t have this problem. I get a near perfect 1.000 ratio in WinTimerTester while overclocked, and those games don’t get out of sync anymore.
More info here, http://forum.notebookreview.com/gaming-software-graphics-cards/569893-must-read-setfsb-o-c-game-problems-fixed.html
Video – Crysis 3 – 30% Framerate and Performance Boost, and FPS Cap Removal [120Hz.Net – HyperMatrix]
– – – – End Email Conversation 2 – – – –