我有 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.shares
80% 分配给容器 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 命令?