次のcgroup設定を持つ2つの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
実際にホストOSで200に設定されていることを確認しました。
cpu.shares
コンテナ1に80%、コンテナ2に20%が割り当てられていることを確認しました。
ただし、両方のコンテナでこのコマンドを実行すると、次のようになります。
# 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つのコンテナ間でほぼ同じです。
この場合、コンテナ2はIOアクセスの80%を制御すると予想します。
ベストアンサー1
ここでの問題は、プロセススケジューラを使用する必要がありますが、私は間違ったスケジューラを使用し、設定を誤って読んだことです(プロセススケジューラを使用していないときに使用していたと思います)。正しいIOスケジューラに切り替えることで問題が解決しました。
IOスケジューラの変更(ソース:ここ):
echo cfq > /sys/block/{DEVICE-NAME}/queue/scheduler