KVM/QEMU虚拟机优化核心是资源匹配、I/O效率与内核协同:CPU需合理分配vCPU并绑定物理核,启用host-passthrough;内存宜用hugepages预分配并禁用balloon;磁盘推荐raw+virtio-blk及native I/O;网络应换用virtio-net多队列。

KVM/QEMU 虚拟机配置优化,核心在于资源匹配、I/O 效率和内核协同——不是堆参数,而是让虚拟机真正“像物理机一样呼吸”。
CPU 与 vCPU 配置:别让虚拟机抢不到时间片
过度分配 vCPU 反而引发调度争抢,尤其在宿主机 CPU 核心数有限时。建议按实际负载设定 vCPU 数量,并绑定到物理核心提升缓存亲和性:
- 用 virsh vcpupin
0 2 将 vCPU 0 绑定到宿主机物理 CPU 2 - 启用 cpu mode='host-passthrough',直接暴露宿主 CPU 特性(需 BIOS 开启 VT-x/AMD-V)
- 对数据库或高并发应用,添加
避免 KVM 模拟开销
内存优化:从 ballooning 到 hugepages
默认的动态内存(ballooning)在压力下响应滞后,且易被 guest 内核误判为内存紧张。更稳的方式是预分配 + hugepages:
- 启动前分配大页:echo 1024 > /proc/sys/vm/nr_hugepages(2MB 页面)
- 在 domain XML 中设置:
- 禁用 balloon 驱动(除非需弹性伸缩):
磁盘 I/O:绕过 host 文件系统瓶颈
使用 qcow2 镜像虽方便快照,但多层元数据叠加会拖慢随机读写。生产环境优先选 raw + virtio-blk:
- 镜像格式转 raw:qemu-img convert -f qcow2 -O raw vm.qcow2 vm.raw
- XML 中指定 driver name='qemu' type='raw' cache='none' io='native'
- 宿主机挂载磁盘时加 noatime,nobarrier(SSD 场景)
网络性能:从 e1000 换成 virtio-net + multiqueue
默认模拟网卡(e1000)吞吐低、中断密集。virtio-net 是半虚拟化标准,配合 multiqueue 可线性扩展:
- XML 中启用:
... - Guest 内核需加载 virtio_net 和 vhost_net 模块
- 在 guest 中执行:ethtool -L eth0 combined 4 开启多队列
不复杂但容易忽略——多数性能问题不出在虚拟化层本身,而出在 guest 与 host 的协同细节里。










