当前位置:首页>Linux>KVM 虚拟化深度解析:Linux 最强内核级虚拟机(一)

KVM 虚拟化深度解析:Linux 最强内核级虚拟机(一)

  • 2026-10-11 08:33:49
KVM 虚拟化深度解析:Linux 最强内核级虚拟机(一)

关于操作系统虚拟化,我们在之前的文章中已有多次介绍。相关内容请参考:

无论是商业化成熟度极高的 VMware,还是面向桌面场景的开源工具 VirtualBox,无论运行在 Windows 还是 macOS 平台,它们都有一个共同特点:提供友好的图形化管理界面,易于上手使用。

而在 Linux 生态中,还有一款地位举足轻重、可与 VMware 同台对比的虚拟化方案 ——KVM。它作为 Linux 内核原生的虚拟化模块,本身并不自带图形界面,早期也多以命令行方式进行管理;但在成熟生态的支持下,如今同样拥有丰富的图形桌面工具与 Web 管理平台。


KVM 是什么?

KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是 Linux 内核内置的虚拟化模块,于 2007 年正式合并入 Linux 主线内核(2.6.20 版本)。它是目前全球部署最广泛的开源 Hypervisor 之一。

KVM 的核心思想很简单:把 Linux 内核本身变成一个 Hypervisor。

通过加载 kvm.ko 内核模块,Linux 内核获得了管理虚拟机的能力,并通过 /dev/kvm 字符设备接口将这一能力暴露给用户空间程序(如 QEMU)。每个虚拟机在宿主机上表现为一个普通的 Linux 进程,但实际上运行着完整独立的操作系统。

KVM 的本质定位

维度
说明
类型
Type 1 Hypervisor(裸金属,内核级)
授权
GPL 开源
硬件依赖
需要 CPU 硬件虚拟化支持(Intel VT-x 或 AMD-V)
内核版本
Linux 2.6.20+
主要维护方
Red Hat、IBM、Google 等

KVM 的工作原理

硬件虚拟化扩展

KVM 依赖现代 CPU 的硬件虚拟化扩展:

  • • Intel VT-x(Virtualization Technology for IA-32/64)
  • • AMD-V(AMD Virtualization,也称 SVM)

这些扩展引入了新的 CPU 运行模式:

┌─────────────────────────────────────────────────┐│                  宿主机(Host)                   ││  ┌──────────────────────────────────────────┐   ││  │         VMX Root Mode(特权模式)          │   ││  │   Linux Kernel + KVM 模块在此运行         │   ││  └──────────────────────────────────────────┘   ││  ┌──────────────────────────────────────────┐   ││  │        VMX Non-Root Mode(非特权模式)     │   ││  │   Guest OS(虚拟机操作系统)在此运行       │   ││  └──────────────────────────────────────────┘   │└─────────────────────────────────────────────────┘

当 Guest OS 执行特权指令(如 I/O 操作、修改页表)时,CPU 会自动触发 VM Exit,将控制权交还给 KVM;KVM 处理完毕后执行 VM Entry 将控制权还给 Guest OS。这一切由硬件自动完成,极大降低了软件开销。

KVM 与 QEMU 的协作关系

KVM 本身只负责 CPU 和内存的虚拟化,其他设备(磁盘、网卡、显卡等)的模拟则由 QEMU 完成:

┌─────────────────────────────────────────────────┐│                   Guest OS                       ││          (认为自己在真实硬件上运行)               │└──────────┬───────────────────────┬──────────────┘           │ CPU / 内存访问         │ I/O 设备访问           ▼                       ▼┌──────────────────┐   ┌───────────────────────────┐│   KVM 内核模块    │   │          QEMU             ││  /dev/kvm        │   │  模拟磁盘、网卡、USB 等设备  ││  硬件加速虚拟化   │   │  用户空间进程              │└──────────────────┘   └───────────────────────────┘           │                       │           └───────────┬───────────┘                       ▼           ┌───────────────────────┐           │      物理硬件          │           │  CPU · 内存 · 存储     │           └───────────────────────┘
  • • KVM → 内核模块,提供 CPU/内存硬件加速,性能接近裸机
  • • QEMU → 用户态进程,提供完整的设备模拟,灵活兼容各种硬件

二者合称 KVM/QEMU,是当前 Linux 虚拟化的标准组合。

内存虚拟化

KVM 使用以下技术实现内存虚拟化:

  • • EPT(Extended Page Tables,Intel)/ NPT(Nested Page Tables,AMD):硬件辅助的内存地址转换,Guest 物理地址直接映射到宿主机物理地址,避免软件模拟的性能损耗
  • • KSM(Kernel Samepage Merging):扫描多个虚拟机的内存页,合并相同内容的页,显著降低内存占用
  • • 内存气球(Virtio Balloon):动态调整虚拟机内存分配,宿主机可按需回收或补充内存

KVM 核心技术栈

VirtIO:半虚拟化 I/O

