KVM 核心概念
KVM(Kernel-based Virtual Machine)是 Linux 内核中的虚拟化模块,把 Linux 本身变成一个 Type-1 Hypervisor。
关键点:
- 不是独立程序
- 是 内核模块
- 依赖 CPU 硬件虚拟化(VT-x / AMD-V)
硬件 (CPU / Memory / NIC / Disk)
└── Linux Kernel
├── KVM 模块(kvm.ko / kvm_intel.ko / kvm_amd.ko)
├── 内存管理 / 调度 / NUMA
└── QEMU(用户态进程)
└── 虚拟机(Guest OS)
各组件职责
| 组件 | 作用 |
|---|---|
| KVM | CPU / 内存虚拟化 |
| QEMU | 设备模拟(磁盘、网卡、显卡) |
| libvirt | 管理 API(VM 生命周期) |
| virtio | 半虚拟化设备驱动 |
核心依赖
- Intel VT-x
- AMD-V
执行机制
- Guest CPU 指令 -> VMX 模式
- 特权指令 -> Trap -> Host 处理
👉 性能接近裸机
地址转换
Guest Virtual Address
-> Guest Physical Address
-> Host Physical Address
关键技术
| 技术 | 说明 |
|---|---|
| EPT / NPT | 二级页表 |
| HugePage | 减少 TLB miss |
| Balloon | 内存回收 |
| NUMA | 内存亲和 |
三种模式
| 模式 | 特点 |
|---|---|
| 全虚拟化 | 模拟真实硬件(慢) |
| 半虚拟化 | virtio(主流) |
| 直通 | PCI Passthrough / SR-IOV |
KVM ≠ QEMU
- KVM:内核模块,负责执行
- QEMU:用户态进程,负责设备
没有 KVM
QEMU -> 纯模拟 -> 很慢
有 KVM
QEMU + KVM -> 硬件辅助 -> 高性能
libvirt 是 KVM 的“控制面”
能做什么
- 创建 / 启动 / 停止 VM
- 网络 / 存储池管理
- XML 配置抽象
常见 URI
| URI | 场景 |
|---|---|
| qemu:///system | 生产 |
| qemu:///session | 测试 |
VM -> virbr0 -> NAT -> 外网
- 简单
- 性能一般
- 不适合生产
VM ─┐
├─ br0 ── 物理网卡 ── 外网
Host┘
- VM 与宿主同网段
- 性能好
- K8S / OpenStack 必用
- VXLAN
- SDN
- OpenStack / Kubernetes
| 类型 | 场景 |
|---|---|
| 文件(qcow2) | 测试 |
| LVM | 生产 |
| Ceph RBD | 云平台 |
| NFS | 简单共享 |
qcow2 特点
- 支持快照
- 写时复制
- 性能略低于 raw
system vs session
| 模式 | 权限 |
|---|---|
| system | root / libvirt 组 |
| session | 当前用户 |
安全机制
- SELinux
- cgroup
- namespace
- sVirt
| 对比 | KVM | Xen | ESXi |
|---|---|---|---|
| 类型 | 内核 | 裸金属 | 裸金属 |
| 生态 | 最强 | 下降 | 商业 |
| 云厂商 | 主流 | 少 | 少 |
- 私有云(OpenStack)
- 云厂商 IaaS
- Kubernetes 节点
- CI / 测试环境
- 数据库隔离部署
- ❌ KVM 是 Type-2
- ❌ QEMU = KVM
- ❌ virtio 不重要
- ❌ 容器能替代 VM
- ❌ 不需要 NUMA 规划
KVM 是 Linux 内核中的虚拟化能力,依赖硬件辅助,通过 QEMU 模拟设备、libvirt 管理生命周期,性能接近裸机,是云计算的事实标准。
- 1️⃣ KVM 核心原理
- 2️⃣ 网络(Bridge / OVS)
- 3️⃣ 存储(LVM / Ceph)
- 4️⃣ 性能调优(NUMA / HugePage)
- 5️⃣ OpenStack / K8S