本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口优化之外,其它真是无需太多优化。
[root@node01 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo
待进一步学习。
[root@node01 ~]# egrep '(ept|vpid)' --color=always /proc/cpuinfo
fpu_exception : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
fpu_exception : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
kernel进程khugepaged周期性扫描内存, 自动将地址连续可合并的普通4KB page合并为2MB Hugepage,减少page table.该功能针对KVM虚拟化可能有效果,对于一些特殊服务器,例如数据库等可能会起到相反的结果。
CentOS6.5 默认支持透明巨页,参数查看如下:
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
# 参数说明:
never : 关闭
alway : 尽量使用透明内存,扫描内存,有512个4k页面可以整合,就整合成一个2M的页面, 需要使用swap的时候,内存被分割为4k大小.
madvise : 避免改变内存占用
# 建议宿主机、KVM虚拟机均开启THP、EPT ,性能有很大的提升。
其它: 临时关闭THP方式
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
CentOS系统中KSM默认是关闭的
# cat /sys/kernel/mm/ksm/run
0
开启KSM
# echo 1 > /sys/kernel/mm/ksm/run
关闭KSM
# echo 0 > /sys/kernel/mm/ksm/run
virtio半虚拟化I/O设备框架,标准化guest与host之间数据交换接口,简化流程,减少内存拷贝,提升虚拟机I/O效率
writeback :性能好 (小IO不适用)
none :中
writethrough :下(KVM默认)
CentOS6.5 系统中默认采用的是cfq
# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
参数说明,其它几种参数可以尝试。
cfq :perprocess IO queue 较好公平性,较低aggregate throughput
deadline :per-device IO queue 较好实时性,较好aggregate throughput, 不够公平,容易出现VM starvation
可以直接采用如下方式修改:
# echo "noop" > /sys/block/sda/queue/scheduler
# cat /sys/block/sda/queue/scheduler
[noop] anticipatory deadline cfq
参考学习:http://cloud.51cto.com/art/201412/459638_all.htm
参考学习:http://www.netfoucs.com/article/VICTOR1984/89055.html
1)virtio 本系列KVM虚拟机均是采用该模块,windows操作系统需要单独安装驱动kvm虚拟化学习笔记(五)之windows虚拟机性能调整
2) vhost-net 基于virtio框架的虚拟以太网设备。高版本内核才支持。
说明:上面只是列出优化点,有些还需要进一步的实验进行验证。