首页 文章

KVM如何虚拟化性能计数器(PMC)?

提问于
浏览
0

我在Intel平台上使用 KVM-QEMU . 我想知道 PMC/PMU 如何在 KVM 虚拟化?

我对vPMC的理解如下 .

由于PMU是共享物理资源,因此管理程序应在VMExit / VMEnter期间上下文保存/恢复PMC配置和计数器 .

但在我的测试中,我感到困惑 .

(In my host Linux, the MSR of IA32_PERF_FIXed_CTRL is set to 0xb0)

首先,在已启动的VM中,

'wrmsr IA32_PERF_FIXed_CTRL 0x0b ',在VM中启用 FIXed_CTR0 . 然后,我在VMExit上记录了IA32_PERF_FIXed_CTRL的MSR,发现未启用FIXed_CTR0 .

我认为这是因为当VMExit发生时,它已经在主机上下文中,因此IA32_PERF_FIXed_CTRL的MSR是主机,而不是主机 .

但问题是VM的MSR保存在主机中的位置,以及在VMEnter期间VM的MSR何时何地恢复到CPU?

希望我的问题很清楚 .

谢谢,

1 回答

  • 1

    KVM实现了一个虚拟PMU,它利用Linux的perf子系统进行核心PMU操作 . 它不会将主机PMU直接暴露给guest虚拟机 .

    当您执行“wrmsr IA32_PERF_FIXed_CTRL 0x0b”时,您没有写入硬件msr,KVM捕获msr写入并在其虚拟pmu的表示中进行更新 . 在x86.c中查找kvm_set_msr_common(),这将最终调用pmu_intel.c中的intel_pmu_set_msr()来实现真正的魔力 . 另请参阅struct kvm_pmu(),它是KVM对PMU的表示 .

    MSR不需要像典型的VMCS字段那样进行恢复,因为KVM在每个vcpu(struct kvm_vcpu)的struct kvm_pmu()中保存了客户特定的pmu设置 .

相关问题