KVM CPUID 位¶
- 作者:
Glauber Costa <glommer@gmail.com>
在 kvm 主机上运行的客户机可以使用 cpuid 检查其某些功能。这并非总是保证有效,因为用户空间可以在启动客户机之前屏蔽某些甚至所有与 KVM 相关的 cpuid 功能。
KVM cpuid 功能有
功能:KVM_CPUID_SIGNATURE (0x40000000)
返回
eax = 0x40000001
ebx = 0x4b4d564b
ecx = 0x564b4d56
edx = 0x4d
请注意,ebx、ecx 和 edx 中的此值对应于字符串“KVMKVMKVM”。eax 中的值对应于此叶中存在的最大 cpuid 功能,如果将来添加更多功能,则会更新。另请注意,旧主机将 eax 值设置为 0x0。这应解释为如果该值为 0x40000001。此函数查询 KVM cpuid 叶的存在。
功能:定义 KVM_CPUID_FEATURES (0x40000001)
返回
ebx, ecx
eax = an OR'ed group of (1 << flag)
其中 flag
定义如下
标志 |
值 |
含义 |
---|---|---|
KVM_FEATURE_CLOCKSOURCE |
0 |
kvmclock 在 msrs 0x11 和 0x12 处可用 |
KVM_FEATURE_NOP_IO_DELAY |
1 |
无需在 PIO 操作上执行延迟 |
KVM_FEATURE_MMU_OP |
2 |
已弃用 |
KVM_FEATURE_CLOCKSOURCE2 |
3 |
kvmclock 在 msrs 0x4b564d00 和 0x4b564d01 处可用 |
KVM_FEATURE_ASYNC_PF |
4 |
可以通过写入 msr 0x4b564d02 来启用异步 pf |
KVM_FEATURE_STEAL_TIME |
5 |
可以通过写入 msr 0x4b564d03 来启用窃取时间 |
KVM_FEATURE_PV_EOI |
6 |
可以通过写入 msr 0x4b564d04 来启用半虚拟化中断结束处理程序 |
KVM_FEATURE_PV_UNHALT |
7 |
客户机在启用半虚拟化自旋锁支持之前检查此功能位 |
KVM_FEATURE_PV_TLB_FLUSH |
9 |
客户机在启用半虚拟化 tlb 刷新之前检查此功能位 |
KVM_FEATURE_ASYNC_PF_VMEXIT |
10 |
可以通过在写入 msr 0x4b564d02 时设置位 2 来启用半虚拟化异步 PF VM EXIT |
KVM_FEATURE_PV_SEND_IPI |
11 |
客户机在启用半虚拟化发送 IPI 之前检查此功能位 |
KVM_FEATURE_POLL_CONTROL |
12 |
可以通过写入 msr 0x4b564d05 来禁用 HLT 上的主机端轮询。 |
KVM_FEATURE_PV_SCHED_YIELD |
13 |
客户机在使用半虚拟化 sched yield 之前检查此功能位。 |
KVM_FEATURE_ASYNC_PF_INT |
14 |
客户机在使用第二个异步 pf 控制 msr 0x4b564d06 和异步 pf 确认 msr 0x4b564d07 之前检查此功能位。 |
KVM_FEATURE_MSI_EXT_DEST_ID |
15 |
客户机在使用 MSI 地址位 11-5 中的扩展目标 ID 位之前检查此功能位。 |
KVM_FEATURE_HC_MAP_GPA_RANGE |
16 |
客户机在使用 map gpa range 超调用来通知页面状态更改之前检查此功能位 |
KVM_FEATURE_MIGRATION_CONTROL |
17 |
客户机在使用 MSR_KVM_MIGRATION_CONTROL 之前检查此功能位 |
KVM_FEATURE_CLOCKSOURCE_STABLE_BIT |
24 |
如果在 kvmclock 中没有预期的客户机端每个 CPU 扭曲,主机将发出警告 |
edx = an OR'ed group of (1 << flag)
其中 flag
在此处定义如下
标志 |
值 |
含义 |
---|---|---|
KVM_HINTS_REALTIME |
0 |
客户机检查此功能位以确定 vCPU 永远不会被无限期抢占,从而允许优化 |