一、KVM为什么要调优

性能的损耗是关键。KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化。
KVM性能优化主要在CPU、内存、I/O这几方面。当然对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。

二、KVM优化思路及步骤

KVM的性能已经很不错了,但还有一些微调措施可以进一步提高KVM的性能
1、CPU的优化
要考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机CPU的总数目。如果超过,则将对性能带来严重影响,建议选择复制主机CPU配置。
2、内存的优化
(1)KSM(Kernel Samepage Merging,相同页合并)
内存分配的最小单位是page(页面),默认大小是4KB,可以将host机内容相同的内存合并,以节省内存的使用,特别是在虚拟机操作系统都一样的情况下,肯定会有很多内容相同的内存值,开启了KSM,则会将这些内存合并为一个,当然这个过程会有性能损耗,所以开启与否,需要考虑使用场景。
而KSM对KVM环境有很重要的意义,当KVM上运行许多相同系统的客户机时,客户机之间将有许多内存页是完全相同的,特别是只读的内核代码页完全可以在客户机之间共享,从而减少客户机占用的内存资源,能同时运行更多的客户机。
KSM会稍微影响系统性能,以效率换空间,如果系统的内存很宽裕,则无须开启KSM,如果想尽可能多地并行运行KVM客户机,则可以打开KSM。
ll /sys/kernel/mm/ksm/ //查看内核信息

pages_shared合并的页面数
pages_sharing 正在共享单个页面的虚拟页面数
page_unshared 作为共享候选者但当前未共享的页数
page_volatile 作为共享候选者但频繁更改的页数,KSM服务不会合并这个页面
full_scan 为重复内容扫描KSM的次数
merge_across_nodes 是否允许在NUMA节点中执行合并
pages_to_scan 一次扫描的页数,该数字会影响系统性能
sleep_milisecs 扫描之间的时间间隔
每个页面的大小为4KB,可计算出共享内存为:4页面数=内存大小(KB)

cd /sys/kernel/mm/ksm/
cat run //是否开启KSM,0是不开启,1是开启
echo 1 > run //临时开启KSM,只能使用重定向,不支持VI编辑器
vi /etc/rc.local //添加echo 1 > /sys/kernel/mm/ksm/run,让KSM开启自启
cat pages_to_scan //定期扫描相同页,sleep_millisecs决定多长时间, pages_to_scan决定每次查看多少个页面,默认为100,越大越好,超过2000无效, 需要开启两个服务ksmtuned和tuned支持更过页面

(2)对内存设置限制
如果我们有多个虚拟机,为了防止某个虚拟机无节制地使用内存资源,导致其他虚拟机无法正常使用,就需要对内存的使用进行限制。
virsh memtune c01 //查看当前虚拟机c01内存的限制,单位为KB

virsh memtune --help

virsh memtune c01 --hard-limit 1024000 --live   //设置强制最大内存并且在线生效
virsh memtune c01 //查看


(3)大页后端内存(Huge Page Backed Memory)
在逻辑地址向物理地址转换时,CPU保持一个翻译后备缓冲器TLB,用来缓存转换结果,而TLB容量很小,所以如果page很小,TLB很容易就充满,这样就容易导致cache
miss,相反page变大,TLB需要保存的缓存项就变少,就会减少cache
miss。通过为客户机提供大页后端内存,就能减少客户机消耗的内存并提高TLB命中率,从而提升KVM性能。
Intel的x86 CPU通常使用4KB内存页、但是经过配置,也能够使用大页(huge page): x86_32是4MB,x86_64和x86_32 PAE是2MB,这是KVM虚拟机的又一项优化技术。
使用大页,KVM的虚拟机的页表将使用更少的内存,并且将提高CPU的效率。
cat /proc/meminfo //查看内存信息,无可用大页

echo 25000 > /proc/sys/vm/nr_hugepages //指定大页需要的内存页面数量(临时生效)

sysctl -w vm.nr_hugepages=25000     //指定大页需要的内存页面数永久生效
或者在/etc/sysctl.conf中添加vm.nr_hugepages=2500来持久设定大页文件系统需要的内存页面数。

注意:大页文件系统需要的页面数可以由客户机需要的内存除以页面大小来大体估计。

virsh destroy c01   //删除原有的域
virsh edit c01 //编辑虚拟机的XML配置文件使用大页来分配内存


mount -t hugetlbfs /dev/hugepages/  //挂载hugetlbfs文件系统
systemctl restart libvirtd.service
virsh start c01 //开启虚拟机
cat /proc/meminfo | grep HugePage //查看

virsh destroy c01   //再次删除
cat /proc/meminfo | grep HugePage //再次查看,发现大页被释放


3、I/O的优化
在实际的生产环境中,为了避免过度消耗磁盘资源而对其他的虚拟机造成影响,我们希望每台虚拟机对磁盘资源的消耗是可以控制的。比如多个虚拟机往硬盘中写数据,谁可以优先写,就可以调整I/O的权重weight,权重越高写入磁盘的优先级越高。
对磁盘I/O控制有两种方式
(1)在整体中的权重,范围在100~1000。
(2)限制具体的I/O。
virsh blkiotune c01 //查看c01的I/O参数

virsh blkiotune c01 --weight 500    //设置权重为500
virsh blkiotune c01 //再次查看


virsh edit c01 //也可编辑虚拟机的XML配置文件

virsh blkiotune --help //查看使用帮助

