A agenda de E / S do dm-multipath?

1

Eu tenho um dispositivo multipath no qual estou interessado:

[root@xxx dm-7]# multipath -ll mpathf
mpathf (3600601609f013300227e5b5b3790e411) dm-7 DGC,VRAID
size=3.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=130 status=active
| |- 7:0:1:5 sdl 8:176  active ready running
| '- 8:0:1:5 sdx 65:112 active ready running
'-+- policy='round-robin 0' prio=10 status=enabled
  |- 7:0:0:5 sdf 8:80   active ready running
  '- 8:0:0:5 sdr 65:16  active ready running

Por isso, parece que os dispositivos de bloco que usam esse caminho são sdf , sdr , sdl e sdx . Apenas tomando sdf como um exemplo que configurei como agendador de E / S como noop :

[root@xxx dm-7]# cat /sys/block/sdf/queue/scheduler
[noop] anticipatory deadline cfq

O dispositivo mpathf é mapeado para /dev/dm-7 para o dispositivo de bloco real. Acabei de notar que isso também tem um agendador de E / S:

[root@xxx dm-7]# cat /sys/block/dm-7/queue/scheduler
noop anticipatory deadline [cfq]

Pergunta: qual deles tem precedência? O agendador no dispositivo multipath ou no dispositivo acaba transmitindo o I / O até?

É claro que estou assumindo que os IOPs não estão agendados duas vezes (uma vez para o dispositivo mpath e outro para o dispositivo de bloco individual no qual a E / S é redirecionada).

    
por Bratchley 27.01.2015 / 23:26

1 resposta

1

Resposta curta:

Mapeador de dispositivos nas versões de kernel depois de 2.6.31 (lançado em 9 de setembro de 2009) inclui suporte a metas dm "baseadas em solicitações". Até agora, apenas o único destino de dm baseado em solicitação é dm-multipath .

Para os alvos que permanecem BIO (isto é, tudo exceto multipath), a seleção do agendador ainda está presente, mas é irrelevante, já que o alvo DM retira a IOP antes desse ponto.

Para destinos baseados em solicitações, a seleção do agendador substitui o que está definido no dispositivo de bloco individual, pois multipathd estará comunicando as solicitações diretamente ao dispositivo SCSI subjacente ( /dev/sg4 , /dev/sg5 , etc).

Informações adicionais:

O aplicativo de E / S do usuário é referido como BIO (block I / O). O BIO é enviado ao agendador / elevador para solicitação de mesclagem / pedido e, em seguida, é enviado como uma "solicitação" para os dispositivos de nível inferior.

Historicamente, dm-multipath foi exclusivamente no nível BIO. Isso criou um problema em que o tráfego de BIOs separados seria mesclado pelo dispositivo de bloco ( sdb , sdf , etc) resultando em algumas filas de solicitação sendo mais curtas / menos usadas do que outros caminhos possíveis. BIO dm-multipath também foi incapaz de ter visibilidade sobre coisas como repetir eventos ou algo parecido, pois estava oculto pelo dispositivo de bloco ( /dev/sda , /dev/sdb , etc).

O objeto sysfs para dispositivo de bloco multipath antes da alteração (RHEL 5):

[root@xxxsat01 dm-1]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.10 (Tikanga)
[root@xxxsat01 ~]# uname -r
2.6.18-371.8.1.el5
[root@xxxsat01 dm-1]# cat dev
253:1
[root@xxxsat01 dm-1]# ll
total 0
-r--r--r-- 1 root root 4096 Jan 29 13:54 dev
drwxr-xr-x 2 root root    0 Apr 29  2014 holders
-r--r--r-- 1 root root 4096 Jan 29 13:54 range
-r--r--r-- 1 root root 4096 Jan 29 13:54 removable
-r--r--r-- 1 root root 4096 Jan 29 13:54 size
drwxr-xr-x 2 root root    0 Jan 25 06:25 slaves
-r--r--r-- 1 root root 4096 Jan 29 13:54 stat
lrwxrwxrwx 1 root root    0 Jan 29 13:54 subsystem -> ../../block
--w------- 1 root root 4096 Jan 29 13:54 uevent

Pós-alteração (RHEL 6):

[root@xxxlin01 dm-1]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
[root@xxxlin01 ~]# uname -r
2.6.32-431.3.1.el6.x86_64
[root@xxxlin01 dm-1]# cat dev
253:1
[root@xxxlin01 dm-1]# ll
total 0
-r--r--r-- 1 root root 4096 Jan 29 13:58 alignment_offset
lrwxrwxrwx 1 root root    0 Jan 29 13:58 bdi -> ../../bdi/253:1
-r--r--r-- 1 root root 4096 Jan 29 13:58 capability
-r--r--r-- 1 root root 4096 Jan 29 13:58 dev
-r--r--r-- 1 root root 4096 Jan 29 13:58 discard_alignment
drwxr-xr-x 2 root root    0 Jan 29 13:58 dm
-r--r--r-- 1 root root 4096 Jan 29 13:58 ext_range
drwxr-xr-x 2 root root    0 Jan 29 13:58 holders
-r--r--r-- 1 root root 4096 Jan 29 13:58 inflight
drwxr-xr-x 2 root root    0 Jan 29 13:58 power
drwxr-xr-x 2 root root    0 Jan 29 13:58 queue
-r--r--r-- 1 root root 4096 Jan 29 13:58 range
-r--r--r-- 1 root root 4096 Jan 29 13:58 removable
-r--r--r-- 1 root root 4096 Jan 29 13:58 ro
-r--r--r-- 1 root root 4096 Jan 29 13:58 size
drwxr-xr-x 2 root root    0 Jan 29 13:58 slaves
-r--r--r-- 1 root root 4096 Jan 29 13:58 stat
lrwxrwxrwx 1 root root    0 Jan 29 13:58 subsystem -> ../../../../class/block
drwxr-xr-x 2 root root    0 Jan 29 13:58 trace
-rw-r--r-- 1 root root 4096 Jan 29 13:58 uevent

Como o kernel não sabe quais alvos individuais ele apresenta os mesmos atributos sysfs, independentemente do tipo de dispositivo mapeador de dispositivos que ele é. Como o pedido é então retransmitido para os dispositivos em nível de bloco, o agendador do mapeador de dispositivos nunca é chamado e, portanto, essa configuração é essencialmente um noop com outros destinos de dm.

Leitura adicional:

por 29.01.2015 / 21:21