我正在研究 RDTSC 并了解它是如何为 VirtualBox 和 VMWare 等虚拟机进行虚拟化的。为什么英特尔/AMD 费尽心思虚拟化这条指令?
我觉得它可以很容易地用陷阱来模拟,而且它并不是一个 super 常见的指令(我测试过,在禁用了硬件 RDTSC 虚拟化的虚拟机中,一般使用没有明显的减速)。
但是,我知道英特尔/AMD 不会费尽心思将这条指令添加到虚拟化硬件中,除非能够非常快速地执行很重要。
有谁知道为什么?
最佳答案
通常使用 RDTSC 来获取细粒度的时序信息,其中虚拟化陷阱的开销将非常显着。最常见的用途是让两条 RDTSC 指令之间有少量代码,将时间差作为代码序列的耗时(周期数)。因此,即使是管道排水/冲洗的开销也相当大。
此外,由于所有指令所做的都是读取一个连续运行的计数器,因此对其进行虚拟化非常容易——硬件只需要允许在 VM 上下文切换时保存/重新加载计数器值,而不是对 RDTSC 指令本身进行任何特殊处理。
关于hardware - 为什么 RDTSC 是现代处理器上的虚拟化指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745543/