Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86571
  • 博文数量: 23
  • 博客积分: 88
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-09 01:06
文章分类
文章存档

2012年(9)

2011年(14)

分类:

2011-12-15 23:46:26

简介

Linux Container是OS级别的虚拟化方案,它相比于一般的虚拟机没有了硬件模拟以及指令模拟,相比传统虚拟机具有更低的开销,因此可以应用到私有云之中。LXC目前的版本支持对memory,cpu以及block IO的管理和限制,目前不支持对网络IO的管理,但该特性已经加入到其roadmap,这些资源的管理和限制对企业私有云的搭建份至关重要,可以提高集群资源的使用率。

环境

LXC需要比较高版本的内核支持,28以上,最好是32以上。我的测试环境是centos6, 内核版本是2.6.32。

准备

block IO即磁盘io,lxc管理block IO是通过在内核的io scheduler CFQ增加hook机制实现的,因此使用lxc管理block io 需要将内核的io scheduler设置为CFQ,你可以通过
  1. cat /sys/block/sda/queue/scheduler
    1. noop anticipatory deadline [cfq]
代中括号的就是当前的io scheduler, 如果要修改, 直接修改这个文件即可

测试

创建两个container, test1和test2, 他们从同一个文件(400M)读入数据,通过lxc的设置控制两个进程读的速度。
test1的配置:
  1. lxc.cgroup.blkio.weight = 100
test2的配置:
  1. lxc.cgroup.blkio.weight = 1000
执行脚本:
  1. sync
  2. echo 3 > /proc/sys/vm/drop_caches  #这两句必须要,用于清空cache,数据在第一次读入后都在caache中
  3. dd if=/tmp/file of=/dev/null
命令
  1. lxc-execute -n test1 -f /tmp/test1.conf /tmp/test1.sh
  2. lxc-execute -n test2 -f /tmp/test2.conf /tmp/test2.sh

测试结果及分析

test1: cost 11.12s   speed is 37.5MB/s
test2: cost 6.4s   speed is 65.7MB/s
假设test1读的速度是v,文件大小是s,则test1的时间是 s/v
那test2的速度根据权重比应该是0.1v,则test2消耗的时间是 s/v + 0.9s/1.1v
因此两者时间比是0.55, 而实际的结果是6.4/11.12=0.5755, 刚好印证了这个结果,因此可以说lxc对block io的控制是很好的。

PS:感谢淘宝Zhu yanhai的支持,非常感谢!
阅读(1553) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~