blog posts

管理OpenVZ资源-CPU share篇

 

继续昨天的内容,今日描述的是OpenVZ中如何控制VE可使用的CPU资源。OpenVZ资源管理器允许通过保证VE可使用的CPU time来实现QoS。在

 

没有设定cpulimit,以及没有其他VE竞争CPU资源的情况下,VE在获得设置的最小设定保证值外,还可以超过该值,以充分利用HW的CPU资源。

 

一、可设定参数
OpenVZ使用特定的运算规则计算CPU time,而设定值的单位就是CPU time。这就能避免单CPU和多CPU负载不平均,不能充分利用资源的问题。
可设定参数有:

引用
ve0cpuunits:该参数在全局配置文件中设置,定义VPS 0可使用的最少CPU time,也就是HW可获得保证的最少资源值。建议设置为HW CPU time总值的5~10%;
cpuunits:VE可获得保证的最少CPU time资源;
cpulimit:该VE不允许超过的CPU time百分比。

正如开头提到的,cpuunits不是固定值,只要资源许可,在没有超过cpulimit百分比的情况下,VE可充分获取CPU资源。

二、设置CPU share
1、计算HW总的CPU time
第一步,当然是需要计算当前VPS 0(HW)有多少CPU time可以支配。

引用
# vzcpucheck
Current CPU utilization: 1000 #已由HW和启动的VE占用的CPU time
Power of the node: 85105 #HW的CPU time总数

2、HW可用CPU time

引用
# grep ‘VE0CPUUNITS=1000’ /etc/vz/vz.conf
VE0CPUUNITS=1000

这是默认值,也等于没启动VE前,运行vzcpucheck得到的结果。

3、设置VE的CPU time

# vzctl set 115 –cpuunits 2500 –cpulimit 5 –save

或者

引用
# vi /etc/vz/conf/115.conf
CPUUNITS=”2500″
CPULIMIT=”5″

意思就是:

引用
1)即使在HW的CPU满负荷,或者讲,the current CPU utilization等于the power of the Node的情况下,115 VE都可以得到约3%(2500/85105)的CPU time资源;
2)但在CPU空闲的情况下,115 VE并不能得到超过5%的CPU time资源;
3)也就是讲,正常情况下,115 VE可用的CPU time资源在3%~5%之间;
4)若不设置cpulimit,那么115 VE在没有其他VE竞争,而资源又允许的情况下,就可以超过3%,但只要不超过HW的负荷就可以了。

启动VE,结果:

引用
# vzctl start 115
# vzcpucheck
Current CPU utilization: 3500
Power of the node: 85105

该设置还是动态有效的:

引用
# vzctl set 115 –cpuunits 4000 –cpulimit 5 –save
Setting CPU limit: 5
Setting CPU units: 4000
Configure meminfo: 49152
Saved parameters for VE 115
# vzcpucheck
Current CPU utilization: 5000
Power of the node: 85105

4、问题
从上面的描述可以知道,OpenVZ通常用最少保证值来让VE可充分的利用系统资源,这是其设计原理之一。但由此会带来一个问题,就是:

引用
# vzctl set 112 –cpuunits 85000 –cpulimit 5 –save
# vzctl start 112
# vzcpucheck
Current CPU utilization: 105000
Power of the node: 85105
Warning: hardware node is overcommited

万一,你为所有VE设定的其最少保证可用CPU time资源总值大于HW实际的CPU time。那么,就可能会发生CPU过载的问题。当真正发生此情况的时候,115 VE就不能获得其原来保证可获得的3%的CPU time资源,由此可能会导致整个虚拟系统出错。
当然,这只会发生在112 VE完全使用CPU time,HW超负荷的情况下。而大部分情况下,VE占用CPU的高峰并非同时的,根据OpenVZ的动态分配原则,CPU time都可以获得比较充分的利用,所以,仅是Warning,而不是Error。但为了避免问题,建议还是让current CPU utilization等于power of the Node比较好。


Leave a Reply