虚拟化把一台物理机变成多台虚拟机,是云计算的根本基础。本文讲清虚拟化的演进、KVM / Xen / Hyper-V 三大方案、以及 SR-IOV / vGPU 等”硬件辅助”技术。
虚拟化的两种类型
graph TB
T1[Type 1 Hypervisor
裸金属]
T1 --> T1A[VMware ESXi]
T1 --> T1B[Microsoft Hyper-V]
T1 --> T1C[Xen]
T1 --> T1D[KVM 也算
跑在 Linux 内核里]
T2[Type 2 Hypervisor
宿主机型]
T2 --> T2A[VMware Workstation]
T2 --> T2B[VirtualBox]
T2 --> T2C[QEMU 用户态]
T2 --> T2D[Parallels]
数据中心只用 Type 1——直接跑在硬件上,性能最优。Type 2 是开发 / 桌面用。
CPU 虚拟化的硬件支持
CPU 虚拟化经历两个阶段:
1 2 3 4 5 6 7 8 9
| 2005 之前:纯软件虚拟化(VMware 早期、Xen para-virt) - 二进制翻译 / 修改客户机 OS - 性能损失 30-50% 2005+:硬件辅助虚拟化 - Intel VT-x(2005) - AMD-V(2006) - 性能损失 < 5% - 客户机 OS 可不修改
|
后续硬件持续增强:
1 2 3 4 5
| EPT / NPT: 第二级页表(地址翻译加速) VPID: TLB 标签(避免 vmexit 刷 TLB) APICv: 中断虚拟化加速 VT-d / IOMMU: IO 设备虚拟化(设备直通) SR-IOV: 网卡 / GPU 单设备多虚机
|
ARM 也有等价:
1 2
| ARM VHE(Virtualization Host Extensions): v8.1 ARM SMMU(System MMU): IOMMU 等价
|
KVM:Linux 内核里的虚拟化
KVM(Kernel-based Virtual Machine)是 Linux 2.6.20(2007)合入的内核虚拟化模块:
graph TB
HW[硬件 CPU + VT-x/EPT]
KVM[KVM 内核模块]
HW --> KVM
QEMU[QEMU 用户态]
KVM --- QEMU
GUEST1[VM 1 GuestOS]
GUEST2[VM 2 GuestOS]
QEMU --> GUEST1
QEMU --> GUEST2
KVM 架构特点:
1 2 3 4 5
| - KVM 模块负责 CPU/内存虚拟化 - QEMU 负责设备模拟(磁盘 / 网卡 / 显卡) - 每个 VM 是一个 QEMU 进程 - VM 内 vCPU 是一个 Linux 线程 - Linux 调度器调度 vCPU
|
KVM + QEMU 的实战
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| apt install qemu-kvm libvirt-daemon-system virt-manager dnf install qemu-kvm libvirt virt-manager
systemctl enable --now libvirtd
virsh list virsh list --all virsh start <vm> virsh shutdown <vm> virsh destroy <vm> virsh dominfo <vm>
virt-install --name=vm1 \ --vcpus=4 --memory=8192 \ --disk size=50 \ --cdrom=ubuntu.iso \ --os-variant=ubuntu24.04 \ --network bridge=br0 \ --graphics vnc
qemu-system-x86_64 -enable-kvm \ -smp 4 -m 8G \ -hda disk.qcow2 \ -netdev user,id=net0 -device virtio-net,netdev=net0
|
KVM 的性能优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| virsh vcpupin vm1 0 4-7
virsh edit vm1
echo 8192 > /proc/sys/vm/nr_hugepages
echo 0 > /sys/kernel/mm/ksm/run
|
virtio:半虚拟化设备
KVM 默认用 virtio——一组半虚拟化设备规范:
1 2 3 4 5 6 7
| virtio-net: 网卡 virtio-blk: 块设备 virtio-scsi: SCSI 控制器 virtio-balloon: 内存膨胀(VM 间动态分配) virtio-fs: 文件系统共享 virtio-gpu: GPU virtio-rng: 随机数生成器
|
virtio 性能比模拟硬件(e1000、IDE)快 10-100 倍。
Xen
Xen 是 2003 年剑桥大学的研究项目,2007 年 Citrix 商业化:
graph TB
HW[硬件]
XEN[Xen Hypervisor
裸金属]
HW --> XEN
DOM0[Dom0
特权 Linux
控制 + 设备驱动]
DOMU1[DomU 1
客户 OS]
DOMU2[DomU 2]
XEN --- DOM0
XEN --- DOMU1
XEN --- DOMU2
Xen 的核心概念:
1 2 3 4 5
| Dom0: 特权域,跑 Linux,提供设备驱动给其他 VM DomU: 非特权域,普通 VM PV: Para-virtualization(半虚拟化),客户 OS 修改过 HVM: Hardware Virtual Machine(全虚拟化) PVH: 混合,HVM + PV 优点
|
Xen 的兴衰
1 2 3 4 5 6 7 8 9 10 11 12 13
| 2007-2015:Xen 是云鼻祖 - AWS EC2 早期全 Xen - Citrix XenServer 企业市场 - 阿里云 / 腾讯云早期也用 Xen 2015+:KVM 全面崛起 - AWS Nitro 弃 Xen 转 KVM 衍生 - 开源社区聚焦 KVM - Xen 主要剩 Citrix 商业产品
2023+:基本边缘化 - 仍有少数嵌入式 / 安全场景 - Xen 项目改名 Xen Hypervisor,Linux Foundation 下
|
Xen 已不是数据中心主流——除非有历史包袱,新建系统不上 Xen。
VMware ESXi
VMware 是 1998 年成立的虚拟化老厂,ESXi 是其裸金属 Hypervisor:
1 2 3 4 5 6 7 8 9 10 11
| ESXi: 裸金属 Hypervisor vSphere: ESXi + vCenter(管理面) NSX: 网络虚拟化 vSAN: 存储虚拟化
商业模式:高端商业,单 socket 订阅 license
2023:Broadcom 收购 VMware($610 亿) - 大幅涨价 + 转订阅制 - 中小客户大量逃离 - 国产 / 开源替代加速
|
VMware 当前问题:
1 2 3 4
| 1. Broadcom 收购后涨价 200-300% 2. 永久 license 取消,全转订阅 3. 中小企业开始迁出(Proxmox / OpenStack / 国产) 4. 国产虚拟化(深信服、新华三 H3C UIS、华为 FusionCompute)替代加速
|
待补充:VMware 客户流失数据 / 国产替代迁移规模。
Microsoft Hyper-V
Microsoft 自家 Hypervisor:
1 2 3 4 5 6 7 8 9 10
| Windows Server Hyper-V: 企业级 Azure Hypervisor: 云上变体 Hyper-V Server: 免费独立版(已停)
特点: - Windows / Linux VM 都支持 - 与 Windows Server 集成 - Azure 云的基础
市场: 主要是 Microsoft 客户和 Azure 云
|
OpenStack:开源云的”操作系统”
OpenStack 不是 Hypervisor 而是云管理平台:
graph TB
CLI[CLI / Web UI]
CLI --> NOVA[Nova
计算 / VM 管理]
CLI --> NEUTRON[Neutron
网络]
CLI --> CINDER[Cinder
块存储]
CLI --> SWIFT[Swift
对象存储]
CLI --> KEYSTONE[Keystone
身份]
CLI --> GLANCE[Glance
镜像]
CLI --> HEAT[Heat
编排]
NOVA --> KVM[KVM / Xen / Hyper-V]
NEUTRON --> OVS[Open vSwitch / OVN]
OpenStack 在中国被广泛使用:
1 2 3 4 5 6
| 华为 FusionCloud / 华为云: OpenStack 衍生 H3C UIS: OpenStack 衍生 深信服超融合: OpenStack 衍生 ZStack: 国产 OpenStack 替代
公有云 / 私有云的"标准"开源平台
|
SR-IOV:硬件虚拟化的”作弊”
SR-IOV(Single Root I/O Virtualization)让一个 PCIe 设备自己变成”多个虚拟设备”:
graph TB
PHY[物理网卡
PF Physical Function]
PHY --> V1[VF 1
Virtual Function]
PHY --> V2[VF 2]
PHY --> V3[VF 3]
PHY --> VN[VF N
最多 256]
V1 -.- VM1[VM 1]
V2 -.- VM2[VM 2]
V3 -.- VM3[VM 3]
每个 VF 在 VM 看来就是独立网卡——绕过 Hypervisor 的软件交换机,直接 DMA。
性能对比:
1 2
| virtio-net: 几 GB/s SR-IOV VF 直通: ~95% 物理性能
|
应用:
1 2 3 4
| - 云裸金属: 每个 VM 一个 VF - 5G 网元: 极致延迟 - HPC: 类似裸金属 - AI 训练 VM: GPU 也要 SR-IOV
|
VFIO 与设备直通
VFIO(Virtual Function I/O)是 Linux 把 PCIe 设备暴露给用户态的框架:
1 2 3 4 5 6 7 8 9
| 应用: - GPU 直通:把整张 H100 给一个 VM - 网卡直通:SR-IOV VF 直通 - 加密卡 / FPGA 直通
要求: - IOMMU 启用(intel_iommu=on / amd_iommu=on) - vfio-pci 驱动绑定 - PCIe ACS 支持(避免 DMA 攻击)
|
1 2 3 4 5 6 7 8 9 10 11
| intel_iommu=on iommu=pt
ls /sys/kernel/iommu_groups/
echo 10de 2330 > /sys/bus/pci/drivers/vfio-pci/new_id
qemu-system-x86_64 -device vfio-pci,host=01:00.0
|
vGPU:GPU 虚拟化
NVIDIA vGPU 让一颗 GPU 多 VM 共享:
graph TB
GPU[NVIDIA GPU
例如 A100]
GPU --> M1[MIG 实例 1]
GPU --> M2[MIG 实例 2]
GPU --> M3[MIG 实例 3]
GPU --> M7[MIG 实例 7]
M1 -.- V1[VM 1]
M2 -.- V2[VM 2]
NVIDIA vGPU 两种模式:
1 2 3 4 5 6 7 8 9 10
| Time-slicing(vGPU 软件): - 多 VM 时间片轮转用 GPU - 软件许可(需要 NVIDIA Grid 订阅) - 适合显卡虚拟化(VDI)
MIG(Multi-Instance GPU,A100/H100): - 硬件分割 - 每个 MIG 实例独立 SM、L2、显存 - QoS 严格隔离 - 适合 AI 推理 / 多租户
|
A100 / H100 MIG 配置:
1 2 3 4 5 6 7
| A100 80GB 可分: 7× 1g.10gb(最小) 3× 2g.20gb 2× 3g.40gb 1× 7g.80gb(不分)
H100 80GB 类似 A100
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| nvidia-smi -i 0 -mig 1
nvidia-smi mig -lgi nvidia-smi mig -lci
nvidia-smi mig -cgi 9,9,9,9,9,9,9 nvidia-smi mig -cci
nvidia-smi mig -dci nvidia-smi mig -dgi
|
容器 vs 虚拟机
graph TB
subgraph VM["虚拟机栈"]
direction TB
V1[App]
V2[Guest OS]
V3[Hypervisor]
V4[Host OS]
V5[硬件]
V1 --> V2 --> V3 --> V4 --> V5
end
subgraph CN["容器栈"]
direction TB
C1[App]
C2[容器运行时]
C3[Host OS]
C4[硬件]
C1 --> C2 --> C3 --> C4
end
| 维度 |
VM |
容器 |
| 隔离 |
强(硬件级) |
弱(namespace + cgroup) |
| 启动 |
30s-1min |
秒级 |
| 内存占用 |
GB 级 / VM |
MB 级 / 容器 |
| 性能 |
<5% loss |
<1% loss |
| 安全 |
内核漏洞不易跨 |
内核共享,漏洞共担 |
| 用途 |
多租户 / 强隔离 |
微服务 / DevOps |
容器后续单独一篇展开。
微虚拟化 / Firecracker / Kata Containers
容器的安全性弱——业界发明了”轻量虚拟化”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Firecracker(AWS): - 微 VM,启动 125 ms,内存 5 MB - AWS Lambda / Fargate 用 - Rust 实现,攻击面小
Kata Containers: - "VM 包容器" - 看起来是容器,实际是 VM - 安全 + 兼容容器生态 - QEMU / Cloud Hypervisor 后端
Cloud Hypervisor(Intel/AMD/Microsoft): - Rust 实现的轻量 Hypervisor - 替代 QEMU 在某些场景
|
这些”微虚拟化”是 serverless / 多租户 K8s 的关键。
嵌套虚拟化
VM 里跑 VM:
1 2 3 4 5 6 7 8 9 10
| 启用嵌套: modprobe kvm_intel nested=1 或 GRUB: kvm-intel.nested=1
应用: - 云上跑 K8s 节点 + VM 测试 - CI 跑虚拟化测试 - 套娃训练环境
性能: 损失 5-10% / 层
|
Live Migration(在线迁移)
VM 迁移到另一台物理机不停机:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 原理: 1. 标记内存脏页 2. 在线复制内存到目标 3. 反复迭代脏页 4. 暂停 source,复制最后脏页 + 寄存器 5. 启动 destination 停机时间: 50-500 ms(看内存大小和带宽)
要求: - 网络共享存储或镜像迁移 - 网络带宽足够(10G+) - CPU 能力相近(或开 host-passthrough 关)
|
1 2
| virsh migrate --live vm1 qemu+ssh://target-host/system
|
VM Live Migration 在云上是常态——升级宿主机时,把 VM 平滑迁走,租户感知微小。
虚拟化的几个老坑
坑 1:忘记开 VT-x / VT-d
1 2 3 4 5 6 7 8 9
| egrep "vmx|svm" /proc/cpuinfo
ls /dev/kvm lsmod | grep kvm
dmesg | grep -E "DMAR|IOMMU"
|
很多服务器 BIOS 默认不开 VT-d——必须 BIOS 启用。
坑 2:CPU “host” vs “host-model”
1 2 3
| host-passthrough: 完全暴露物理 CPU 特性,性能最好但 Live Migration 受限 host-model: 暴露相近 CPU 模型,可迁移 custom: 指定通用模型("qemu64"),性能损失但兼容性最好
|
云厂家一般用 host-model 折中。
坑 3:内存 ballooning 调过头
1 2 3 4 5
| balloon 让 Hypervisor 在 VM 间动态调内存 但调过头:VM 突然 OOM 建议: - 业务 VM 关闭 balloon - 给定固定内存
|
坑 4:KSM 误用
1 2 3 4 5 6
| KSM(Kernel Same-page Merging): - 多 VM 共享相同内存页 - 节省内存 - 但增加 CPU 开销 + 侧信道风险
延迟敏感场景关: echo 0 > /sys/kernel/mm/ksm/run
|
坑 5:Live Migration 失败
1 2 3 4 5
| 常见原因: 1. CPU 模型不匹配 → host-model 不一致 2. 网络配置不一致 → bridge 名不同 3. 共享存储不可达 → 镜像不在 NFS / Ceph 上 4. 安全策略阻断 → SELinux / AppArmor
|
虚拟化的国产化
1 2 3 4 5 6 7 8
| 华为 FusionCompute: KVM 衍生 + 自家管理 深信服 aSV: KVM 衍生 新华三 H3C CAS / UIS: KVM 衍生 + OpenStack 浪潮 InCloud: KVM 衍生 ZStack: 国产 OpenStack 替代 青云 QingCloud: 自研
VMware 替代浪潮: Broadcom 收购后加速
|
待补充:国产虚拟化产品 2025-2026 在政企的实际部署比例。
虚拟化与云
graph TB
PUB[公有云
AWS/Azure/GCP/阿里/腾讯]
PUB --> NITRO[AWS Nitro
KVM 衍生 + DPU 卸载]
PUB --> AZURE_HV[Azure Hypervisor
Hyper-V 衍生]
PUB --> ALI[阿里神龙
KVM + DPU]
PRIV[私有云]
PRIV --> VMW[VMware vSphere
已被 Broadcom]
PRIV --> OS[OpenStack 系]
PRIV --> CN_OS[国产虚拟化]
公有云 Hypervisor 都是 “KVM 深度定制 + DPU 卸载” 的路线。
一些数字直觉
1 2 3 4 5 6 7 8 9 10 11 12 13
| KVM VM 启动: 30s - 1min Firecracker μVM 启动: 125 ms Kata Container 启动: ~1 sec
KVM CPU 性能损失: <2% KVM IO 性能损失(virtio):5-15% SR-IOV 网卡: ~95% 性能 GPU 直通: 100% 性能 NVIDIA MIG: 资源严格隔离
VMware vSphere license: $5K-15K / socket(Broadcom 后) KVM + libvirt: 免费 华为 FusionCompute: ¥几万 / 节点
|
小结
- 虚拟化分 Type 1(裸金属)和 Type 2(宿主机),数据中心只用 Type 1
- KVM 是 Linux 内核虚拟化,QEMU 提供设备模拟
- Xen 已边缘化,VMware 被 Broadcom 收购后涨价加速国产化
- SR-IOV 让一个网卡变多 VF,VFIO 让设备直通到 VM
- NVIDIA MIG 是 A100/H100 硬件级 GPU 虚拟化
- Firecracker / Kata 是”轻量虚拟化”,serverless 主流
- Live Migration 是云的核心能力
下一篇讲容器与 K8s——比 VM 更轻、规模更大的”OS 层抽象”。