I'm doing some microbenchmarking of short code snippets using the __rdtsc
intrinsic inside WSL2 on Windows 11. I'm noticing that there is a lot more variance in the results than I'm used to from working on machines that are running Linux on bare metal. If I use clock_gettime
with CLOCK_MONOTONIC_RAW
instead my results across runs are much more consistent. From prior experience this made me suspect that the TSC might not be reliable, so I ran dmesg
and found this:
tsc: Marking TSC unstable due to running on Hyper-V
Which is surprising because that directly contradicts the documentation here:
Hyper-V initialization code in Linux reads this MSR to get the frequency, so it skips TSC calibration and sets tsc_reliable.
Any ideas why this is happening? Is there a way for me to use plain __rdtsc
? I notice my /proc/cpuinfo
does have constant_tsc
but not nonstop_tsc
, but since my CPU is new enough to be running Windows 11 I assume this is an artifact of running in WSL2.