iostat - o dispositivo dm-0 mostra latências muito mais altas que sdX

3

Estamos executando as VMs do Linux (Centos 5.x) no topo do VMware vsphere 5.5. Estou monitorando a latência do disco usando o iostat, especificamente a coluna await, mas estou percebendo resultados estranhos com o device mapper / LVM versus os discos "físicos" que suportam o LVM.

Abaixo está um conjunto de saída do iostat -x 5 em uma de nossas VMs razoavelmente ativas. A vm em questão tem dois discos, sda com 1 partição sendo / boot, e sdb como nosso disco principal com / no sdb2. Enquanto iostat mostra latências de ~ 20-40ms para aguardar o dispositivo sdb2 (o único dispositivo / partição que suporta meu volgroup / dm-0), iostat para dm-0 mostra 100 + ms aguardando.

Minha pergunta é: qual estatística está "correta" aqui, no que diz respeito às latências reais que o sistema está vendo? Está vendo os ~ 20ms mostrados para o sdb de disco "físico", ou está realmente vendo 100 + ms de dm-0, talvez devido a alguns problemas de alinhamento / etc que surgem quando o LVM se envolve? É estranho porque às vezes as estatísticas combinam muito bem, outras são muito diferentes - por exemplo, no bloco de saída iostat abaixo, sdb2 mostra 419 write IOPS, enquanto dm-0 mostra 39k write IOPS.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.78    0.00    8.42   39.07    0.00   46.73

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  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb              15.67 39301.00 745.33 419.67 64146.67 317765.33   327.82    53.55   45.89   0.86 100.07
sdb1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb2             15.67 39301.00 745.33 419.67 64146.67 317765.33   327.82    53.55   45.89   0.86 100.07
dm-0              0.00     0.00 761.33 39720.67 64120.00 317765.33     9.43  4933.92  121.88   0.02 100.07

Atualização: Fiz algumas leituras adicionais, incluindo os links da resposta de Gene abaixo. Eu sei que há muitas variáveis envolvidas (virtualização, block file system, etc), mas essa parte parece ordenada, de acordo com nossos fornecedores + as melhores práticas da VMware, e o desempenho é realmente muito bom. Eu realmente estou apenas olhando para isso da perspectiva "dentro da VM" aqui.

Por esse motivo, suspeito que haja um problema com nosso particionamento + alinhamento de LVM:

GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) print

Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 2147483647s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start     End          Size         Type     File system  Flags
 1      63s       4192964s     4192902s     primary  linux-swap   boot
 2      4192965s  2097151999s  2092959035s  primary               lvm

~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               VolGroup00
  PV Size               998.00 GB / not usable 477.50 KB
  Allocatable           yes (but full)
  PE Size (KByte)       32768
  Total PE              31936
  Free PE               0
  Allocated PE          31936
  PV UUID               tk873g-uSZA-JaWV-R8yD-swXg-lPvM-dgwPQv

Lendo sobre o alinhamento, parece que o seu setor inicial deve ser divisível por 8, então você se alinha em um limite de 4kb, com o tamanho padrão do setor 512b. Parece que o LVM é capaz de alinhar automaticamente quando você o aplica a um disco inteiro, mas como estamos partindo do disco primeiro, e então fazendo da nossa partição ie / dev / sdb2 um dispositivo físico para o LVM usar, Não tenho certeza se é capaz de calcular um deslocamento nesse caso. Por link , o parâmetro data_alignment_offset_detection: "Se definido como 1, e seu kernel fornece informações de topologia em sysfs para o Volume Físico, o início da área de dados alinhados do Volume Físico será alterado pelo alignment_offset exposto em sysfs. " Este é o Centos5, e não vejo nenhuma dessas informações expostas no sysfs, apenas em nosso Centos6 e vm's mais recentes, então ele pode não ser capaz de alinhar corretamente em um volume físico.

Encontrei este whitepaper netapp no alinhamento de partições VM link Especificamente, há boas informações na seção 4.5, página 29, sobre particionar adequadamente uma VM para alinhamento adequado com o LVM. Vou seguir isso para que nossos novos vm's estejam alinhados corretamente.

Isso parece causar esse comportamento, alguém com mais conhecimento / experiência pode confirmar isso?

    
por Steve R. 04.10.2014 / 00:17

1 resposta

3

Não há uma resposta fácil, pois a virtualização está envolvida. Você tem um disco virtual em cima de um sistema de arquivos sobre um dispositivo de bloco apresentado a um convidado virtual que tem seu próprio driver apresentando um dispositivo de bloco ao LVM. Eu não sei ao certo se isso necessariamente causaria uma diferença tão grande, mas pode ser possível.

Além disso ...

O LVM adiciona sobrecarga, portanto haverá uma diferença. Se o seu LVM e dispositivos de bloco não estiverem alinhados adequadamente, isso também pode ser um fator contribuinte.

O alinhamento não é um assunto simples que pode ser coberto em uma configuração como essa. O melhor que posso fazer é encaminhá-lo para alguns documentos, talvez você encontre mais respostas neles:

por 04.10.2014 / 06:22