一、测试环境


物理机硬件资源


4Intel(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.sharescpuset.cpus。简单来说cpu.shares是一个lxc使用cpu的份额,按照比例计算。例如,两个lxc(假设只存在2lxc,不存在其他lxc)的cpu.shares都是1024,那么这两个lxc使用cpu的理论比例就是50%50%cpuset.cpus是分配给这个lxc使用的具体cpu,举例来说,一台物理机有4cpu,分别是cpu0cpu1cpu2cpu3,那么可以给lxc分配编号为0-3cpu


我们可以通过如下列命令分配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、通过tophtop监测各个cpu利用率及进程占用cpu的利用率。


四、单个lxc资源测试


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


   1)资源隔离:使用cgroup分配1cpulxc-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压力测试 分配2cpu


   1)资源隔离:使用cgroup分配2cpulxc-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)资源占用率:cpu0cpu1利用率持续约为88%,二者较为平均。


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


   1) 资源隔离:使用cgroup分配3cpulxc-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) 资源占用率:cpu0cpu1利用率持续约为73%,较为平均;cpu2利用率持续约为83%


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


   1) 资源隔离:使用cgroup分配3cpulxc-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) 资源占用率:cpu0cpu1cpu2cpu3利用率持续约为72%,较为平均。


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


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


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


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


   3)资源占用率:lxc1a进程占用cpu利用率为98%


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


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


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


   2)压力测试:lxc1lxc2内跑死循环程序a


   3)资源占用率:lxc1a进程占用cpu利用率为49%lxc内啊进程占用cpu利用率为49%


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


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


   2)压力测试:lxc1lxc2内跑死循环程序a


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


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


   1)资源隔离:lxc1lxc2共占cpu0cpu1,分配比例均为50%


   2)压力测试:lxc1lxc2内跑死循环程序a


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


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


六、结论


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


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


3、支持资源抢占,在共享cpu的前提下,忙碌的lxc会抢占闲置lxc的资源。

附注:实验方法参考http://reedhong.blog.163.com/blog/static/180037190201161343444558/,实验数据为本人获得的一手数据。