




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 KVM性能优化最佳实践CPU优化最佳实践任何平台根据场景的不同,都有相应的优化。不一样的硬件环境、网络环境,同样的一个平台,它跑出的效果也肯定不一样。就好比一辆法拉利,在高速公路里跑跟乡村街道跑,速度和激情肯定不同.所以,我们做运维工作,也是如此。首先你得充分了解你所用的软件平台,然后根据你现有的生产环境去充分的测试,最后得出结果,做最优的调整。KVM也是一样,首先要做的是充分的了解它,看看有哪些参数和设置我们可以做出调整,最终应用以求发挥最高的性能。那么KVM的性能调优,我们可以从四个方面入手 CPU、内存、磁盘IO、网络。KVM CPU性能调优CPU这块我们是针对NUMA这块的调优,那么
2、什么是NUMA呢?NUMA是英文Non Uniform Memory Access Architecture 的缩写,意思就是非统一内存访问,它是一种解决多CPU共同工作的解决方案。我们知道现在的服务器配置都比较高了,CPU很多都是多路多核的,而且CPU是需要跟存储器进行数据交互的,以往的年代,那时候的CPU运算速率不高,而且都是单CPU模式,那么存储器里的数据要放到CPU里进行运算这是完完全全跟得上的。但是现在的CPU运算速度大大增强了,而且都是多CPU模式,于是就出现了不平衡,那就是存储器里的数据完全不够让CPU消化,并且还会出现多个CPU抢食存储器的情况. 这种情况下CPU就表现得非常的
3、饥渴. 数据不够享用,而且存储器还不够分配。因此计算机科学家为了提升计算机的性能,就认真的研究了下CPU和存储器之间的协调交互模式。总体核心思想就是寻找一个多CPU模式下,如何让CPU能最大化的“享用”更多来自多个存储器的数据。于是就设计出了以下几套解决方案:1.1 SMP技术最开始是SMP技术,SMP(Symmetric Multi-Processing )技术就是对称多处理结构,这种结构的最大特点就是CPU共享所有资源,比如总线,内存,IO系统等等。既然是共享所有的资源,所以,各个CPU之间是平等的关系,然后操作系统管理着这些CPU对资源的访问(通常是用队列的形式去管理)。每个CPU依次的
4、去处理队列中的进程,如果两个CPU同时访问,那么一般是通过软件锁的机制去解决争夺的问题,软件锁这概念跟开发里的线程安全锁机制道理是一样的,当一个CPU处理着一进程,一般会先锁住,处理完再释放。所以说到这里,这里的对称指的就是CPU之间是平等的无主从,访问资源也是平等的。我们可以看下面这张图:这个结构是最早出现的方案,但是就是因为最早出现,所以它的弊端很快就显现出来了,那就是它的扩展能力不强。我们看上面这张图就明显感觉到,如果服务器要提升性能增加CPU,那么内存(内存最大化的情况下)就明显不够了,因为是共享模式,多一个CPU就多一个吃内存数据的人. 因此多增加的CPU没法享受到内存的数据,就会停
5、歇,这样就造成了CPU的浪费。有实验数据表明,SMP型的服务器CPU最好是2-4颗就OK了,多余的就浪费了。由此可见,这种方式是有缺陷的。因此科学家又想到了另外一个结构方案,那就是NUMA。1.2 NUMA技术NUMA刚才我们在前面说了是非统一内存访问的意思,它的出现就很好的解决了SMP的扩展问题。有了NUMA技术那么就可以把几十个甚至上百个CPU组合在一个服务器內。NUMA架构设计图:从图中我们发现,每个CPU模块之间都是通过互联模块进行连接和信息交互,CPU都是互通互联的,同时,每个CPU模块平均划分为若干个Chip(不多于4个),每个Chip都有自己的内存控制器及内存插槽。在NUMA中还
6、有三个节点的概念:本地节点: 对于某个节点中的所有CPU,此节点称为本地节点。邻居节点:与本地节点相邻的节点称为邻居节点。远端节点:非本地节点或邻居节点的节点,称为远端节点。邻居节点和远端节点,都称作非本地节点(OffNode)。这里要注意的是,CPU访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢,此距离称作NodeDistance。正是因为有这个特点,所以我们的应用程序要尽量的减少不通CPU模块之间的交互,也就是说,如果你的应用程序能有方法固定在一个CPU模块里,那么你的应用的性能将会有很大的提升。访问速
7、度:本地节点邻居节点远端节点因此KVM也是一样,我们在CPU优化这块就是要让KVM绑定在指定的CPU上,这样减少跨CPU的交互使用,让KVM的性能提升。现在我们的服务器还有linux操作系统都是默认走NUMA模式,所以我们接下来说说如何去做CPU的绑定。那么具体如何操作?1.3numactl命令讲解我们这里用一台真实的物理机演示,这台物理机的是IBM 3650M4。首先我们用numactl命令查看NUMA的情况,如果你系统没有这个命令,用 yum install numactl 安装下即可。# numactl -h numactl 帮助命令,主要参数如下: -interleave=nodes,
8、 -i nodes 这个选项用于设定内存的交织分配模式。 也就是说系统在为多个节点分配内存空间的时候,将会以轮询分发的方式被分配给这多个节点。如果在当前众多的交织分配内存节点中的目标节点无法正确的分配内存空间的话,内存空间将会由其他的节点来分配。多节点可以通过 -interleave , -membind 和 -cpunodebind 命令来指定。 -membind=nodes, -m nodes 选项 -membind 仅用来从节点中分配内存空间所用。 如果在这些节点中无法分配出所请求的空间大小的话该分配操作将会失败. 上述命令中指定需要分配空间的 nodes 的方式可以遵照上述 N,N,N
9、 , N-N ,N 这种方式来指定. -cpunodebind=nodes, -N nodes 这命令仅用于施加在运行与 cpu 上的进程。这个命令用于显示 cpu 的个数,cpu 数目信息同样记录在系统中的存放处理器领域信息的 /proc/cpuinfo 文件夹下,或者是按照关联的中央处理器信息 在当前的中央处理器集中所存放。 -localalloc, -l 这个命令选项通常是为当前的节点分配内存的。 -preferred=node 该命令由于指定优先分配内存空间的节点,如果无法将空间分配给该节点的话,应该分配给该节点上的空间将会被分发到其他的节点上 。 该命令选项后面仅接收一个单独的节点标
10、号. 相关的表示方式也可以使用。 -show, -s 该命令用于显示 NUMA 机制作用在当前运行的那些进程上。 -hardware, -H 该命令用于显示当前系统中有多少个可用的节点。 -huge 当创建一个基于大内存页面的系统级的共享内存段的时候使用-huge 这个选项,注意这选项仅在 -shmid 或是 -shm 命令的后面使用才有效。 -offset 该参数选项用于指定共享内存段中的位移量的偏移。 默认的情况下偏移量是 0 。 有效的偏移量单位是 m (用于表示 MB) g (用于表示 GB) , k (用于表示 KB ), 其他没有指定的被认为是以字节为单位。 -strict 这个参
11、数选项 当施加了 NUMA 调度机制的共享内存段区域的页面被施加了另一个机制而导致错误的时候,使用 -strict 选项将会把错误信息显示出来. 默认情况是不使用该选项的。 -shmmode shmmode 该选项仅在 -shmid 或是 -shm 之前使用才会生效。 当创建一个共享内存段的时候,通过整型数值来指定共享内存的共享的模式类型。 -shmid id 通过ID 号码来创建或使用一个共享内存段。(如果共享内存段已经存在,那么通过 shmid 来指定下面要使用某个 ID 的共享内存段;如果该 ID 对应的共享内存段并不存在的话,那么就创建一个)。 -shm shmkeyfile 通过存放
12、在 shmkeyfile(共享内存-键文件)中的 ID 号码来创建或者是使用一个共享内存段。访问 shmkeyfile 文件的进程是通过 fork(3 arguments) 方法来实现的。 -file tmpfsfile 将 numa 机制施加于文件上面, 这个文件属于 tmpfs或者是 hugetlbfs 这种特殊的文件系统。 -touch 通过将 numa 机制施加于刚刚页面上来实现内存的早期 numa 化。默认情况下是不使用该选项,如果存在映射或是访问页面的应用的话,将会使用该早期实行 NUMA 机制的这种方法。 -dump 该选项用于废除将已经 numa 化的特定区域上的 NUMA性质
13、. -dump-nodes nodes 所指定的节点以外的所有节点上的 NUMA 特性全都会被移除 all 用于将所有的节点上的 NUMA 特性移除 number 通过指定 node 后接的数值来废除该数字对应的 node number1(number2) node number1(node number2)上的 NUMA 特性将会被移除 number1-number2 node number1 - node number2 区间上的所有存在的 node 的 NUMA 特性将会被移除 !nodes 除了 nodes 所指定的节点以外的所有节点上的 NUMA 特性全都会被移除OK,以上是numa
14、ctl的详细命令,那么接下来我们先看看当前服务器CPU的numa情况:我们执行lscpu命令可以查看到一些CPU信息:我们用numactl -hardware可以查看,如这里我准备了两台IBM的服务器,一个3650M4另外一个是3850M2。我们可以从命令返回的情况看出,这台服务器numa有2个node(node0和node1):我们再看另外一个服务器,这是一台IBM 3850M2,那么它就只有一个node: 通过这个numactl -hardware命令,我们可以看出上面那台机器每个node有81894 MB的内存可以使用(大概79G),而IBM 3850M2这个服务器node有131070
15、MB(120多G)内存可用(基本上是整个服务器的内存)那么接下来我们可以看下cpu numa的调度分配情况:我们运行numastat命令可以查到: 3650M4 3850M2参数解释:numa_hit使用本节点内存次数num_miss计划使用本节点内存而被调度到其他节点次数num_foregin计划使用其他节点内存而使用本地内存次数interleave_hit交叉分配使用的内存中使用本节点的内存次数local_node在本节点运行的程序使用本节点内存次数NB other_node在其他节点运行的程序使用本节点内存次数 接着我们看下这个命令:numastat-c , 这个命令c 后面跟上进程名就
16、能看到相关进程的NUMA内存使用情况。比如:numastat -cqemu-kvm,这样我们就知道了qemu-kvm这个进程,它在node0 和node1上使用的内存大小,单位是MB:OK 通过这几个命令我们可以查看一些numa的基本状态和使用情况。那么针对CPU Numa技术,linux操作系统本身呢也有自身对这块的设计。拿linux来说,它默认使用的就是NUMA自动平衡策略,也就是说,系统会自动的调配numa的内存使用,以求一个平衡。当然,这个设置是可以用户自己控制的,如果我们想关闭,直接运行 # echo0/proc/sys/kernel/numa_balancing 即可 # echo
17、1/proc/sys/kernel/numa_balancing 就是开启1.4 CPU绑定操作说到这,既然我们的操作系统还有CPU特性都采用了NUMA架构,那么我们完全可以通过调整KVM对应的NUMA关系来达到KVM CPU这方面的优化。这里,我们一般是通过CPU绑定的方法来做相关操作的。那么具体的操作是怎么样的呢?那么接下来我们通过一个例子来演示。这里是一台物理机,之前我们看过了,现在上面装好了KVM,然后运行着几个虚拟机,我们用 virsh list 命令可以查看到当前运行的虚拟机列表。比如我们要看这个Win7-ent虚拟机里vCPU对应物理CPU的情况,那么可以运行: # virshv
18、cpuinfoWin7-ent 可以查看 这个虚拟机是2个vCPU 双核的,然后都是跑在了物理机的CPU8上,使用的时间是2964.6s。最后一个是CPU的亲和性,这个yyyyy 表示的是使用的物理CPU内部的逻辑核,一个y就代表其中一个CPU逻辑核。全部是y ,那么说明这台物理机的24个CPU核,这个CPU都能调度使用。当然,我们可以进入vrish ,然后运行emulatorpinWin7-ent, 通过这个命令我们可以更详细的得到这个虚拟机可以用哪几个核:我们可以看到目前这个虚拟机0-23的CPU它都能调度使用那么以上就是查看虚拟机CPU NUMA调度的信息,如果我们要把虚拟机绑定到固定的
19、CPU上,我们就要做以下操作: #virsh emulatorpinWin7-ent18-23-live 通过这个命令,我们把这个win7的虚拟机vCPU绑定在了18-23这6个CPU之间的核上。我们用命令查看下emulatorpinWin7-ent我们也可以用virsh dumpxml Win7-ent 查看确认:这是让虚拟机里的vCPU一起绑定的方法。那么有的人会疑问,一个虚拟机我有两个vCPU, 比如这个win7 ,它就是双核的,我想让里面的vCPU1和vCPU2分别绑定在不同的物理CPU上可以吗?怎么操作呢?这也是可以的,我们通过下面的方法可以进行相关的vCPU分别绑定 # virsh
20、vcpupinWin7-ent022 # virshvcpupinWin7-ent123 # virshdumpxmlWin7-ent # virshvcpuinfoWin7-ent OK,这里要注意的是,你把虚拟机用reboot重启,这个绑定配置还是生效的,但是你shutdown的话,CPU绑定的效果会失效。我们要让VM关机然后起来也生效,就必须把参数写入到虚拟机的XML里,然后保存,这样关机了也不会失效,这里要注意下 # virsh edit vm1 wq! 添加: OK,以上就是CPU绑定技术的操作。通过这样的操作,我们可以在一台多CPU的物理机上固定几个CPU给虚拟机用。当然,至于为什
21、么可以这样做,前面我们提到了关于NUMA的原理,如果固定了虚拟机的CPU,那么它就不会去找远端节点了,另外就是有些场景下,一物理机多个CPU,如果前面几个CPU负载很高,利用率大,后面几个CPU利用率低,那么我们可以协调下,做CPU的绑定,平衡下CPU的负载。以上是CPU的绑定,接下来我们讲讲CPU的热添加。1.5 CPU 热添加首先我们先了解下什么叫热添加,热添加就是在虚拟机运行不关机的情况下,做CPU的添加操作。那么要注意的是,这个热添加是在Redhat7.0以后才出现的,之前是没有的。所以要享用这功能那必须要求KVM宿主机和虚拟机都得在7.0版本以后。那么具体怎么操作我们通过一个演示给大
22、家操作下。比如目前这个虚拟机,这是一个CentOS7.1的。我们先看下目前虚拟机的CPU的数值,我们可以进系统查看,cat/proc/cpuinfo|grepprocessor|uniq|wc-l,我们看到当前是2个CPU:然后我们解释下这个最大CPU分配数是怎么个意思,它的意思就是给这个虚拟机最大预留的CPU个数,这个设置很重要,如果你想给虚拟机热添加,那么这个设置必须写。比如我们这里写的4,那么我们可以给虚拟机最大热添加到4个CPU,而且4是上限。那么接下来说下,具体怎么热添加。我们先在宿主机里先给这个虚拟机添加第三个CPU,原来是2个,现在再添加一个变成3个:setvcpusVM3_Ce
23、ntOS7.13-live然后我们到虚拟机里面把这个CPU激活 :echo1/sys/devices/system/cpu/cpu2/online我们再运行查看,发现已经变成3个了。如果要减少,那么只能在虚拟机里减少刚才的CPU # echo0/sys/devices/system/cpu/cpu2/online但是在宿主机层面看这个虚拟机的vCPU数还是3个,也就是说不支持热减少,我们运行vcpuinfoVM3_CentOS7.1命令发现还是3个:同理,Windows的添加也是如此,直接在宿主机里添加第三个CPU即可 # setvcpusVM4_Win20083-live然后虚拟机里不用操作
24、,它会自动刷新成3个CPU,我们也可以一个windows虚拟机做相关的演示,具体的可以由读者自己操作了。到这为止, 以上就是KVM CPU方面的优化。总结起来就两点,一个是CPU绑定,还有一个就是热添加。CPU绑定首先得了解NUMA技术,然后站在整个宿主机CPU资源的层面去调节。热添加,当你某个虚拟机正在运行,然后突然业务压力增大了,可以通过这方法达到0停机提升虚拟机CPU性能。内存优化最佳实践云技术实践 我们说完CPU方面的优化,接着我们继续第二块内容,也就是内存方面的优化。内存方面有以下四个方向去着手:EPT 技术大页和透明大页KSM 技术内存限制1. EPT技术EPT也就是扩展页表,这是
25、intel开创的硬件辅助内存虚拟化技术。我们知道内存的使用,是一个逻辑地址跟物理地址转换的过程。虚拟机内部有逻辑地址转成成物理地址的过程,然后再跳出来,虚拟机这块内存又跟宿主机存在逻辑到物理的转换。有了EPT技术,那么能够将虚拟机的物理地址直接翻译为宿主机的物理地址,从而把后面那个转换过程去掉了,增加了效率。那么这项技术,现在的服务器都支持,只要在BIOS打开了intel 的VT设置,那么这个也一起打开了。所以这个基于硬件的优化,目前不需要做额外的什么操作。2. 大页和透明大页我们先解释什么叫大页。所谓的大页指的是内存的大页面。当然,有大页面必然有对应的小页面.我们知道内存采用的是分页机制,当
26、初这个机制提出的时候,计算机的内存大小也就几十M,所以当时内存默认的页面大小都是4KB,那么这个4KB 也就是所谓的小页面。但是随着计算机的硬件发展,现在的内存基本上都是几十G 甚至上百G了,虽然,如果还是4KB小页的方式,那么必然会存在一些问题。那么会有哪些问题呢?操作系统如果还是小页存在,那么将会产生较多的TLB Miss和缺页中断,从而大大影响性能。为什么小页就存在较多的Miss和缺页中断呢?比如说系统里的一个应用程序需要2MB的内容,如果操作系统还是以4KB小页为单位,那么内存里就要有512个页面(512*4KB=2M),所以在TLB里就需要512个表项以及512个页表项,因此操作系统
27、就要经历512次的TLB miss和512次的缺页中断才能将2MB的应用程序空间全部映射到物理内存里。想想,2MB内存的需要就要经历512次的操作,如果内存需求大呢?必然操作数量会大大增加,从而间接的影响性能。如果把这个4KB变成2MB呢?那就很轻松了,一次TLB Miss和缺页中断操作就完成了,大大的增加了效率。所以,虚拟机可以通过分配巨型页也就是刚才说的大页来提高运行性能。那么具体怎么操作呢?也就是说如何把这个4KB的小页变成2MB甚至1GB的大页,然后把这个大页赋给虚拟机使用?我们可以先通过命令 cat /proc/meminfo | grep HugePages查看当前系统有多少个大页
28、:我们看到,当前数量是0。那么如何设置大页的数量呢?也就是上面的HugePages_Total的数量。只要运行echo 2000 /proc/sys/vm/nr_hugepages 这个命令即可:已经变成了2000了。当然这样重启会失效,我们运行这个命令让它永久生效 :sysctl -w vm.nr_hugepages=2000运行了这个命令系统重启的话,大页的数量也将是保持2000,不会变。接下来,我们还得把大页进行挂载,我们运行:# mount -t hugetlbfs hugetlbfs /dev/hugepages 这个hugetlbfs 是一种特殊文件系统,那至于为什么采用这样的文件
29、系统是因为这样花费的代价小。那么通过这几步操作,开启-设置大页数量-挂载, 那么宿主机这块就没什么问题了。如果我们KVM里面的某个虚拟机要使用宿主机的大页,那么我们还得做如下操作:重启下libvirtd服务虚拟机也开启透明巨型页关闭虚拟机编辑虚拟机XML设置虚拟机可以使用宿主机的巨型页数量我们先看看,当前的大页是没进程用的,hugepages_free是2000:我们先把libvirtd服务重启:systemctl restart libvirtd.service然后,我们看看虚拟机的透明大页有没有打开,一般默认系统是打开的,我们确认下我们看到是always状态,那么就是打开的,OK,我们进行
30、下一步。编辑虚拟机XML文件,让它使用宿主机的大页。我们先把虚拟机关闭,然后 virsh editvmname命令修改,添加下图中红色框框的内容:修改后,保存,然后开启虚拟机,注意这个虚拟机的内存是2G的配置。最后我们在宿主机运行cat /proc/meminfo | grep -i HugePages查看下大页的使用情况我们发现hugepages_free已经变成了912个了,那么使用了2000-912=1088 个。Hugepagesize是2M,也就是每页页面的大小,使用了1088个页面,那么2*1088=2176M 正好跟虚拟机内存的大小2G差不多。如果想让虚拟机释放大页,那么只要把这
31、个虚拟机关机或者删除XML里刚才添加的配置。刚才的操作,我们只是针对一个虚拟机的,也就是说我们把大页面赋给了一个虚拟机。如果我们要赋予多个虚拟机怎么办?那么要让大页同时让多个虚拟机享用,有以下两步要做:给NUMA 各个node节点分配多个2MB或者1GB的大页编辑虚拟机xml文件以使用node里分配好的大页我们可以运行下面两个命令就可以给宿主机各个NUMA Node分配大页# echo 4 /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages# echo 1024 /sys/devices/syste
32、m/node/node1/hugepages/hugepages-2048kB/nr_hugepages这两个命令的意思就是先给node0里分配4个1GB的大页,然后再给node1分配1024个2MB的大页。然后执行相关挂载操作,这跟刚才我们做的操作类似:# mkdir /dev/hugepages1G# mount -t hugetlbfs -o pagesize=1G none /dev/hugepages1G# mkdir /dev/hugepages2M# mount -t hugetlbfs -o pagesize=2M none /dev/hugepages2M挂载成功后,重启下l
33、ibvirtd服务,然后虚拟机就可以使用了,但是这里要注意的是,1GB的大页,虚拟机是不能直接使用的,需要在XML里指定。那么怎么指定? 我们目前宿主机NUMA node1和node2里面分别有4个1GB的和1024个2MB的大页。因此,只要跑在这两node上的虚拟机都可以享用了。比如刚才我们那虚拟机,我们要让它使用1GB的大页,我们只需要在XML里这样定义: 红色的部分就是要添加的参数,size是1,表示第一个使用的page;然后单位unit是G,nodeset=0-3,5 意思是虚拟机的NUMAnode0,node1,node2 ,node3和node5将使用1GB的大页 ; 虚拟机的no
34、de4将用2MB的大页。注意,这里的nodeset指的是虚拟机的节点,同时还要注意的是,如果宿主机大页面不够用了,你这样配置了,虚拟机是会起不来的。以上就是给虚拟机分配大页的方法。当然如果你想把宿主机的大页关闭,只要执行:# sysctl vm.nr_hugepages=0# umount hugetlbfs接下来我们讲下透明大页。从Centos6开始,linux系统自带了一技术叫透明巨型页(transparenthugepage),它允许所有的空余内存被用作缓存以提高性能,而且这个设置是默认开启的,我们不需要手动去操作。Centos下,我们用cat /sys/kernel/mm/transp
35、arent_hugepage/enabled可以查看我们看到这个中括号把这个always括起来了,说明这机器的透明巨型页的功能是打开的。当有512个页面可以整合的时候,就会合成一个2MB的大页;如果是在括号把never括起来了,那么就是关闭状态;madvise的话就是避免改变内存占用。当然,如果你想改变透明巨型页的状态,比如说关闭它,那么运行下面的命令即可:# echo never /sys/kernel/mm/transparent_hugepage/enabled最后要注意的是透明巨型页跟刚才我们说的hugetlbfs 文件挂载大页是不冲突的,如果你没做任何大页的指定和挂载,那么KVM就会
36、使用透明大页的方式。那么说到这,大家就会疑问,既然有透明大页,我为何还要费劲的去做相关大页的指定? 其实这两种方式都差不多,区别就是一个是手动的一,个是自动的。如果你对你宿主机资源把握的更加精准,推荐的还是手动指定。3. KSM 技术KSM是什么呢?KSM(KernelSamePageMerging),也就是所谓的相同页面内存压缩技术。KSM服务在linux系统里默认是开启的,它的作用就是让内存利用的更加高效,我们知道内存是分页的,如果多个程序中用的内存都是相同的页面,那么KSM就会把相同的内存合并,这样就能腾出更多的空间。KSM在系统里有个守护进程,它的作用就是不断的扫描宿主机的内存情况,检
37、测有相同的页面就会合并,这或多或少会消耗CPU。下面有几个命令设置大家要了解:首先是开关KSM服务:systemctl start|stop ksmdsystemctl start|stop ksmtuned systemctl enable|disable ksmdsystemctl enable|disable ksmtuned如果你的环境,内存资源比较丰富,VM又不多,这个功能开不开启都无所谓;如果不够,又想跑多一点的虚拟机,那么可以打开这个功能。但是你一定要注意,这个是一种内存超用的方案,如果一台宿主机里大部分虚拟机内存变化比较频繁,那么要慎重开启,因为KSM会频繁的做内存扫描,不停的
38、做内存合并操作,这会大量的消耗CPU资源,如果内存不够还会用到swap,那么最终会严重影响虚拟机性能。当然,也有设置能让虚拟机不受宿主机KSM的影响,具体操作如下:编辑虚拟机的XML文件,添加: 这样,这个KSM就不会去合并这个虚拟机的内存了。总的来说,如果你的环境硬件配置比较高,同时又追求VM数量,把KSM打开是一个很不错的选择(但是一定要做好相关资源的实时监控,特别是CPU)。在笔者维护过的项目中,遇到过只追求数量而不追求性能的场景,当时我们就开启了KSM服务,服务器配置是双路E5-2690v32.60GHz48core、512G内存,当每台计算节点到80个VM的时候(VM大部分配置为4c
39、8G,windows和linux各占50%)。用htop命令监控查看CPU每个核基本上都是99%满负载,此时,虚拟机体验十分不好,后来降到60个左右,CPU负荷在60%-70%,这样情况才有明显好转。所以,用不用KSM视你自己的生产环境和客户需求具体而定,这配置还是得慎重。4. 内存限制技术通过虚拟机内存限制,可以让虚拟机的内存使用限制在一定范围内。那么这个操作有什么作用呢?比如你的一台KVM宿主机,里面跑着多个业务的虚拟机,有的虚拟机业务比较大,吃得内存多,有的业务比较低,用不了多少内存,那么我们可以通过内存限制技术来手动调节宿主机的内存分配。当然这里要说明的是,使用这个必须对你虚拟化环境特
40、别清楚,比如宿主机平时的负载情况以及各个虚拟机的负载情况。那么具体如何操作呢?我们通过memtune命令或者通过改虚拟机的XML文件来设定内存的限制。这个memtune命令有以下4个参数hard_limit:强制设置虚拟机最大使用内存,单位为KBsoft_limit:可用最大内存,单位为KBswap_hard_limit:虚拟机最多使用的内存加上swap的大小,单位为KBmin_guarantee:强制设置虚拟机最低使用的内存,单位为KB最后一个参数虽然OPTIONS里有列出,但是实测是发现CentOS7.0 以上系统不能支持,执行的时候会报下面这样的错误:centos6 虽然不会报这个错,但是这命令貌似也不会有实际效果官方解释这是一个bug,大家可以参考下面的链接:/show_bug.cgi?id=11224
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋室内装修合同
- 房产中介服务合同
- 企业安全管理制度咨询服务合同
- 商场商铺房屋租赁合同
- 全新供货水果合同
- 原材料运输供货合同
- 法律常识合同法考点解析
- 殡仪服务合同条款
- 饭店劳务合同年
- 建筑工程招投标与合同管理复习
- 专题五 战争与文化交锋 高考历史二轮复习专项提分训练(含答案)
- 人教版二年级数学下册第三单元 图形的运动(一)标准检测卷(含答案)
- 2025年山东省淄博市张店区中考一模历史试题(含答案)
- 2025年内蒙古中考一模英语试题(原卷版+解析版)
- 【湛江】2025年中国热带农业科学院农产品加工研究所第一批招聘工作人员30人(第1号)笔试历年典型考题及考点剖析附带答案详解
- 银行案件防控课件
- 吉林省长春市2025届高三下学期质量监测(二)数学试题
- 2025年河南省商丘市柘城县中考一模化学试题(原卷版+解析版)
- 磁铁怎样吸引物体(课件)-二年级科学下册教科版
- 2025年中考语文复习知识清单:八年级下册古诗词梳理(原卷版+解析)
- 与食品安全相关的组织机构设置,部门及岗位职责
评论
0/150
提交评论