# 虚拟化开关：检查 VT-x、IOMMU、SLAT 与嵌套支持

> 确认固件与 CPU 到底为 Hyper-V、WSL2、VBS 和嵌套虚拟化提供了什么，以及那些静默失败的检查。

**测试环境**

- 版本号: 26300.9457 / 26100.33650
- 版本: Pro (26H2) / Server
- 架构: x64
- 证据: E2, M-V
- 核验日期: 2026-10-29

## 一句话结论

四样不同的东西都被叫"虚拟化"，失败方式各不相同：

| 特性 | 谁需要 | 在哪开 |
|---|---|---|
| **VT-x / AMD-V**（CPU） | Hyper-V、WSL2、VBS、VMware | 固件设置 |
| **SLAT**（EPT/NPT） | Hyper-V | 硬件特性，不是开关 |
| **IOMMU**（VT-d/AMD-Vi） | 设备直通、DMA 保护 | 固件设置 |
| **嵌套** | 虚拟机里跑虚拟机 | hypervisor，且需 CPU 暴露 |

只开 Windows 功能不开固件开关，得到的报错不会告诉你"是固件"。

## 检查操作系统看到了什么

```powershell
Get-CimInstance Win32_Processor | Select-Object Name,VirtualizationFirmwareEnabled,VMMonitorModeExtensions

systeminfo | Select-String 'Hyper-V'

Get-ComputerInfo -Property HyperVRequirement* | Format-List
```

CPU 支持虚拟化但显示 `VirtualizationFirmwareEnabled : False`，就是固件开关没开——这是"Hyper-V 起不来"最常见的原因。

## 检查 Windows 功能

```powershell
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All |
  Select-Object FeatureName,State
Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform |
  Select-Object FeatureName,State
Get-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform |
  Select-Object FeatureName,State
```

- `VirtualMachinePlatform` 是 WSL2 需要的。
- `HypervisorPlatform` 是第三方 hypervisor 用的。
- Hyper-V 与第三方 hypervisor 争用同一批 CPU 特性；同时跑可能被迫走更慢的 API 路径。

## 来宾看到什么，取决于宿主

嵌套虚拟化时，来宾只拿到宿主愿意暴露的部分。在 Proxmox 上，CPU 型号很关键：

- `qemu64`（通用默认）**不**暴露 VMX/SVM。
- `--cpu host` 把宿主 CPU 特性（含嵌套虚拟化标志）透传。

**实验观察（E2，M-V）：** 在本站 PVE 实验环境（VM 361，Windows 11 26H2）中，使用默认 `qemu64` CPU 型号启用 WSL2 报 `HCS_E_HYPERV_NOT_INSTALLED`；切到 `--cpu host` 并重启后 WSL2 正常启动。同一份实验记录还显示，以 `SYSTEM` 身份运行 `wsl` 会报 `WSL_E_LOCAL_SYSTEM_NOT_SUPPORTED`——要用交互式用户运行。

这是一台宿主上的一次观察，不是关于所有 hypervisor 的通则；但它展示了你会遇到的失败模式。

## IOMMU 与直通

设备直通需要固件开启 IOMMU、hypervisor 开启直通、且设备独占一个 IOMMU 组。

- 消费级主板上这个选项常叫 `VT-d`、`AMD-Vi` 或 `IOMMU`。
- 开启后设备枚举可能变化；之后要重新核对网卡名。
- 把显卡直通给 Windows 来宾有单独的注意事项。

## 看起来像别的问题的失败模式

| 现象 | 真实原因 |
|---|---|
| `HCS_E_HYPERV_NOT_INSTALLED` | 固件虚拟化关闭，或嵌套未暴露 |
| WSL2 能启动但很慢 | 与别的 hypervisor 争用，或 VBS 开启 |
| Hyper-V 装了但虚拟机起不来 | 缺 SLAT（很老的 CPU）或固件设置 |
| 虚拟机里的虚拟机启动崩溃 | CPU 型号不含嵌套标志 |
| 设备直通失败 | IOMMU 未开，或设备共享 IOMMU 组 |

> **警告: VBS 与第三方 hypervisor**
>
> 内存完整性（HVCI）与 Credential Guard 跑在 Hyper-V hypervisor 上。开着它们时，部分老第三方 hypervisor 和反作弊驱动行为会变。这是兼容性取舍，不是你 CPU 的 bug。

## 端到端验证修复

```powershell
Get-CimInstance Win32_Processor | Select-Object VirtualizationFirmwareEnabled
Get-ComputerInfo -Property HyperVRequirementVirtualizationFirmwareEnabled,HyperVRequirementSecondLevelAddressTranslation
wsl --status
```

不要停在"功能装上了"。启动真实负载（一个 WSL 发行版、一台 Hyper-V 虚拟机）确认能跑——安装成功不等于 hypervisor 可用。

## 相关

- [大小核与调度器](https://winbook.fyi/zh/hardware/cpu/hybrid-cores/)
- [在 Proxmox 上装 Windows 虚拟机](https://winbook.fyi/zh/windows/dev/pve-windows-vm/)
- [内存完整性实测](https://winbook.fyi/zh/windows/gaming/memory-integrity/)

## 实验室边界

E2 仅限上面的嵌套虚拟化观察（单台 PVE 宿主、VM 361）；其余为 E1 的功能与要求语义。没有做裸机固件矩阵测试。

## 来源

- [Microsoft Learn — Hyper-V 宿主硬件要求](https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/host-hardware-requirements)
- [Microsoft Learn — Windows 处理器要求](https://learn.microsoft.com/zh-cn/windows-hardware/design/minimum/windows-processor-requirements)
- [Microsoft Learn — WSL2 概述](https://learn.microsoft.com/zh-cn/windows/wsl/about)

---

来源页面: https://winbook.fyi/zh/hardware/cpu/virtualization-flags/
