xml配置

<pmu state="off"/> 是 libvirt / QEMU 虚拟机 XML 配置文件中的一项,用于控制​**虚拟 CPU 是否启用 PMU(Performance Monitoring Unit,性能监控单元)**​。


🔧 作用解释:

1
<pmu state="off"/>

这行的意思是:​关闭虚拟 CPU 的 PMU 功能​,即:

  • 虚拟机内部看不到 PMU(例如 perfrdpmcPMC 相关寄存器等不可用);
  • 禁止应用或反作弊检测通过性能计数器探测“是否为虚拟机”;
  • 某些软件通过检查 PMU 行为(如 rdpmc 支持或 MSR 读取)来判断是否运行在真实硬件上,关闭后可规避。

✅ 常见用途:

场景 描述
🕵️ 反虚拟机检测 某些反作弊/反调试程序会检查 PMU 状态以识别虚拟机;关闭可绕过检查
🛡️ 安全需求 屏蔽 VM 中访问 PMU,可以减少攻击面(如 Spectre/PMC 泄露)
🧪 特定性能测试 某些测试可能要求禁用 PMU 以排除干扰
🧩 QEMU bug 规避 某些旧 QEMU 或 KVM 版本在启用 PMU 时会导致异常(特别是在 AMD 上)

🔍 默认行为:

  • 默认值为 <pmu state="on"/>,即 ​启用 PMU​;
  • 如果不写该标签,相当于 on
  • 显式写 off 可以禁用并提升一定的虚拟机“隐身性”。

💡 建议:

情况 建议设置
想尽量隐藏虚拟机特征(如过反作弊) state="off"
需要使用perf/rdpmc/ PMU 工具 state="on"或不写
不确定或通用场景 默认即可(不写)

<msrs unknown="fault"/> 是 libvirt 虚拟机 XML 配置中的一个重要设置,作用是:


✅ 含义解释:

1
2
3
<features>
<msrs unknown="fault"/>
</features>

表示:

当虚拟机中的系统或程序访问了 QEMU/KVM 不支持或未知的 MSR(Model-Specific Register)寄存器 时,​**抛出 GP 异常(General Protection Fault)**​,而不是静默忽略。


🧠 背景知识:MSR 是什么?

MSR(Model-Specific Register)是 CPU 的特权寄存器,用于控制高级功能,如:

  • 性能监控(PMC)
  • TurboBoost 控制
  • 温度传感器
  • 电源管理
  • 虚拟化标识(如 MSR_IA32_FEATURE_CONTROL, MSR_HYPERV_*

🔍 默认行为(等价于 unknown="ignore"):

默认情况下,QEMU/KVM 会忽略虚拟机访问未知或未实现的 MSR,直接返回 0 或静默跳过,这对某些程序(尤其是反作弊/反虚拟机检测)来说:

❗ 是“特征” —— 因为真实物理机上读取不存在的 MSR 是会抛异常的。


🔒 使用 unknown="fault" 的目的:

目的 效果
提升虚拟机拟真度 更像真实物理机,访问非法 MSR 会触发异常(而不是返回 0)
对抗反虚拟机检测 一些反作弊程序通过读取非法 MSR 检测虚拟机,设置后可以规避
⚠️安全或调试要求 有助于你排查虚拟机中访问了哪些不该访问的 MSR
⚠️可能引发兼容性问题 某些驱动或系统组件访问非法 MSR 时会直接崩溃(例如旧驱动或不标准软件)

🧪 示例:检测 MSR 存在的方式

反检测程序常见伪代码:

1
2
3
4
5
try {
rdmsr(0xdeadbeef); // 真实机抛异常,虚拟机返回 0
} catch (...) {
// 抛异常 → 判定为物理机
}

加上 unknown="fault" 后,虚拟机也抛异常,绕过这种检测。


✅ 推荐使用场景:

场景 是否推荐
🕵️ 绕过反虚拟机 / 反作弊 ✅ 推荐
🛠️ 调试、开发高仿真环境 ✅ 推荐
🧩 普通用途 / 旧系统 ❌ 不推荐,可能引发兼容问题

📌 总结:

属性 意义
`` 默认,忽略未知 MSR,可能被检测
`` 抛出异常,更接近物理机行为,适合伪装

raw 扩容

sudo qemu-img resize -f raw vol.img +100G

qcow2扩容

qemu-img resize yourdisk.qcow2 +100G

CPU部分

CCD0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='16'/>
<vcpupin vcpu='2' cpuset='1'/>
<vcpupin vcpu='3' cpuset='17'/>
<vcpupin vcpu='4' cpuset='2'/>
<vcpupin vcpu='5' cpuset='18'/>
<vcpupin vcpu='6' cpuset='3'/>
<vcpupin vcpu='7' cpuset='19'/>
<vcpupin vcpu='8' cpuset='4'/>
<vcpupin vcpu='9' cpuset='20'/>
<vcpupin vcpu='10' cpuset='5'/>
<vcpupin vcpu='11' cpuset='21'/>
<vcpupin vcpu='12' cpuset='6'/>
<vcpupin vcpu='13' cpuset='22'/>
<vcpupin vcpu='14' cpuset='7'/>
<vcpupin vcpu='15' cpuset='23'/>
<emulatorpin cpuset='8-15,24-31'/>
</cputune>

CCD1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<cputune>
<vcpupin vcpu='0' cpuset='8'/>
<vcpupin vcpu='1' cpuset='24'/>
<vcpupin vcpu='2' cpuset='9'/>
<vcpupin vcpu='3' cpuset='25'/>
<vcpupin vcpu='4' cpuset='10'/>
<vcpupin vcpu='5' cpuset='26'/>
<vcpupin vcpu='6' cpuset='11'/>
<vcpupin vcpu='7' cpuset='27'/>
<vcpupin vcpu='8' cpuset='12'/>
<vcpupin vcpu='9' cpuset='28'/>
<vcpupin vcpu='10' cpuset='13'/>
<vcpupin vcpu='11' cpuset='29'/>
<vcpupin vcpu='12' cpuset='14'/>
<vcpupin vcpu='13' cpuset='30'/>
<vcpupin vcpu='14' cpuset='15'/>
<vcpupin vcpu='15' cpuset='31'/>
</cputune>