Nível baixo
No nível inferior, você pode obter essas informações em /sys/block/X/stat
, que está documentado aqui .
Exemplo de conteúdo parece com:
10465 3250 759844 27528 4400 2983 546848 66306 0 9754 93792
Os campos que queremos são colunas 1 & 3 para leituras e 5 & 7 para gravações. O método de cálculo é o mesmo para ambos, então vou apenas discutir as leituras.
Coluna 1 é o número de leituras (que você declarou que você já pode monitorar), e a coluna 3 é o número de setores lidos. Um setor é 512 bytes. Então, com estes para calcular o tamanho das leituras, você só faz $col3 * 512 / $col1
.
Os números neste arquivo são o total desde que o disco ficou online. Então, para calcular o tamanho médio de leitura durante um período de tempo, basta ler o arquivo duas vezes e calcular com: ($col3_t2 - $col3_t1) * 512 / ($col1_t2 - $col1_t1)
.
Observe que o método acima fornece o tamanho dos OPs executados no nível do aplicativo (a descrição não é exata, mas próxima o suficiente). O kernel pode mesclar várias operações juntas para que o número de operações realizadas no disco seja menor. O cálculo para isso é: $col3 * 512 / ($col1 - $col2)
. E para obter o valor ao longo de um período de tempo: ($col3_t2 - $col3_t1) * 512 / (($col1_t2 - $col1_t1) - ($col2_t2 - $col2_t1))
Alto nível
iostat
pode lhe dar o valor também, mas com menos precisão. Ele não diferencia gravações ou leituras, e apenas lhe dá o valor em setores, não em bytes (então, novamente, multiplique por 512).
Mas o comando é iostat -x -d
e a coluna a ser vista é avgrq-sz
.