KVM命令--优化篇(2)

1- 为什么要调优

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

2- 优化

2.1- cpu

___ 考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机CPU的总数目。如果超过,则将对性能带来严重影响,建议选择复制主机CPU配置。

2.2- 内存

2.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)

cat /sys/kernel/mm/ksm/run  //是否开启KSM,0是不开启,1是开启
echo 1 > run    //临时开启KSM,只能使用重定向,不支持VI编辑器
vi /etc/rc.local        //添加echo 1 > /sys/kernel/mm/ksm/run,让KSM开启自启

cat /sys/kernel/mm/ksm/pages_to_scan   //定期扫描相同页,sleep_millisecs决定多长时间,
pages_to_scan决定每次查看多少个页面,默认为100,越大越好,超过2000无效,
需要开启两个服务ksmtuned和tuned支持更过页面

2.2.2- 对内存设置限制

___ 有多个虚拟机,为了防止某个虚拟机无节制地使用内存资源,导致其他虚拟机无法正常使用,就需要对内存的使用进行限制。
___ 如果我们有多个虚拟机,为了防止某个虚拟机无节制地使用内存资源,导致其他虚拟机无法正常使用,就需要对内存的使用进行限制。

virsh memtune vm_name ##查看虚拟机内存限制,单位为KB
hard_limit  :   unlimit  ## 强制最大内存
soft_limit  :   unlimit  ## 可用最大内存
swap_hard_limit : unlimit  ## 强制最大swap使用大小

例如:
virsh memtune vm_name --hard-limit 1024000 --live   //设置强制最大内存并且在线生效

2.2.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 ## 查看内存信息,无可用最大页
AnonHugePages: 292864 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages:Surp: 0

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

cat /proc/meminfo ## 查看内存信息,无可用最大页
AnonHugePages: 292864 kB
HugePages_Total: 510
HugePages_Free: 510
HugePages_Rsvd: 0
HugePages:Surp: 0

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

2.2.4- I/O的优化

___ 为了避免过度消耗磁盘资源而对其他的虚拟机造成影响,我们希望每台虚拟机对磁盘资源的消耗是可以控制的。比如多个虚拟机往硬盘中写数据,谁可以优先写,就可以调整I/O的权重weight,权重越高写入磁盘的优先级越高。
___ 对磁盘I/O控制有两种方式:
1 在整体中的权重,范围在100~1000。
2 限制具体的I/O.

virsh blkiotune vm_name ##查看vm_name的I/O参数
weight  : 0
virsh blkiotune vm_name --weight 500    ##设置权重为500
virsh blkiotune vm_name     ##再次查看
weight  : 500

virsh edit vm_name ##也可编辑虚拟机的XML配置文件
<blkiotune>
   <weight>500</weight>
</blkiotune>

2.2.5- 系统调优工具tuned/tuned-adm

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

yum install tuned -y #安装和启动tuned工具
systemctl start tuned
tuned-adm active  ##查看当前优化方案
Current active profile: virtual-guest  ##最佳级别,无需优化

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

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

原文地址:https://www.cnblogs.com/lemanlai/p/12356174.html

时间: 2024-10-08 08:38:38

KVM命令--优化篇(2)的相关文章

KVM命令集与优化

(一)使用KVM命令集管理虚拟机 1:KVM基本功能管理 (1)查看命令帮助 [[email protected] ~]# virsh -h virsh [options]... [<command_string>] virsh [options]... <command> [args...] .../省略部分内容 2:查看KVM的配置文件存放目录 [[email protected] ~]# ls /etc/libvirt/qemu CentOS7.4-x86_64.xml ne

kvm性能优化方案

kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介绍cpu之前,必须要讲清楚numa的概念,建议先参考如下两篇文章 CPU Topology 玩转cpu-topology 查看cpu信息脚本: #!/bin/bash # Simple print cpu topology # Author: kodango function get_nr_proc

画图工具之优化篇

import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 1.新建一个LoginListener事件处理类, * 该类实现M

Centos6.5 x86_64系统安装kvm虚拟机—基础篇

KVM简介: KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机). 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案. 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko). KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面. KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,

nginx优化篇之Linux 内核参数的优化

原博客地址(欢迎访问):http://www.loveyqq.tk/blog/2014/05/27/nginxyou-hua-pian-zhi-linux-nei-he-can-shu-de-you-hua/ 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,使得Nginx可以拥有更高的性能. 在优化内核时,可以做的事件很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态Web内容服务器.反向代理服

浮躁时代的安静角落——《Linux大棚命令百篇》

曾几何时,急功近利.揠苗助长之风吹遍了整个互联网行业,孜孜不倦.循序渐进技术博客Linux大棚成了这个浮躁时代的安静角落,博主多年如一日的积累汇聚成了一本<Linux大棚命令百篇>. 与适合作为系统学习的教材的<循序渐进Linux>不同,<Linux大棚命令百篇>的最大特点就是取材于Linux大棚,以博客系列文章的形式组织全书,在文风轻松生动.诙谐风趣的同时又不失知识的结构化和系统化,不但可以作为案头书,也能在欧阳修的"三上"像读小说一样阅读. 本书

基础命令引导篇

引 入 学好Linux,熟练操作基础命令是前提,常用基础命令更是必须得深深记入脑海里.下面,就是我的Linux基础命令引导篇,引导我记录下用过的基础命令. 目 录 优雅一句,带你遨游Linux命令的海洋: A              A year from now, you will wish you had started today.                                       B                                      C

Linux常用命令-入门篇(一)

1    For循环 语法:begin for i in reverse 1..10 loop insert into users values(i,'奥巴马'): end loop: end; 注意:循环变量 i 是隐含增加的,所以无法看到 2    goto语句 goto 语句用于跳转到特定的位置去执行语句.由于goto语句会减少程序的可读性,所以一般情况下 不建议使用goto语句 3    null语句 null语句不会执行任何操作,但是可以增加程序的可读性 4    创建返回值是一个结果

Juniper老司机经验谈(SRX防火墙优化篇)视频课程上线了

大家在QQ群.论坛里经常提的问题,许多人对SRX双机不是很理解,实际工作中碰见太多问题,惹出了少少麻烦. 针对这个我录制了一个Juniper老司机经验谈(SRX防火墙优化篇)视频课程,上线了.只有9块钱,象征性收费,几天卖出了50多份. 主要内容如下: 1 juniper模拟器使用(windows篇) [免费观看] 40分钟 本章节介绍windows环境下,juniper模拟器的部署.为学习实验做好准备. 2 juniper模拟器使用(MAC篇) 17分钟 本章节介绍在MAC BOOK下,jun