KVM 和 rdtsc 延迟

KVM and rdtsc latency

作为调试来宾 VM 的一部分,我们相当广泛地使用 rdtsc 来监视所使用的时间量(好的,时钟周期)。有人提出的问题是,这本身就很昂贵,因为 rdtsc 会产生 VM 退出。我想不出更低级别的方法来找出已经过去了多少时钟时间或等效时间。还有其他解决方案吗?这个真的很贵吗?

不需要每个 rdtsc 都导致 VM 退出,至少在 Intel CPU 上不需要。 ASAIK,虚拟机控制结构 (VMCS) 有一点规定每个 RDTSC 是否应该导致 VM-Exit。检查 "Definitions of Primary Processor-Based VM-Execution Controls – BIT 12" (Table 21-6) of Intel Architecture Manual

有一个 nifty script(vmxcap.py) 可用于快速转储此信息。例如,在我的机器上,RDTSC 不会引发 VM-Exit,我得到以下信息:

[root@XYZ ~]# ./vmxcap.py  | grep -i rdtsc
RDTSC exiting                            no

希望对您有所帮助。