====== Multipath I/O ====== In Linux le funzionalità di [[wp>Multipath_I/O|multipath I/O]] sono state rimosse dai singoli driver delle schede [[wp>Fibre_Channel|Fibre Channel]], dove erano stati tradizionalmente implementati dai vari vendor. Adesso il multipath viene gestito dal modulo kernel **''dm_multipath''**, che funziona tramite [[wp>Device_mapper|device mapper]]. Ad esempio - per le schede QLogic - il parametro **''ql2xfailover''** del modulo **''qla2xxx''** è deprecato (se non del tutto rimosso, come nel kernel 2.6.30). ===== Installazione ===== Oltre ai moduli kernel dei controller HBA e al modulo ''dm_multipath'', è necessario installare i tool userspace contenuti nel pacchetto Debian **multipath-tools**. Dopo aver caricato il modulo **''qla2xxx''** risulta disponibile un device SCSI per ogni path. Ad esempio su un sistema con due controller HBA QLogic, ciascuno dei quali connesso con due patch, vengono rilevati quattro device SCSI: [1009446.698632] sd 0:0:0:1: [sda] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.698871] sd 0:0:1:1: [sdb] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.724772] sd 1:0:0:1: [sdc] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.725049] sd 1:0:1:1: [sdd] 209715200 512-byte hardware sectors: (107 GB/100 GiB) All'interno di ciascun disco esiste una partizione (sda1, sdb1, sdc1, sdd1) che occupa l'intero spazio disponibile. In realtà si tratta di **un'unico volume** condiviso dalla [[wp>Storage_area_network|SAN]], raggiungibile tramite quattro path distinte. Prima di usarlo sotto Linux bisogna //aggregare// le path. ===== Assemblaggio ===== L'assemblaggio delle quattro path in un unico device (//coalescing//) viene eseguito da **''multipath(8)''**, avviato automaticamente da ''/etc/init.d/multipath-tools-boot''. Se il probing automatico dei device multipath non funziona, si possono dare indicazioni nel file di configurazione **''/etc/multipath.conf''**. Per vedere i device assemblati e la topologia multipath: multipath -ll 3600508b4000ce4cd0000d00000200000dm-0 HP ,HSV300 [size=100G][features=0][hwhandler=0] \_ round-robin 0 [prio=1][active] \_ 0:0:0:1 sda 8:0 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 0:0:1:1 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 1:0:1:1 sdd 8:48 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 1:0:0:1 sdc 8:32 [active][ready] Informazioni simili sono fornite dal sottosistema device mapper, tramite **''dmsetup''**: dmsetup --tree ls 3600508b4000ce4cd0000d00000200000-part1 (254:1) └─3600508b4000ce4cd0000d00000200000 (254:0) ├─ (8:32) ├─ (8:48) ├─ (8:16) └─ (8:0) Tra parentesi abbiamo il (major:minor) number di ogni device, in particolare (8:0) corrisponde a **''/dev/sda''**, (8:16) a **''/dev/sdb''**, ecc. Il device (partizione) da utilizzare è **''/dev/mapper/3600508b4000ce4cd0000d00000200000-part1''**, per comodità viene creato il link simbolico **''/dev/dm-1''**. Per disassemblare tutti i device multipath non in uso: multipath -F ===== Monitoraggio ===== Il monitoraggio viene eseguito dal demone **''multipathd''**, avviato automaticamente da ''/etc/init.d/multipath-tools''. Il file di configurazione è **''/etc/multipath.conf''**. Esiste una modalità //command line// di ''multipathd'', basta avviarlo con lo switch **''-k''** (si esce con Ctrl-D). Dal prompt si dovrebbe poter mettere in stato di fail un path, ecc. Ma non funziona: multipathd -k multipathd> show paths hcil dev dev_t pri dm_st chk_st next_check 0:0:0:1 sda 8:0 1 [undef][ready] [orphan] 0:0:1:1 sdb 8:16 1 [undef][ready] [orphan] 1:0:1:1 sdd 8:48 1 [undef][ready] [orphan] 1:0:0:1 sdc 8:32 1 [undef][ready] [orphan] multipathd> fail path sdd fail ===== Testing ===== Installare i pacchetti Debian: * **parted** * **hdparm** * **sysstat** Il primo contiene **''partprobe(8)''**, necessario per rileggere senza reboot la tabella delle partizioni dopo averla modificata. Con **''hdparm(8)''** si può eseguire un semplice test di performance sul disco. Ecco i risultati sul disco Fibre Channel e sullo Smart Array SCSI: hdparm -T /dev/dm-1 Timing cached reads: 3322 MB in 2.00 seconds = 1661.30 MB/sec hdparm -T /dev/cciss/c0d0p7 Timing cached reads: 3302 MB in 2.00 seconds = 1651.03 MB/sec Con **''iostat(1)''** è possibile monitorare il carico e la path usata. Ecco un esempio catturato durante la copia di svariati giga di dati: iostat 4 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 0.00 0.00 0.00 0 0 sda 424.50 0.00 403848.00 0 1615392 sdb 0.00 0.00 0.00 0 0 sdd 0.00 0.00 0.00 0 0 sdc 0.00 0.00 0.00 0 0 dm-0 49676.25 0.00 397412.00 0 1589648 dm-1 49675.75 0.00 397406.00 0 1589624