4、系统调优工具tuned/tuned-adm
CentOS在6.3版本以后引入了一套新的系统调优工具tuned/tuned-adm,其中,tuned是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系统设置,达到动态优化系统的目的;tuned-adm是客户端程序,用来和tuned打交道,用命令行的方式管理和配置tuned/tuned-adm,提供了一些预先配置的优化方案可供直接使用。当然不同的系统和应用场景有不同的优化方案,tuned-adm预先配置的优化策略不是总能满足要求,这时候就需要定制,tuned-adm允许用户自己创建和定制新的调优方案。

yum install tuned -y    //安装和启动tuned工具
service tuned start
tuned-adm active //查看当前优化方案


tuned-adm list //查看预先设定好的优化方案

tuned-adm profile virtual-host //修改优化方案为virtual-host

著作权归作者所有:来自51CTO博客作者挨踢渣渣的原创作品,如需转载,请注明出处,否则将追究法律责任
 
COME FROM:https://blog.51cto.com/13871362/2350104

KVM性能优化的更多相关文章

  1. KVM总结-KVM性能优化之网络性能优化

    前面已经介绍了KVM CPU优化(http://blog.csdn.net/dylloveyou/article/details/71169463).内存优化(http://blog.csdn.net ...

  2. KVM性能优化学习笔记

    本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...

  3. OpenStack入门篇(五)之KVM性能优化及IO缓存介绍

    1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空 ...

  4. KVM总结-KVM性能优化之磁盘IO优化

    前面讲了KVM CPU(http://blog.csdn.net/dylloveyou/article/details/71169463).内存(http://blog.csdn.net/dyllov ...

  5. KVM总结-KVM性能优化之内存优化

    我们说完CPU方面的优化(http://blog.csdn.net/dylloveyou/article/details/71169463),接着继续第二块内容,也就是内存方面的优化.内存方面有以下四 ...

  6. KVM总结-KVM性能优化之CPU优化

    前言 任何平台根据场景的不同,都有相应的优化.不一样的硬件环境.网络环境,同样的一个平台,它跑出的效果也肯定不一样.就好比一辆法拉利,在高速公路里跑跟乡村街道跑,速度和激情肯定不同… 所以,我们做运维 ...

  7. 2017版:KVM 性能优化之内存优化

    我们说完CPU方面的优化,接着我们继续第二块内容,也就是内存方面的优化.内存方面有以下四个方向去着手: EPT 技术 大页和透明大页 KSM 技术 内存限制 1. EPT技术 EPT也就是扩展页表,这 ...

  8. KVM性能优化之CPU优化

    前言 任何平台根据场景的不同,都有相应的优化.不一样的硬件环境.网络环境,同样的一个平台,它跑出的效果也肯定不一样.就好比一辆法拉利,在高速公路里跑跟乡村街道跑,速度和激情肯定不同... 所以,我们做 ...

  9. KVM命令--优化篇(2)

    1- 为什么要调优 ___ KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化. ___ KVM性能优化主要在CPU.内存.I/O这几方面.当然对于这几 ...

随机推荐

  1. day-05-字典

    字典的初识 why: 列表可以存储大量的数据,但数据之间的关联性不强 列表的查询速度比较慢.数量越大查询越慢 what:容器型数据类型:dict how: 数据类型的分类(可变与不可变) 可变(不可哈 ...

  2. Python基础(八):字符串的使用(下)

    find() 功能:检测字符串是否包含指定字符.如果包含指定字符,则返回开始的索引:否则,返回-1. >>> st = "hello world" >> ...

  3. OO UNIT 1 个人单元总结

    面向对象课程--第一单元个人总结 作业分析 第一次作业 概要 本次作业主要对简单幂函数的多项式进行求导计算,要点在于对输入字符串的处理,利用正则表达式匹配即可,并且需要对输出表达式的长度进行优化. 度 ...

  4. Java 时间日期系列

    Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(1) Calendar Java Calendar,Date,DateFormat ...

  5. PAT B1038 统计同成绩学生

    读入N名同学的成绩,然后将获得某一给定分数的学生人数输出第一行给出不超过10^5的正整数,即学生总数:第二行给出N名学生的百分制的成绩,中间以空格分隔:第三行给出要查寻的分数个数K,随后是K个分数,中 ...

  6. Java常用工具+类库合集

    1 常用工具 JVisual vm:可以直接通过软件包下载,支持本地以及远程JVM监控 JMH:Java Microbenchmark Harness,测试基准组件,精度可达纳秒级 JITWatch: ...

  7. 死磕Spring之AOP篇 - Spring AOP注解驱动与XML配置

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  8. 记一次linux下安装ftp的愉快体验

    三三两两,试了几次就出来了,挺开心的 linux安装vsftpd,请自行百度 贴出部分配置点 阿里云服务器,开发相关端口以及部分区域端口访问 /etc/pad.d/vsftpd添加部分注释 #%PAM ...

  9. Thinkphp5之ajax分页实现_paginate()参数详细

    Thinkphp5 做数据搜索需要带关键词分页,如何将查询条件带入到分页中,本文详细介绍Thinkphp5 分页带参数 一.基本使用方法: $list = Db::name('user')->w ...

  10. SpringCloud之配置中心(config)的使用Git+数据库实现

    SpringCloud微服务实战系列教程 -------------------------目录------------------------------ 一.配置中心应用(Git) 二.配置中心的 ...