一、测试环境
物理机硬件资源 |
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/,实验数据为本人获得的一手数据。
本文出自 “说话的白菜” 博客,谢绝转载!