Como medir o IOwait por dispositivo?

5

Eu tenho um servidor, que exporta diretórios pessoais via NFS. Eles estão no software RAID1 (/ dev / sdb e / dev / sdc) e o SO está em / dev / sda. Notei que meu %iowait , conforme relatado por top e sar , é relativamente alto (compare com o restante dos servidores). Os valores variam entre 5-10%, como para os outros servidores (que são mais carregados do que este) o mesmo que 0-1%. A chamada experiência do usuário cai quando o %iowait atinge valores acima de 12%. Então nós experimentamos latência.

Não tenho erros de unidade nos logs. Eu gostaria de evitar brincar com as unidades usando o método de tentativa e erro.

Como posso descobrir qual dispositivo (/ dev / sda, / dev / sdb ou / dev / sdc) é o gargalo?

Obrigado!

Edit: Eu uso o Ubuntu 9.10 e já tenho o iostat instalado. Não estou interessado em problemas relacionados a NFS, mas sim em como descobrir qual dispositivo atrasa o sistema. O NFS não está carregado, eu tenho 32 threads disponíveis, o resultado de

grep th /proc/net/rpc/nfsd
th 32 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000

Edit2: aqui faz parte do iostat -x 1 output (espero não estar violando algumas regras aqui):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          45.21    0.00    0.12    4.09    0.00   50.58

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00   21.00    0.00   368.00     0.00    17.52     0.17    8.10   6.67  14.00
sdb               0.00     6.00    0.00    6.00     0.00    96.00    16.00     0.00    0.00   0.00   0.00
sdc               0.00     6.00    0.00    6.00     0.00    96.00    16.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00   21.00    0.00   368.00     0.00    17.52     0.17    8.10   6.67  14.00
dm-2              0.00     0.00    0.00   12.00     0.00    96.00     8.00     0.00    0.00   0.00   0.00
drbd2             0.00     0.00    0.00   12.00     0.00    96.00     8.00     5.23   99.17  65.83  79.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          45.53    0.00    0.24    6.56    0.00   47.68

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     1.00   23.00    2.00   424.00    24.00    17.92     0.23    9.20   8.80  22.00
sdb               0.00    32.00    0.00   10.00     0.00   336.00    33.60     0.01    1.00   1.00   1.00
sdc               0.00    32.00    0.00   10.00     0.00   336.00    33.60     0.01    1.00   1.00   1.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00   23.00    0.00   424.00     0.00    18.43     0.20    8.70   8.70  20.00
dm-2              0.00     0.00    0.00   44.00     0.00   352.00     8.00     0.30    6.82   0.45   2.00
drbd2             0.00     0.00    0.00   44.00     0.00   352.00     8.00    12.72   80.68  22.73 100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          44.11    0.00    1.19   10.46    0.00   44.23

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   637.00   19.00   16.00   432.00  5208.00   161.14     0.34    9.71   6.29  22.00
sdb               0.00    31.00    0.00   13.00     0.00   352.00    27.08     0.00    0.00   0.00   0.00
sdc               0.00    31.00    0.00   13.00     0.00   352.00    27.08     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00   20.00  651.00   456.00  5208.00     8.44    13.14   19.58   0.33  22.00
dm-2              0.00     0.00    0.00   42.00     0.00   336.00     8.00     0.01    0.24   0.24   1.00
drbd2             0.00     0.00    0.00   42.00     0.00   336.00     8.00     4.73   73.57  18.57  78.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          46.80    0.00    0.12    1.81    0.00   51.27

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00   16.00    0.00   240.00     0.00    15.00     0.14    8.75   8.12  13.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Quais são as colunas mais relevantes para analisar? Quais valores são considerados insalubres? Eu suponho que await e %util são os que eu estou procurando. Na minha opinião dm-1 é o gargalo (este é o metadado do recurso DRBD).

Obrigado em dobro!

Edit3: aqui está minha configuração:

sda = SO, sem RAID. Dispositivos dm-0 e dm-1 estão nele, pois o último é um dispositivo de metadados para o recurso DRBD (veja abaixo). Ambos dm-0 e dm-1 são volumes LVM; drbd2 = dm-2 = sdb + sdc - > este é o dispositivo RAID1, que serve os diretórios home do usuário através do NFS. Eu não acho que esse seja o gargalo. Nenhum volume LVM aqui.

    
por grs 29.03.2011 / 22:35

4 respostas

4

iostat -x 1 ?

Disseram-me que devo expandir ainda mais essa resposta, mas ainda não sei o que adicionar. Você não diz qual distro está usando, então não posso apontar para você um método para instalar o iostat se você ainda não o tiver. Mas eu acho que é o que você está pedindo.

Editar : feliz por ver alguma saída iostat! No momento, os dispositivos sd [ab] têm números quase idênticos, o que deveriam no RAID-1, e nenhum deles está saturado; nem é sdc. drbd2, no entanto, é; para que é usado e como isso pode afetar o desempenho do servidor como um todo?

Editar 2 : não sei o que sugerir. Você admite que o drbd2 "serve os diretórios home do usuário através do NFS" e diz que você tem um problema de latência do servidor NFS. Você produz uma saída iostat que, de maneira bastante convincente, diz que drbd2 é o dispositivo com gargalo. Você diz então que "Na minha opinião, dm-1 é o gargalo" e "Eu não acho que [drbd2] é o gargalo". Não está claro para mim que evidência você tem que contradiz a hipótese de que drbd2 é o gargalo, mas seria bom vê-lo.

    
por 29.03.2011 / 22:42
0

Este é um servidor NFS muito usado? Uma boa maneira de descobrir se o NFS é o gargalo é verificar como o processo NFS está em execução e se algum está em status de espera.

grep / proc / net / rpc / nfsd

th 128 239329954 363444.325 111999.649 51847.080 12906.574 38391.554 25029.724 24115.236 24502.647 0.000 520794.933

O primeiro número é o número de encadeamentos disponíveis para solicitações de serviço e o segundo número é o número de vezes que todos os encadeamentos foram necessários. Os 10 números restantes são um histograma mostrando quantos segundos uma certa fração dos encadeamentos foram ocupados, começando com menos de 10% dos encadeamentos e terminando com mais de 90% dos encadeamentos. Se os últimos números acumularem uma quantidade significativa de tempo, seu servidor provavelmente precisará de mais threads.

Aumente o número de encadeamentos usados pelo servidor para 16 alterando RPCNFSDCOUNT = 16 em /etc/rc.d/init.d/nfs

Você pode ler mais no link sob o cabeçalho "Threads do servidor".

    
por 29.03.2011 / 23:40
0

Ambos / dev / sdb e / dev / sdc têm números de fator "aguardam" muito próximos. / dev / sda tem alguns números maiores, mas como isso pode afetar seu desempenho de RAID não sendo incluído nele? BTW, você usa o LVM para espelhar, não é?

    
por 30.03.2011 / 05:03
0
Portanto, a leitura do iostat ajudará você a descobrir quais unidades estão tendo problemas de IO, mas descobri que rastrear o aplicativo que causa os problemas de IO é muito mais útil para melhorar a situação. Para que a iotop seja incrível:

link

    
por 30.03.2011 / 07:11