KVM 性能优化指南:让虚拟机跑出物理机的性能
这是KVM 虚拟化从入门到实战系列的第 6 篇。虚拟机"能用"只是第一步,生产环境要求"好用、够快"。这篇从 CPU、内存、磁盘、网络四个维度教你调优。
一、CPU 优化
1. 使用 virtio CPU 模型 / 正确配置 vCPU
bash
virsh vcpuinfo vm01 # 查看 vCPU |
virsh setvcpus vm01 8 --live # 热插拔 vCPU |
建议 vCPU 总数不要超过物理 CPU 核数,避免过度订阅导致性能下降。
2. CPU 固定 / 绑定(Pinning)
把虚拟机的 vCPU 绑定到特定物理核,避免上下文切换抖动:
bash
# 编辑虚拟机配置,添加 cpu pinning |
virsh edit vm01 |
# <cputune> |
# <vcpupin vcpu='0' cpuset='0'/> |
# <vcpupin vcpu='1' cpuset='1'/> |
# </cputune> |
3. 启用 CPU 直通(NUMA 场景)
对于计算密集、对延迟敏感的业务(如数据库),可考虑 CPU 直通(--cpu host-passthrough),让虚拟机直接使用宿主 CPU 特性。
二、内存优化
1. 合理设置内存与气球(Balloon)
bash
virsh setmem vm01 8G --live |
virsh setmaxmem vm01 16G --config |
2. 大页内存(HugePages)
大页内存能显著减少 TLB miss,对数据库类应用提升明显:
bash
# 配置大页(2M 页 × 2048 = 4G) |
echo 2048 > /proc/sys/vm/nr_hugepages |
mount -t hugetlbfs hugetlbfs /dev/hugepages |
# 虚拟机配置使用大页 |
virsh edit vm01 |
# <memoryBacking><hugepages/></memoryBacking> |
三、磁盘 I/O 优化(重点)
1. 使用 virtio-blk 半虚拟化驱动
virtio 是 KVM 性能的关键,务必用 virtio 磁盘:
bash
virsh edit vm01 |
# <disk> 中的 bus 改为 'virtio' |
# <target dev='vda' bus='virtio'/> |
virtio 比 IDE/SATA 磁盘性能提升数倍,是磁盘优化的第一要务。
2. 调整 I/O 调度与缓存
bash
# 将虚拟机磁盘缓存设为 none(避免双缓存) |
# <driver name='qemu' type='raw' cache='none'/> |
3. 使用 RAW + 大扇区对齐
RAID 卡和 SSD 场景下,RAW 格式 + 4K 对齐能获得最佳 IOPS。
四、网络优化
1. virtio-net 网络驱动
bash
# 网卡 model 使用 virtio |
virsh edit vm01 |
# <interface type='bridge'> |
# <model type='virtio'/> |
# </interface> |
2. 多队列(Multi-queue)
bash
# 启用网卡多队列,配合多核提升吞吐 |
# <driver name='vhost' queues='4'/> |
五、性能优化清单(快速自查)
| 维度 | 优化项 | 优先级 |
|---|---|---|
| CPU | 绑定核、host-passthrough | 高 |
| 内存 | 大页内存 | 高 |
| 磁盘 | virtio + cache=none | 最高 |
| 网络 | virtio + 多队列 | 高 |
小结
性能优化没有银弹,virtio 驱动是最大的性能杠杆,务必优先保证。在此基础上,CPU 绑定、大页内存、RAW 磁盘能进一步榨干性能。下一篇介绍快照、克隆与迁移,保障业务的可用性。