全模拟设备(如 e1000 网卡)性能较差。VirtIO 是专为虚拟化设计的半虚拟化 I/O 框架,Guest OS 知道自己在虚拟机内,使用专用驱动直接与 Hypervisor 通信:

VirtIO 设备
对应功能
virtio-net
高性能虚拟网卡
virtio-blk
虚拟块设备(磁盘)
virtio-scsi
虚拟 SCSI 控制器
virtio-balloon
内存气球驱动
virtio-rng
虚拟随机数生成器
virtio-gpu
虚拟显卡

VirtIO 设备相比全模拟设备,网络和磁盘性能可提升 3~10 倍。

VFIO:设备直通

VFIO(Virtual Function I/O)允许将物理设备(如 GPU、NVMe SSD、RDMA 网卡)直接分配给虚拟机,绕过软件模拟层,实现接近裸机的 I/O 性能。典型应用:

  • • GPU 直通(用于虚拟机内的 AI 推理、图形渲染)
  • • 高速网卡直通(用于低延迟网络)
  • • NVMe SSD 直通(用于高 IOPS 存储)

SR-IOV:网卡虚拟化

SR-IOV(Single Root I/O Virtualization)允许一张物理网卡虚拟出多个 VF(Virtual Function),每个 VF 独立分配给一个虚拟机,实现硬件级的网络隔离和高性能。

嵌套虚拟化(Nested KVM)

KVM 支持在虚拟机内部再运行 KVM,即 L1 Guest 可以作为宿主机再启动 L2 Guest。常用于:

  • • 云平台上测试 KVM 配置
  • • CI/CD 中测试 Kubernetes 集群
  • • 开发和验证虚拟化相关代码

启用方法:

# Intel CPUecho "options kvm-intel nested=1" > /etc/modprobe.d/kvm.conf# AMD CPUecho "options kvm-amd nested=1" > /etc/modprobe.d/kvm.conf

KVM 管理工具生态

工具层级结构

┌─────────────────────────────────────────────────┐│          上层管理平台                             ││   oVirt · Proxmox VE · OpenStack · CloudStack   │├─────────────────────────────────────────────────┤│          中层管理工具                             ││     libvirt(API) · virsh · virt-manager       │├─────────────────────────────────────────────────┤│          底层运行时                               ││            QEMU / KVM                           │├─────────────────────────────────────────────────┤│          Linux 内核                              ││           kvm.ko / kvm-intel.ko                 │└─────────────────────────────────────────────────┘

常用工具说明

libvirt — 虚拟化管理的统一抽象层

libvirt 提供了一套与底层 Hypervisor 无关的 API,支持 KVM、Xen、VMware 等多种后端,是大多数管理工具的基础依赖。

virsh — 命令行管理工具

# 列出所有虚拟机virsh list --all# 启动虚拟机virsh start myvm# 优雅关闭virsh shutdown myvm# 强制关闭virsh destroy myvm# 查看虚拟机信息virsh dominfo myvm# 热添加 vCPUvirsh setvcpus myvm 4 --live# 创建快照virsh snapshot-create-as myvm snap1 "before upgrade"

virt-install — 命令行创建虚拟机

virt-install \  --name ubuntu24 \  --ram 4096 \  --vcpus 4 \  --disk path=/var/lib/libvirt/images/ubuntu24.qcow2,size=50 \  --os-variant ubuntu24.04 \  --network bridge=virbr0,model=virtio \  --graphics vnc \  --cdrom /iso/ubuntu-24.04-server.iso

virt-manager — 图形化管理界面,适合桌面环境快速创建和管理虚拟机。

Proxmox VE(PVE)— 开源企业级虚拟化(对标 VMware ESXi),KVM + WebUI + 集群 + 存储 + 备份 一体化平台。

oVirt—— 企业级开源(红帽 RHEV 开源版,对标VMware vCenter),大规模集群、HA、热迁移、存储 / 网络虚拟化。


磁盘镜像格式

KVM 支持多种磁盘镜像格式,最常用的是 qcow2:

格式
特点
适用场景
qcow2
支持快照、压缩、加密,动态扩容
开发测试、生产首选
raw
最简单,性能最佳,无额外功能
对性能要求极高的场景
vmdk
VMware 格式,兼容性好
迁移 VMware 虚拟机
vhd/vhdx
Hyper-V 格式
迁移 Windows 虚拟机

常用 qcow2 操作:

# 创建 50GB qcow2 镜像qemu-img create -f qcow2 myvm.qcow2 50G# 查看镜像信息qemu-img info myvm.qcow2# 在线扩容(先扩镜像,再扩分区)qemu-img resize myvm.qcow2 +20G# 压缩镜像qemu-img convert -O qcow2 -c myvm.qcow2 myvm-compressed.qcow2

KVM 网络模式

NAT 模式(默认)

虚拟机通过宿主机 NAT 访问外网,外网无法直接访问虚拟机。适合桌面开发测试环境。

