2. 虚拟化基础
虚拟化是云计算与数据中心集成的地基。它通过软件抽象层,把物理服务器的 CPU、内存、存储、网络等资源“切分”或“聚合”成多个相互隔离的执行环境,让多个操作系统或应用共享同一套硬件,同时保持彼此独立。理解虚拟化的定义、分类与演进,是掌握 KVM 设备虚拟化与系统集成的前提。
一、虚拟化的核心定义与原理
虚拟化本质上是在硬件与操作系统之间插入一层 Hypervisor(虚拟机监控器),由它负责资源的抽象、调度与隔离。Hypervisor 运行在最高特权级,Guest OS 运行在较低特权级,当 Guest 执行敏感指令时,由 Hypervisor 截获并模拟或直接执行。
虚拟化要解决三个核心问题:
- 资源抽象:把物理 CPU 抽象为 vCPU,把物理内存抽象为 Guest 可见的连续内存空间。
- 隔离性:不同虚拟机之间互不可见、互不干扰,一个 VM 崩溃不影响其他 VM。
- 调度与复用:Hypervisor 按时间片和策略把物理资源分配给多个 VM,提高利用率。
二、虚拟化的分类
按抽象层次和实现方式,虚拟化可分为多种类型。下表从“抽象对象、典型代表、适用场景”三个维度进行对比:
| 分类 | 抽象对象 | 典型代表 | 适用场景 |
|---|---|---|---|
| 全虚拟化 | 完整硬件 | KVM、VMware ESXi | 通用服务器整合 |
| 半虚拟化 | 改造后的硬件接口 | Xen PV | 对 I/O 性能敏感场景 |
| 硬件辅助虚拟化 | CPU 扩展指令 | Intel VT-x、AMD-V | KVM 默认依赖 |
| 操作系统级虚拟化 | 内核命名空间 | Docker、LXC | 轻量应用隔离 |
| 桌面虚拟化 | 桌面会话 | VDI、Citrix | 远程办公 |
| 网络虚拟化 | 网络功能 | OVS、NFV | SDN/云网络 |
其中,Type 1(裸金属) Hypervisor 直接运行在硬件上,如 KVM、ESXi;Type 2(宿主型) 运行在宿主 OS 之上,如 VirtualBox、VMware Workstation。KVM 属于 Type 1,但以 Linux 内核模块形式存在,兼具裸金属性能与 Linux 生态优势。
三、发展历程:从大型机到云原生
虚拟化并非新概念,其演进大致经历四个阶段:
- 1960s—大型机时代:IBM CP-67/CMS 首次实现多用户共享大型机资源,奠定 Hypervisor 思想。
- 1990s—x86 虚拟化探索:VMware 通过二进制翻译实现 x86 全虚拟化,Xen 提出半虚拟化,性能与兼容性成为焦点。
- 2005—硬件辅助虚拟化:Intel VT-x 与 AMD-V 引入根模式/非根模式,KVM 于 2007 年并入 Linux 主线,虚拟化进入内核原生时代。
- 2010s 至今—云与云原生:OpenStack、Kubernetes 推动虚拟机与容器协同,KVM 成为公有云与私有云的主流底座。
四、KVM 在虚拟化技术栈中的定位与优势
KVM(Kernel-based Virtual Machine)是 Linux 内核的一个模块,加载后使 Linux 本身成为一个 Type 1 Hypervisor。它不重复实现调度器、内存管理,而是复用 Linux 内核的 CFS 调度、内存管理、网络协议栈与安全模块,因此代码量小、性能损耗低。
KVM 技术栈自下而上可概括为:
- 硬件层:支持 VT-x/AMD-V 的 CPU、IOMMU、SR-IOV 网卡。
- 内核层:KVM 模块 + Linux 内核(调度、内存、VFS、Netfilter)。
- 用户态层:QEMU 负责设备模拟,libvirt 提供统一管理 API。
- 管理层:virsh、virt-manager、OpenStack Nova、oVirt。
KVM 的主要优势包括:
- 内核原生:随 Linux 主线发布,无需额外 Hypervisor,减少维护成本。
- 性能接近物理机:借助硬件辅助虚拟化与 virtio 半虚拟化驱动,I/O 与 CPU 开销低。
- 生态开放:与 QEMU、libvirt、OpenStack、Kubernetes 无缝集成。
- 安全隔离:复用 SELinux、cgroups、命名空间,支持 sVirt 强化。
- 可扩展:支持热迁移、CPU/内存热插拔、嵌套虚拟化、vGPU。
五、典型场景与常见误区
场景示例:某企业将 20 台物理服务器整合为 3 台 KVM 宿主机,每台运行 8~10 个 VM。通过 libvirt 统一管理,配合 virtio 磁盘与网卡,单 VM 网络吞吐可达物理网卡的 80% 以上。
# 查看 KVM 是否启用
lsmod | grep kvm
# 输出示例
kvm_intel 315392 0
kvm 831488 1 kvm_intel
# 使用 virt-install 创建一台 VM
virt-install --name web01 --ram 4096 --vcpus 2 \
--disk path=/var/lib/libvirt/images/web01.qcow2,size=40 \
--network network=default,model=virtio \
--cdrom /iso/CentOS-7.iso
常见误区:
- 误以为“装了 KVM 就自动有虚拟机”——KVM 只提供内核加速,必须配合 QEMU 才能模拟完整设备。
- 忽略硬件辅助虚拟化开关——BIOS 中未开启 VT-x/AMD-V 时,KVM 无法加载或性能骤降。
- 把容器等同于虚拟机——容器共享内核,隔离级别与 VM 不同,不能替代强隔离场景。
- 过度分配 vCPU——vCPU 总数远超物理核数会导致调度争抢,反而降低整体性能。
六、小结与复盘要点
虚拟化通过 Hypervisor 实现资源抽象、隔离与复用;按抽象层次可分为全虚拟化、半虚拟化、硬件辅助、OS 级等类型;其发展从大型机走向云原生。KVM 以内核模块形式实现 Type 1 虚拟化,凭借内核原生、性能优异、生态开放、安全可扩展等优势,成为当前 Linux 环境下设备虚拟化与系统集成的首选底座。掌握 KVM 与 QEMU、libvirt 的分工,是后续设备直通、virtio 优化与云平台集成的关键起点。