本文转载自:Intel VT技术中的Preemption Timer

1. 什么是Preemption Timer

Preemption Timer是一种可以周期性使VCPU触发VMExit的一种机制。即设置了Preemption Timer之后,可以使VCPU在指定的TSC cycle(注意文章最后的rate)之后产生一次VMExit。

使用Preemption Timer时需要注意下面两个问题:

  1. 在旧版本的Intel CPU中Preemption Timer是不精确的。在Intel的设计中,Preemption Timer应该是严格和TSC保持一致,但是在Haswell之前的处理器并不能严格保持一致。
  2. Preemption Timer只有在VCPU进入到non-root mode时才会开始工作,在VCPU进入VMM时或者VCPU被调度出CPU时,其值都不会变化。

2. 如何使用Preemption Timer

Preemption Timer在VMCS中有三个域需要设置:

  1. Pin-Based VM-Execution Controls,Bit 6,”Activate VMX preemption timer”: 该位如果设置为1,则打开Preemption Timer;如果为0,则下面两个域的设置均无效。
  2. VM-Exit Controls,Bit 22,”Save VMX-preemption timer value”:This control determines whether the value of the VMX-preemption timer is saved on VM exit.
  3. VMX-preemption timer value:This field contains the value that the VMX-preemption timer will use following the next VM entry with that setting. 如果设置了”Save VMX-preemption timer value”,那么在VM exit时会更新该域为新的值。

和Preemption Timer相关的内容去SDM中全文搜索”Preemption Timer”。

在使用时,需要首先设置” Activate VMX preemption timer”和 “VMX-preemption timer value”,如果需要VM exit时保存VMX-preemption timer value的话,需要设置 “Save VMX-preemption timer value”,这样在VCPU因为其他原因VMExit的时候不会重置VMX-preemption timer value。

注意:在由Preemption Timer Time-out产生的VMExit中,是需要重置VMX-preemption timer value的。


注意下这个rate。