Bridge 桥接模式

虚拟机直接接入宿主机所在的物理网络,获得独立 IP,与宿主机处于同一子网。适合服务器生产环境。

# 创建网桥(以 Ubuntu 为例)nmcli connection add type bridge ifname br0nmcli connection add type bridge-slave ifname eth0 master br0nmcli connection up bridge-br0

MacVTap / SR-IOV 模式

高性能场景下,通过 MacVTap 或 SR-IOV 直接将物理网卡的虚拟功能分配给虚拟机,绕过软件网桥,大幅降低网络延迟。


性能调优要点

CPU 调优

# 查看支持的 CPU 型号virsh cpu-models x86_64# 推荐使用 host-passthrough(将宿主机 CPU 特性完整透传)<cpu mode='host-passthrough' check='none'/># CPU 亲和性绑定(将 vCPU 绑定到指定物理核心)virsh vcpupin myvm 0 2virsh vcpupin myvm 1 3

内存调优

<!-- 开启大页内存(减少 TLB Miss) --><memoryBacking>  <hugepages/></memoryBacking>

磁盘调优

<!-- 使用 virtio-scsi + writeback 缓存策略 --><disk type='file' device='disk'>  <driver name='qemu' type='qcow2' cache='writeback' io='native'/>  <target dev='vda' bus='virtio'/></disk>

KVM 在云平台的应用

KVM 是主流公有云和私有云的底层支柱:

云平台 / 产品
KVM 应用方式
阿里云 ECS
基于 KVM + 自研虚拟化增强
腾讯云 CVM
KVM 架构,搭配自研网络加速
AWS EC2
从 Xen 迁移至 KVM(Nitro 系统)
OpenStack
默认 Compute 后端(Nova + KVM)
Proxmox VE
KVM + LXC 双引擎开源平台
oVirt
Red Hat 主导的 KVM 企业管理平台

AWS 的 Nitro Hypervisor 尤其值得关注:它是基于 KVM 深度定制的轻量 Hypervisor,将大量 I/O 虚拟化卸载到专用硬件芯片,使 EC2 实例能获得接近裸机的网络和存储性能。


KVM vs 竞争对手

对比维度
KVM
VMware vSphere
Xen
Hyper-V
授权费用
免费开源
商业收费
免费开源
包含于 Windows Server
与 Linux 集成
原生内置
需单独安装
需单独安装
差
生态工具链
丰富(libvirt 等)
非常完善
一般
一般
企业支持
Red Hat、SUSE 等
Broadcom
XenServer
Microsoft
云平台采用
主流(阿里/腾讯/AWS)
私有云主流
逐渐减少
Azure 底层
嵌套虚拟化
支持
有限支持
支持
支持

快速上手:5 分钟部署第一个 KVM 虚拟机

第一步:检查硬件支持

# 检查 CPU 是否支持虚拟化egrep -c '(vmx|svm)' /proc/cpuinfo# 输出 > 0 表示支持# 检查 KVM 模块是否已加载lsmod | grep kvm

第二步:安装 KVM 及工具链

# Ubuntu / Debiansudo apt install -y qemu-kvm libvirt-daemon-system \    virtinst virt-manager bridge-utils# CentOS / RHEL / Rocky Linuxsudo dnf install -y qemu-kvm libvirt virt-install \    virt-manager bridge-utils# 启动 libvirtd 服务sudo systemctl enable --now libvirtd# 将当前用户加入 libvirt 组sudo usermod -aG libvirt $USER

第三步:创建虚拟机(系统镜像文件需要提前上传至宿主机中)

virt-install \  --name myserver \  --ram 2048 \  --vcpus 2 \  --disk path=/var/lib/libvirt/images/myserver.qcow2,size=20,format=qcow2 \  --os-variant ubuntu22.04 \  --network network=default,model=virtio \  --graphics none \  --console pty,target_type=serial \  --location /tmp/ubuntu-22.04-server.iso \  --extra-args 'console=ttyS0,115200n8'

第四步:基本管理操作

virsh list --all          # 查看所有虚拟机virsh start myserver      # 启动 myserver 这台虚拟机virsh console myserver    # 连接控制台virsh shutdown myserver   # 关机virsh snapshot-create-as myserver snap-init  # 创建快照

写在最后

KVM 凭借其与 Linux 内核的原生集成、优秀的性能表现和丰富的开源生态,已成为企业虚拟化和云计算基础设施的首选方案。无论是搭建个人实验室、部署私有云,还是理解公有云底层机制,掌握 KVM 都是每一位 Linux 用户的必修课。

相关资源列表:

  • • https://github.com/virt-manager/virt-manager
  • • https://www.linux-kvm.org
  • • https://www.qemu.org
  • • https://libvirt.org
  • • https://www.proxmox.com
  • • https://www.ovirt.org

未完待续,敬请期待~

💬 欢迎在评论区留下你的真知灼见~

最新文章

随机文章