Tentando entender o iostat para um caso de leitura sequencial simples

2

Estou vendo o desempenho de E / S do disco de uma hospedagem na Web VPS (servidor virtual) e gostaria de ajudar a entender os números que o 'iostat' está me dando.

Esta é minha leitura seqüencial muito simples do disco virtual único com 'dd':

# dd if=/dev/sda1 of=/dev/null bs=16k count=102400
6400+0 records in
6400+0 records out
104857600 bytes (105 MB) copied, 7.91767 s, 13.2 MB/s

(13,2MB / s não é um IMO muito quente).

O teste foi realizado quando o sistema estava bem silencioso, mas ainda haveria uma carga normal "quiescente" enquanto eu estava executando o dd.

Eu corri 'iostat -ktxz 5' durante o teste; essa foi a saída do comando em que a amostra de 5 segundos estava totalmente dentro do tempo em que 'dd' estava em execução:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda           12030.60     8.00  103.40    1.40 12135.20    36.00   232.27     2.60   23.77   9.54  99.96

Isso é o que eu trabalhei para mim:

    O disco
  • é essencialmente 100% ocupado atendendo as leituras seqüenciais do disco;

  • rkB / s é muito próximo dos 13.2MB / s que o dd reportou;

  • rkB / s dividido por r / s é 117kB, que é o mesmo que a figura avgrq-sz (que está em setores); Ouso dizer que o iostat faz o mesmo cálculo.

  • a 'blockdev --getra / dev / sda' informa que o dispositivo tem um set de 256 setores; isso é bem próximo do tamanho médio de solicitações de 117kB.

Então, estou assumindo que:

  • dd está lendo em blocos de 16KB;

  • mas o Linux está prontamente fazendo leituras antecipadas de 128 KB.

Mas coisas que não entendo incluem:

  • 1000ms divididos pelo aguardo de 23,77ms me dá um número de 42 pedidos por segundo; ainda o r / s é 103.40?

  • Por que o avgqu-sz seria diferente de 1? Meu dd era um processo single-threaded, o kernel estaria apenas invocando readahead um de cada vez?

  • Por outro lado, o avgqu-sz * 1000ms / 23.77ms me dá 109 r / s, muito próximo dos r / s relatados.

  • O que são todas essas solicitações mescladas? rrqm / s é 12.030?!?! Não consigo entender isso em blocos de leitura de 128kB ou nas leituras de 16kB em nível de usuário que o dd estava fazendo.

Eu acho que há algumas coisas básicas sobre discos modernos e Linux, dos quais eu sou totalmente ignorante. :( O avgqu-sz é provavelmente a chave - por que você deve ter mais de uma solicitação na fila a qualquer momento?

    
por Brad 22.08.2015 / 12:33

0 respostas

Tags