KVM 性能调优,kvm性能调优


CPU Tuning

Cache share tuning

      对于物理 CPU,同一个 core 的 threads 共享 L2 Cache,同一个 socket 的 cores 共享 L3 cache,所以虚拟机的 vcpu 应当尽可能在同一个 core 和 同一个 socket 中,增加 cache 的命中率,从而提高性能。IBM 测试过,合理绑定 vcpu 能给 JVM 来的 16% 的性能提升。
      实现策略:虚拟机 vcpu 尽可能限定在一个 core 或者一个 socket 中。例如:当 vcpu 为 2 时,2 个 vcpu 应限定在同一个 core 中,当 vcpu 大于 2 小于 12 时,应限定在同一个 socket 中。

<vcpu placement='static' cpuset='0-5'>1</vcpu>       # cpuset 限定 vcpu

NUMA tuning

    网易运维团队测试得出:2 个 vcpu 分别绑定到不同 numa 节点的非超线程核上和分配到一对相邻的超线程核上的性能相差有 30%~40%(通过 SPEC CPU2006 工具测试)。可见,同一个虚拟机的 vcpu 需限定在同一个 NUMA 节点,并且分配该 NUMA 节点下的内存给虚拟机,保证虚拟机尽可能访问 local memory 而非 remote memory。

 <domain>   ...   <numatune>     <memory mode="strict" placement="static"/>   # placement 为auto 时,只能分配 numad 查询得出的内存     ...   </numatune>   ... </domain>

IRQ tuning

    CPU0 常用于处理中断请求,本身负荷较重。多数物理机默认 CPU0 完全处理 eth0 的 IRQ,eth1 的 IRQ 完全由另一个 CPU 处理,同时 CPU0 处理着大量的 CAL 类型中断。预留 2 个或者 4 个物理 CPU,这些 CPU 和对应网卡中断做绑定,使得其它 CPU 更好更完整的为云主机所用。  

Disk IO Tuning

Disk IO cache Tuning

    kvm 支持多种虚拟机多种 IO Cache 方式:writeback, none, writethrough 等。性能上:writeback > none > writethrough,安全上 writeback < none < writethrough。

<disk type='file' device='disk'>   <driver name='qemu' type='qcow2' cache='none'/>  # cache 可为 writeback, none, writethrough,directsync,unsafe 等   ... </disk>

                  

Disk IO scheduler

cfq 参数调优。

Memory Tuning

关于 zone_reclaim_mode, disable 掉。

/etc/sysctl.conf 
vm.zone_reclaim_mode=0
sysctl -p

关于 swappiness 参数,若 CPU 为 Intel Nehalem 架构,需要配置为 0 ,否则不做修改。

关闭 KVM 内存共享,打开透明大页,能带来 7% 左右性能提升。 

echo 0 > /sys/kernel/mm/ksm/pages_shared echo 0 > /sys/kernel/mm/ksm/pages_sharing echo always > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag

Network IO Tuning

开启 vhost_net 模式。  


参考资料
Tuning KVM for performance
libvirt CPU Tuning
Virtualization Tuning and Optimization Guide
网易 openstack 运维

相关内容