作为调试来宾VM的一部分,我们非常广泛地使用rdtsc来监视使用的时间量(正常,时钟周期)。有人提出这样的问题,因为rdtsc会导致VM退出,这本身就很昂贵。我认为没有更低级别的方法可以找出已经消耗了多少时钟时间或等效时间。还有其他解决方案吗?这真的很贵吗?

最佳答案

不必每个rdtsc都导致VM退出,至少不会在Intel CPU上退出。 ASAIK,虚拟机控制结构(VMCS)具有指示每个RDTSC是否应导致VM退出的位。选中Intel Architecture Manual的“基于主处理器的VM执行控件的定义– BIT 12”(表21-6)

有一个nifty script(vmxcap.py)可用于快速转储此信息。例如,在我的RDTSC不会导致VM退出的计算机上,我得到以下信息:

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


希望这可以帮助。

关于x86 - KVM和rdtsc延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28573068/

10-11 21:06