您的位置:首页 > 其它

LXC CPU资源隔离与动态调整测试

2013-03-26 12:12 381 查看
一、测试环境

物理机硬件资源

4核 Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz

OS

Ubuntu 12.04.1 LTS

内核

Linux wm-Aspire-4750 3.2.0-33-generic-pae #52-Ubuntu SMP Thu Oct 18 16:39:21 UTC 2012 i686 i686 i386 GNU/Linux

测试工具

apache2、压力测试工具ab、死循环程序a.c

二、lxc简要介绍

lxc通过cgroup实现资源隔离功能。在cpu资源角度,主要有两个变量cpu.shares和cpuset.cpus。简单来说cpu.shares是一个lxc使用cpu的份额,按照比例计算。例如,两个lxc(假设只存在2个lxc,不存在其他lxc)的cpu.shares都是1024,那么这两个lxc使用cpu的理论比例就是50%:50%。cpuset.cpus是分配给这个lxc使用的具体cpu,举例来说,一台物理机有4个cpu,分别是cpu0、cpu1、cpu2、cpu3,那么可以给lxc分配编号为0-3的cpu。

我们可以通过如下列命令分配cpu资源:

lxc-cgroup -n name cpu.shares 1024

lxc-cgroup -n name cpuset.cpus 0-1

三、测试方法

1、在Linux Container内起apache服务器,在另一物理节点上使用ab进行压力测试,由此监测单个Linux Container的资源隔离和分配;

2、在两个Linux Container内起死循环程序,调整两个Linux Container资源参数,由此监测、对比多个Linux Container的资源隔离和分配;

3、通过top、htop监测各个cpu利用率及进程占用cpu的利用率。

四、单个lxc资源测试

1、单lxc压力测试 分配1个cpu

1)资源隔离:使用cgroup分配1个cpu,lxc-cgroup -n name cpuset.cpus 0

2)压力测试:ab -c 2 -n 8000 http://192.168.120.105

3) 平均响应请求数:Requests per second: 573.61 [#/sec] (mean)

4) 资源占用率:cpu0利用率持续为100%,其余cpu保持在10-20%较低水平。

2、单lxc压力测试 分配2个cpu

1)资源隔离:使用cgroup分配2个cpu,lxc-cgroup -n name cpuset.cpus 0-1

2)压力测试:ab -c 2 -n 8000 http://192.168.120.105

3)平均响应请求数:Requests per second: 732.75 [#/sec] (mean)

备注:并没有线性增长

4)资源占用率:cpu0、cpu1利用率持续约为88%,二者较为平均。

3、单lxc压力测试 分配3个cpu

1) 资源隔离:使用cgroup分配3个cpu,lxc-cgroup -n name cpuset.cpus 0-2

2) 压力测试:ab -c 2 -n 8000 http://192.168.120.105

3) 平均响应请求数:Requests per second: 851.50 [#/sec] (mean)

4) 资源占用率:cpu0、cpu1利用率持续约为73%,较为平均;cpu2利用率持续约为83%。

4、单lxc压力测试 分配4个cpu

1) 资源隔离:使用cgroup分配3个cpu,lxc-cgroup -n name cpuset.cpus 0-3

2) 压力测试:ab -c 2 -n 8000 http://192.168.120.105

3) 平均响应请求数:Requests per second: 860.48 [#/sec] (mean)

4) 资源占用率:cpu0、cpu1、cpu2、cpu3利用率持续约为72%,较为平均。

五、多(2)个lxc资源测试

1、2个lxc共用1个cpu,各自分配50%,一个跑死循环、一个闲置

1)资源隔离:lxc1、lxc2共占cpu0,分配比例均为50%

2)压力测试:lxc1内跑死循环程序a,lxc2内不做操作

3)资源占用率:lxc1内a进程占用cpu利用率为98%。

备注:进程占用cpu利用率为98%,并没有占满cpu,但是相应cpu的利用率已经为100%。我个人推测是因为本机资源较少,lxc的bash、init同时占用少量资源。

2、2个lxc共用1个cpu,各自分配50%,2个都跑死循环

1)资源隔离:lxc1、lxc2共占cpu0,分配比例均为50%

2)压力测试:lxc1、lxc2内跑死循环程序a

3)资源占用率:lxc1内a进程占用cpu利用率为49%,lxc内啊进程占用cpu利用率为49%。

3、2个lxc共用1个cpu,一个占80%,一个占20%,2个都跑死循环

1)资源隔离:lxc1、lxc2共占cpu0,分配比例为80%:20%

2)压力测试:lxc1、lxc2内跑死循环程序a

3)资源占用率:lxc1内a进程占用cpu利用率为78-79%,lxc内啊进程占用cpu利用率为20%。

4、2个lxc共用2个cpu,各自分配50%,2个都跑死循环

1)资源隔离:lxc1、lxc2共占cpu0、cpu1,分配比例均为50%

2)压力测试:lxc1、lxc2内跑死循环程序a

3)资源占用率:lxc1内a进程占用cpu利用率为98%,lxc2内a进程占用cpu利用率为98%

备注:死循环a程序是单线程,分配多个cpu没有实际作用,推测两个程序分别占用一个cpu。

六、结论

1、cgroup实际隔离情形接近理论数值。

2、支持动态分配调整,以上操作均在不停止应用程序前提下完成。

3、支持“资源抢占”,在共享cpu的前提下,忙碌的lxc会抢占闲置lxc的资源。附注:实验方法参考http://reedhong.blog.163.com/blog/static/180037190201161343444558/,实验数据为本人获得的一手数据。

本文出自 “说话的白菜” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: