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

标签 virtual-machine kvm

我正在使用 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)

首先,在启动的虚拟机中,

'wrmsr IA32_PERF_FIXed_CTRL 0x0b ', 启用 FIXed_CTR0在虚拟机中。
然后,我在VMExit 记录IA32_PERF_FIXed_CTRL 的MSR,发现FIXed_CTR0 未启用。

我想是因为VMExit发生时,它已经在host上下文中了,所以IA32_PERF_FIXed_CTRL的MSR是host之一,而不是host。

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

希望我的问题很清楚。

谢谢,

最佳答案

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

当您这样做时wrmsr IA32_PERF_FIXed_CTRL 0x0b ,您没有写入硬件 MSR(特定于模型的寄存器),KVM 会捕获 MSR 写入并在其虚拟 PMU 的表示中进行更新。寻找 kvm_set_msr_common()x86.c ,这最终会调用 intel_pmu_set_msr()pmu_intel.c这才是真正的魔法。还看struct kvm_pmu()这是 KVM 对 PMU 的表示。

MSR 不需要像典型的 VMCS 字段一样恢复,因为 KVM 将客户特定的 PMU 设置保存在 struct kvm_pmu() 中。每个 vCPU ( struct kvm_vcpu )。

关于virtual-machine - KVM 如何虚拟化性能计数器 (PMC)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405962/

相关文章:

Ubuntu 16.04 虚拟盒蓝牙

Java awt.Robot 无法在虚拟机内工作?

ubuntu - 当我有 VM 时,如何在 Ubuntu 12.04 上安装 KVM

ssh - KVM/桥接器 : No Route To Host

ubuntu - 如何将文件从 VirtualBox 复制到主机操作系统?

linux - qemu 管理器-虚拟机 : "QEMU console not connected"

mysql - Cloudstack-无法删除辅助存储

kvm - ubuntu-vm-builder 在/etc/sudoers 上失败 - 任何解决方法?

kubernetes - 尝试使用Kubespray部署Kuberntes时发生SSLError:('The read operation timed out',)

virtual-machine - 如何在 VirtualBox 中同步主机唤醒时间?