为什么RDTSC是现代处理器的虚拟化指令?

时间:2011-10-12 19:36:21

标签: hardware virtualization rdtsc

我正在研究RDTSC,并了解它是如何虚拟化虚拟机,如VirtualBox和VMWare。为什么Intel / AMD会遇到虚拟化这条指令的麻烦?

我觉得它可以很容易地用陷阱来模拟它并不是一个超常用的指令(我测试过并且在禁用硬件RDTSC虚拟化的虚拟机中一般使用没有明显的减速)。

但是,我知道英特尔/ AMD不会把这个指令添加到虚拟化硬件中,除非能够非常快速地执行它是非常重要的。

有谁知道为什么?

2 个答案:

答案 0 :(得分:7)

通常使用RDTSC来获得细粒度的时序信息,其中虚拟化陷阱的开销非常大。最常见的用途是使用两条RDTSC指令,它们之间有少量代码,将时间差作为代码序列的经过时间(周期数)。因此,即使管道排水/冲洗的开销也非常显着。

此外,由于所有指令都是连续运行的计数器,因此虚拟化很容易 - 硬件只需要允许在VM上下文切换上保存/重新加载计数器值,而不是RDTSC指令本身的任何特殊值

答案 1 :(得分:2)

VM应该能够拥有单独的TSC,因为它们在不同的时间启动。物理CPU只有一个,因此需要一些东西来至少获得单个的每个VM TSC偏移量。

此外,由于VM不完全拥有底层物理CPU,也就是说,它们不能一直在它们上执行,它们的TSC也应该以某种方式反映“开/关”时段,这是可取的他们不会突然改变价值实际的时间,虚拟机应该仍然可以从主机操作系统获得,因为有很多虚拟化软件尚未准备好,并且当数字过多时可能会中断。

我认为这些是RDTSC虚拟化的原因。但无论你做什么,满足相互冲突的要求都是艰难的,并且使问题复杂化。您无法隐藏虚拟化,并且VM可以同时以接近本机的速度运行。有一些权衡,有些东西必须放弃。