首页/云/云平台与虚拟化速查/半虚拟化 Paravirtualization
虚拟化基础63 条

半虚拟化 Paravirtualization

半虚拟化让 guest 运行经过改造的内核与驱动,通过 hypercall 与宿主显式协作完成 I/O,避免大量陷入模拟;典型代表是 Xen PV 与 virtio 驱动体系。

云平台与虚拟化速查云更新于 2026-10-13

半虚拟化是什么

半虚拟化让 guest 主动配合虚拟化层:通过 hypercall 与共享环传递 I/O 请求,绕开陷入再模拟的高开销路径。代表实现是 Xen PV 与 virtio 驱动族。它的优势是 I/O 路径更短、上下文切换更少;限制是必须在 guest 内安装对应前端驱动,老系统与不支持的系统需要单独适配,否则收益消失甚至无法启动。

基本信息

核心思想guest 主动配合,hypercall 与共享环通信
代表实现Xen PV、virtio 系列驱动
优势I/O 路径短、上下文切换少、吞吐与 CPU 占用更优
限制需要 guest 侧驱动支持,老系统与异构系统要单独适配
常见设备virtio-net、virtio-blk、virtio-scsi、virtio-balloon

典型使用场景

  • 云主机磁盘与网卡默认使用 virtio,获得接近物理机的 I/O 性能
  • 自建 KVM 环境为虚机配置 virtio 磁盘与网卡
  • 导入外部镜像前确认内部是否已装 virtio 驱动
  • 排查虚机 I/O 慢:确认设备是否走了 virtio 与 vhost 加速
  • 内存弹性场景使用 balloon 驱动回收空闲内存

检查是否在用 virtio 设备

检查是否在用 virtio 设备
lspci | grep -i virtio              # 列出 virtio 设备
lsblk -o NAME,ROTA,SIZE,MOUNTPOINT   # 查看磁盘与挂载情况
ethtool -i eth0 | grep driver        # virtio_net 表示网卡走 virtio
lsmod | grep virtio                  # 确认相关驱动已加载
dmesg | grep -i virtio               # 启动时的设备探测记录

设备与异常表现

设备作用异常表现
virtio-net半虚拟化网卡未启用时退回模拟网卡,吞吐明显偏低
virtio-blk半虚拟化块设备缺驱动时系统盘无法识别
virtio-scsi带 SCSI 语义的存储接入切换总线后老系统看不到磁盘
virtio-balloon内存气球,按需回收内存未启用时宿主无法回收虚机空闲内存
驱动缺失镜像内没装前端驱动导入后启动失败或只能降级运行
现代云平台普遍用 virtio 提升磁盘与网络性能;导入镜像前先确认镜像内已有 virtio 驱动,否则可能起不来。
半虚拟化常与硬件辅助虚拟化配合:CPU 层面走硬件辅助全虚拟化,磁盘与网卡走 virtio 半虚拟化驱动,这种组合在性能与兼容性之间最平衡。

易错点

  • 把物理机镜像直接上传成云主机镜像,缺少 virtio 驱动导致系统盘识别失败
  • 认为半虚拟化必然更快:没有对应前端驱动时收益消失
  • 只换总线类型不装驱动,老系统切换后直接无法启动
  • 诊断性能问题时不看设备类型,忽略了模拟网卡带来的固有损耗

数据来源与参考

  • Linux 内核文档 Documentation/driver-api/virtio
  • Xen Project 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