Por que maior tempo de espera do dispositivo DM de caminhos múltiplos do que o dispositivo subjacente?

20

Temos um servidor baseado no CentOS 6.4 conectado ao armazenamento Hitachi HNAS 3080 e observamos o kernel remontar o sistema de arquivos no modo somente leitura:

16 de maio 07:31:03 Kernel GNS3-SRV-CMP-001: [1259725.675814] EXT3-fs (dm-1): erro: remontando o sistema de arquivos somente leitura

Isso aconteceu após vários erros de E / S e todos os caminhos para o dispositivo supostamente inativos:

16 de maio 07:31:03 multipathd GNS3-SRV-CMP-001: mpatha: caminhos ativos restantes: 0

Eu estive olhando para os logs sar e posso ver alguns tempos de espera muito grandes (2 segundos):

07:40:00       dev8-0     17.91    112.04     98.03     11.73      0.00      0.20      0.07      0.12
07:40:00      dev8-16      0.23      1.85      0.00      8.00      0.00      3.71      3.71      0.09
07:40:00      dev8-32     91.50   8338.76   5292.93    148.98      8.38     91.60      9.76     89.35
07:40:00     dev252-0     91.27   8336.91   5292.93    149.34     17.79    194.88      9.79     89.38
07:40:00     dev252-1    674.80   8168.16   5292.93     19.95   1473.53   2183.60      1.32     88.98

A duração entre 07: 30: 00-07: 40: 00 acontece no momento em que o sistema de arquivos foi montado como somente leitura. No entanto, mesmo em condições normais, uma observação repetida é que o tempo de espera para dispositivos subjacentes é muito menor que o do dispositivo de caminhos múltiplos. Por exemplo:

00:00:00          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
00:10:00       dev8-0     19.27    129.41     78.61     10.80      0.01      0.27      0.16      0.32
00:10:00      dev8-16      0.23      1.80      0.00      8.00      0.00      0.86      0.84      0.02
00:10:00      dev8-32     94.88  10285.16   3363.48    143.86      3.39     35.76      6.83     64.82
00:10:00     dev252-0     94.65  10283.34   3363.48    144.18      3.64     38.47      6.86     64.89
00:10:00     dev252-1    435.06  10087.12   3363.48     30.92    118.42    272.21      1.47     64.12

O dev8-0 passa a ser o disco local, enquanto o dev8-16 ( /dev/sdb) e o dev8-32 ( /dev/sdc) são os subjacentes do dev252-0 ( /dev/mapper/mpatha). dev252-1 ( /dev/mapper/mpathap1) é uma partição única que abrange todo o dispositivo de caminhos múltiplos. Aqui é produzido a partir de multipath -ll:

mpatha (2521501cbffffffffe96773b50ec30020) dm-0 BlueArc,NAS Platform
size=10T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 9:0:0:0 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=active
  `- 8:0:0:0 sdb 8:16 active ready running

Por que o tempo de espera deve /dev/mapper/mpathap1ser tão maior que o de /dev/mapper/mpathaou mesmo /dev/sdbou /dev/sdc?

pdp
fonte
11
Parece digno de nota que, aparentemente, muitas solicitações de fusão estão acontecendo no caminho de /dev/mapper/mpathap1para /dev/mapper/mpatha. Essa também é a camada na qual a maioria das awaitvezes parece ser adicionada. Você pode verificar em quais elevadores são usados /sys/block/mpathap1/queue/schedulere /sys/block/mpatha/queue/scheduler, possivelmente, trocá-lo para deadlineou nooppara comparação?
the-wabbit
O I / O escalonador para mpatha( /sys/block/dm-0/queue/scheduler) é noope que para mpathap1( /sys/block/dm-1/queue/scheduler) é none.
Pdp
4
Eu suspeito fortemente que o algoritmo de fila / mesclagem do agendador seja responsável pelo atraso. Eu trocaria o cfq dos dispositivos subjacentes por noop ou prazo apenas para ver se ele muda alguma coisa. Isso provavelmente não terá relação com o problema de todos os caminhos, no entanto.
the-wabbit
2
FWIW, observei o mesmo tipo de comportamento em outros tipos de dispositivos mapeadores de dispositivos - especificamente nos pools do NSS . As gravações de mesclagem têm uma espera mais alta (e filas mais longas) no dmdispositivo do que no dispositivo físico subjacente, enquanto as solicitações de leitura e gravações sem a necessidade de mesclagem não são afetadas. Ainda não sei se isso é simplesmente um erro de apresentação devido à maneira como os esperados são calculados ou se os tempos de resposta são realmente prolongados devido à natureza do algoritmo de enfileiramento / mesclagem.
the-wabbit
11
Um dos scripts Systemtap IO pode fornecer informações adicionais sobre o que está acontecendo. io_submit.stp, ioblktime.stp e biolatency-nd.stp podem ser bons lugares para começar.
Kassandry #

Respostas:

2

Como o usuário sugere o wabbit, há uma fusão de solicitações em andamento. Você pode ver que na coluna avgrq-sz, o tamanho médio da solicitação - que mostra um aumento significativo.

Agora 'aguardar' é o tempo gasto na fila mais o tempo gasto atendendo a essas solicitações. Se um pequeno pedido, vamos chamá-lo de 'x', é mesclado com outros dois pedidos (y e z, emitidos após x), então x será

  • aguarde na fila a ser mesclada com y
  • aguarde na fila tu seja mesclado com z
  • aguarde a conclusão de (x, y, z)

Obviamente, isso terá um impacto negativo na estatística de espera, principalmente por causa da maneira como a espera é calculada, sem realmente significar um problema em si.

Agora vamos dar uma olhada em / dev / sdb (dev8-16). Você sabia que não está usando esse caminho? Você tem dois grupos de prioridades em sua configuração de caminhos múltiplos, um é

status = ativado

e em é

status = ativo

Você provavelmente tem

Failover path_grouping_policy

na sua configuração (que é o padrão).

Se você deseja evitar os erros de E / S no caso de ambos os caminhos estarem inativos, tente:

        apresenta "1 queue_if_no_path"
no seu multipath.conf

Agora a verdadeira questão permanece: por que os dois caminhos seguem?

mente remota
fonte