cgroups: blkio.weight 似乎没有达到预期的效果

cgroups: blkio.weight 似乎没有达到预期的效果

我有 2 个具有以下 cgroup 设置的 LXC 容器:

lxc.cgroup.blkio.weight = 200
lxc.cgroup.cpu.shares = 200

and

lxc.cgroup.blkio.weight = 800
lxc.cgroup.cpu.shares = 800

我已经验证在/sys/fs/cgroup/blkio/lxc/test1-lxccontainer/blkio.weight主机操作系统上确实设置为 200。

我已验证,cpu.shares80% 分配给容器 1,20% 分配给容器 2。

但是当我在两个容器中运行此命令时:

# write a 10GB file to disk
dd bs=1M count=10000 if=/dev/zero of=1test conv=fdatasync

我对读取进行了类似的测试:

davidparks21@test-cgroups1:/tmp$ time sh -c "dd if=1test of=/dev/null bs=1M"
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 37.9176 s, 277 MB/s

real    0m37.939s
user    0m0.004s
sys     0m24.306s

在主机操作系统上看到的 IO 速度iotop在两个容器之间几乎相同。

在这种情况下,我预计容器 2 会控制 80% 的 IO 访问。

答案1

这里的问题是你需要使用公平调度程序,我使用了错误的调度程序,并且错误地读取了设置(以为我正在使用公平调度程序,但实际上没有)。切换到正确的 IO 调度程序解决了该问题。

更改 IO 调度程序(取自这里):

echo cfq > /sys/block/{DEVICE-NAME}/queue/scheduler

答案2

如果您尝试先刷新缓存,则可能是系统缓存的 dd 命令问题:

echo 3 > /proc/sys/vm/drop_caches

并使用“nocache”选项启动 dd 命令?

相关内容