Eu tenho o seguinte hardware:
- 2 servidores SuperMicro (128 GB de RAM, 2 AMDs de 8 núcleos)
- 2x / servidor LSI SAS2008 HBAs PCIe MPT-Fusion2 (2 portas SAS por cartão)
- 1x LSI CTS2600 DAS com unidades SAS 24x W.D. 15.7k RPM de 600 GB.
O servidor está executando o OpenSuSE 11.4, com uma compilação personalizada de ferramentas multipath construídas a partir do upstream e incorporando o conjunto de patch do OpenSuSE 11.3. Todas as 4 portas SAS em cada servidor estão conectadas ao DAS, 2 para cada um dos controladores DAS RAID.
O DAS é configurado com 22 unidades em uma faixa RAID10 de 128k. Eu criei um único grupo de 500 GB no array e o exportei para um dos servidores.
O Multipath é configurado para multipath I / O para o LUN de 500 GB exportado para o servidor. Aqui está o arquivo multipath.conf:
defaults {
path_checker "directio"
path_selector "queue-length 0"
path_grouping_policy "multibus"
prio "random"
features "1 queue_if_no_path" #queue IO if all paths are lost
}
multipath -l
output:
pg (360080e50001b658a000005104df8c650) dm-0 LSI,INF-01-00
size=500G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| |- 4:0:0:1 sda 8:0 active undef running
| '- 5:0:0:1 sde 8:64 active undef running
'-+- policy='round-robin 0' prio=0 status=enabled
|- 4:0:1:1 sdc 8:32 active undef running
'- 5:0:1:1 sdg 8:96 active undef running
Observe como para o segundo conjunto de caminhos, "status = enabled", não "status = active" como para os dois primeiros. Agora, uma olhada no iostat mostra que, de fato, estamos usando apenas os dois primeiros caminhos:
Linux 2.6.37.6-0.5-default (slipdb01-primary) 07/07/2011 _x86_64_ (16 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 1.18 441.70 30.44 4748.62 21.58 0.79 1.79 0.24 10.60
sdb 0.00 0.00 0.00 0.00 0.00 0.00 14.22 0.00 83.56 82.92 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 8.06 0.00 334.53 331.73 0.02
sdd 0.00 0.00 0.00 0.00 0.00 0.00 16.99 0.00 98.73 95.76 0.00
sde 0.00 0.00 1.18 441.70 30.43 4747.77 21.58 0.79 1.79 0.24 10.60
sdf 0.00 0.00 0.00 0.00 0.00 0.00 14.43 0.00 77.17 76.66 0.00
sdg 0.00 0.00 0.00 0.00 0.00 0.00 8.06 0.00 301.72 297.05 0.02
sdh 0.00 0.00 0.00 0.00 0.00 0.00 14.29 0.00 83.12 82.69 0.00
sdi 0.00 0.00 0.08 0.48 8.73 35.82 159.00 0.06 99.95 1.08 0.06
sdj 0.00 2311.06 0.00 340.49 0.01 10606.18 62.30 0.04 0.12 0.08 2.83
dm-0 0.02 1353.74 2.36 883.40 60.86 9496.39 21.58 0.95 1.08 0.13 11.20
dm-2 0.00 0.00 2.38 2237.14 60.86 9496.39 8.54 1.90 0.84 0.05 11.20
Pelo que entendi, definir path_grouping_policy como 'multibus' deve equilibrar o IO em TODOS os caminhos, portanto, devo ver quatro caminhos ativos. Se eu alterar path_grouping_policy para 'failover', vejo os mesmos 2 caminhos ativos.
Além disso, observe que eu tenho path_selector definido como 'queue-length 0', mas a saída de 'multipath -l' mostra claramente que está usando round-robin.
Alguém tem alguma idéia sobre por que os multipath-tools não usarão todos os 4 caminhos, e por que ele está ignorando a minha escolha do algoritmo de seleção de caminho?
Muito obrigado ...