Não consigo fazer com que o cgroup blkio limpe os iops de processos em um subgrupo

1

Não consigo fazer com que o cgroup blkio limpe os iops de processos em um subgrupo. Eu estou usando o CentOS 7, 3.10.0-229. Eu crio o cgroup /sys/fs/cgroup/blkio/user.slice/test1 e faço

echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/test1/blkio.throttle.read_iops_device

e da mesma forma para write_iops_device. 8:32 corresponde ao HDD em / dev / sdc. Em seguida, uso stress-ng para ler e gravar na unidade em / srv / hdd-c usando

cgexec -g blkio:user.slice/test1 stress-ng --temp-path /srv/hdd-c --hdd 15 -t 180

e

cgexec -g blkio:user.slice/test1 stress-ng --temp-path /srv/hdd-c --readahead 15 -t 180

Confirmei que os 30 processos iniciados estão sendo executados no blkio: user.slice / test1 cgroup usando ps eo pid,user,args,cgroup .

Quando eu faço iostat 5 o número de tps para sdc é de 400 a 600, que é o mesmo de quando eu os executo fora do cgroup test1. Eu obtenho o mesmo resultado se eu fizer echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device e executá-los no user.slice ou user.slice/test1 cgroup. No entanto, se eu acelerar na raiz do blkio usando echo 8:32 10 > /sys/fs/cgroup/blkio/blkio.throttle.{read|write}_iops_device e, em seguida, executar processos stress-ng, iostat 5 mostrará que o tps para sdc é 10-11.

O afogamento do blkio só funciona no nível da raiz? As páginas de manual não parecem sugerir isso.

    
por Jeff Kubina 05.04.2017 / 19:59

1 resposta

1

O problema, que aprendi com a resposta a esta question , é que o buffer do kernel ignora o sistema blkio. Usando fio sem buffering e directio, consegui reduzir os iops a um dispositivo para 10 por segundo usando echo 8:32 10 > /sys/fs/cgroup/blkio/user.slice/blkio.throttle.{read|write}_iops_device

    
por 17.04.2017 / 18:24