A parte inferior da documentação do kernel no controlador blkio inclui a nota :
What works
- Currently only sync IO queues are support. All the buffered writes are still system wide and not per group. Hence we will not see service differentiation between buffered writes between groups.
Praticamente, isso significa que as operações de gravação aparecerão no blkio.throttle.io_service_bytes somente se elas ignorarem o buffer do kernel.
A ferramenta fio
pode ilustrar isso com muita facilidade. As gravações diretas e sem buffer devem ser relatadas em blkio.throttle.io_service_bytes:
fio --name wxyz --direct=1 --buffered=0 --size=1g --time_based --runtime=120s --bs=4k --rw=write --ioengine=sync --numjobs=1
Considerando que o contrário & direto & opções de buffer, não há nada relatado em blkio.throttle.io_service_bytes, porque as gravações passam pelo cache de buffer do kernel e são agendadas mais tarde.
fio --name wxyz --direct=0 --buffered=1 --size=1g --time_based --runtime=120s --bs=4k --rw=write --ioengine=sync --numjobs=1
Além disso, este tópico com um engenheiro da RedHat que trabalha com O cgroups reitera o fato de que, uma vez passada a gravação para o cache de gravação dentro do kernel, "devido a essa camada extra de cache, perdemos as informações de contexto quando o IO chega ao dispositivo". E, portanto, nenhuma contabilidade pode ocorrer por blkio.