다음 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가 IO 액세스의 80%를 제어할 것으로 예상합니다.
답변1
여기서 문제는 공정 스케줄러를 사용해야 하는데 제가 잘못된 스케줄러를 사용하고 설정을 잘못 읽었다는 것입니다(공정 스케줄러를 사용하지 않았을 때 사용하고 있었던 것으로 생각함). 올바른 IO 스케줄러로 전환하면 문제가 해결되었습니다.
IO 스케줄러 변경(출처:여기):
echo cfq > /sys/block/{DEVICE-NAME}/queue/scheduler
답변2
캐시를 먼저 플러시하려고 하면 시스템 캐시 dd 명령에 문제가 있을 수 있습니다.
echo 3 > /proc/sys/vm/drop_caches
그리고 "nocache" 옵션을 사용하여 dd 명령을 시작하시겠습니까?