使用cgroup的sched_load_balance

  Sched_load_balance是cgroup中cpuset子系统提供的负载均衡功能。它用于控制当前cgroup以及下层的cgroup中任务的负载均衡性。要控制一个组的负载均衡,必须先将所有与本组共享cpu的其他组的负载均衡先关闭。

  举例:12个核的系统,cpu0~cpu11,可以通过如下例子来了解sched_load_balance:

1 创建cpuset控制组

mkdir /cpuset
mount -t cgroup cpuset -o cpuset /cpuset
  先挂载一个cpuset根组到/cpuset目录。接着创建子组:
mkdir /cpuset/d0/
echo 0 > /cpuset/d0/cpuset.mems
echo 8-11 > /cpuset/d0/cpuset.cpus

mkdir /cpuset/d0/d00/
echo 0 > /cpuset/d0/d00/cpuset.mems
echo 8-9 > /cpuset/d0/d00/cpuset.cpus

mkdir /cpuset/d0/d01/
echo 0  /cpuset/d0/d01/cpuset.mems
echo 8-11 > /cpuset/d0/d01/cpuset.cpus

  这样我们就创建了4个cpuset控制组:/cpuset (cpuset.cpus=0-11),/cpuset/d0 (cpuset.cpus=8-11),/cpuset/d0/d00 (cpuset.cpus=8-9) 和 /cpuset/d0/d01 (cpuset.cpus=8-11)。

  默认情况下所有cpuset控制组的cpuset.sched_load_balance功能都使能,其值为1。

2 关闭子组负载均衡

  我们的目的就是要通过cpuset.sched_load_balance来控制任务的负载均衡,这里我们以/cpuset/d0/d00这个子组为目标,控制这个组的上面任务的负载均衡。

  我们知道默认情况下cpuset控制组的cpuset.sched_load_balance处于使能状态,因而我们上面创建的4个组都使能了自己组的负载均衡。

  而/cpuset,/cpuset/d0以及 /cpuset/d0/d01的cpuset.cpus分别是cpu0-11,cpu8-11,和cpu8-11,这几个cpu集合都包含了/cpuset/d0/d00的cpu集合 cpu8-9。

  因而,要关闭/cpuset/d0/d00组中cpu8,cpu9的负载均衡,先要将cpu0-11,cpu8-11这几个cpu集合的负载均衡关掉。在咱们的例子中就是需要:

echo 0 > /cpuset/cpuset.sched_load_balance
echo 0 > /cpuset/d0/cpuset.sched_load_balance
echo 0 > /cpuset/d0/d01/cpuset.sched_load_balance

    最后,我们启动4个死循环任务,假设其pid分别是401,402,403,404; 并将他们放到/cpuset/d0/d00组:

echo 401 > /cpuset/d0/d00/tasks
echo 402 > /cpuset/d0/d00/tasks
echo 403 > /cpuset/d0/d00/tasks
echo 404 > /cpuset/d0/d00/tasks

  然后执行top -d 1 命令,你看到了什么?  可以看到这四个死循环任务没有负载均衡。

  还可以反向验证,分别打开其他三个组的负载均衡,再执行top -d 1 看看会发生什么?

  还可以将/cpuset/d0/d01/cpuset.cpus改为10-11,然后再来top验证一下,看看又会发生什么?

  这些就留给小伙伴们自己去实验了。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值