instrumentation: Avoid CPUID 0x15/0x16 for Hypervisor TSC frequency

Andres Freund <andres@anarazel.de>

Commit: 7fc36c5db55016f7a1d89b5e2efd82fe6fd39632
Author: Andres Freund <andres@anarazel.de>
Date: 2026-04-09T15:50:46Z
instrumentation: Avoid CPUID 0x15/0x16 for Hypervisor TSC frequency

This restricts the retrieval of the TSC frequency whilst under a Hypervisor to
either Hypervisor-specific CPUID registers (0x40000010), or TSC
calibration. We previously allowed retrieving from the traditional CPUID
registers for TSC frequency (0x15/0x16) like on bare metal, but it turns out
that they are not trustworthy when virtualized and can report wildly incorrect
frequencies, like 7 kHz when the actual calibrated frequencty is 2.5 GHz.

Per report from buildfarm member drongo.

Author: Lukas Fittl <lukas@fittl.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/jr4hk2sxhqcfpb67ftz5g4vw33nm67cgf7go3wwmqsafu5aclq%405m67ukuhyszz

Files

PathChange+/−
src/port/pg_cpu_x86.c modified +9 −12

Discussion