Array RAID su NVMe

Array RAID su NVMe
In questo articolo parleremo di diversi modi per organizzare gli array RAID e mostreremo anche uno dei primi controller RAID hardware con supporto NVMe.

Tutta la varietà di applicazioni della tecnologia RAID si trova nel segmento dei server. Nel segmento client viene spesso utilizzato solo il software RAID0 o RAID1 su due dischi.

Questo articolo fornirà una breve panoramica della tecnologia RAID, un breve tutorial su come creare array RAID utilizzando tre diversi strumenti e un confronto delle prestazioni del disco virtuale utilizzando ciascun metodo.

Che cos'è il RAID?

Wikipedia fornisce una definizione completa della tecnologia RAID:

RAID (Inglese Array ridondante di dischi indipendenti - array ridondante di dischi indipendenti (indipendenti)) - tecnologia di virtualizzazione dei dati per combinare diversi dispositivi disco fisico in un modulo logico per aumentare la tolleranza agli errori e le prestazioni.

La configurazione degli array di dischi e le tecnologie utilizzate dipendono da quella selezionata Livello RAID. I livelli RAID sono standardizzati nelle specifiche Formato comune dei dati del disco RAID. Descrive molti livelli RAID, ma i più comuni sono RAID0, RAID1, RAID5 e RAID6.

RAID0O strisce, è un livello RAID che combina due o più unità fisiche in un'unica unità logica. Il volume del disco logico è uguale alla somma dei volumi dei dischi fisici inclusi nell'array. Non esiste ridondanza a questo livello RAID e il guasto di un'unità può comportare la perdita di tutti i dati nel disco virtuale.

Livello RAID1O Specchio, crea copie identiche di dati su due o più dischi. La dimensione del disco virtuale non supera la dimensione minima dei dischi fisici. I dati sul disco virtuale RAID1 saranno disponibili finché almeno un disco fisico dell'array sarà operativo. L'uso di RAID1 aggiunge ridondanza, ma è una soluzione piuttosto costosa, poiché negli array di due o più dischi è disponibile la capacità di uno solo.

Livello RAID5 risolve il problema dei costi elevati. Per creare un array con livello RAID5, sono necessari almeno 3 dischi e l'array è resistente al guasto di un disco. I dati in RAID5 vengono archiviati in blocchi con checksum. Non esiste una divisione rigida tra dischi dati e dischi checksum. I checksum in RAID5 sono il risultato di un'operazione XOR applicata a N-1 blocchi, ciascuno preso da un disco diverso.

Sebbene gli array RAID aumentino la ridondanza e forniscano ridondanza, non sono adatti per l'archiviazione dei backup.

Dopo una breve escursione sui tipi di array RAID, è possibile passare ai dispositivi e ai programmi che consentono di assemblare e utilizzare array di dischi.

Tipi di controller RAID

Esistono due modi per creare e utilizzare gli array RAID: hardware e software. Considereremo le seguenti soluzioni:

  • RAID software Linux.
  • Intel® Virtual RAID sulla CPU.
  • LSI MegaRAID 9460-8i.

Si noti che la soluzione Intel® funziona su un chipset, il che solleva la questione se si tratti di una soluzione hardware o software. Ad esempio, l'hypervisor VMWare ESXi considera il software VROC e non lo supporta ufficialmente.

RAID software Linux

Gli array RAID software nella famiglia dei sistemi operativi Linux sono una soluzione abbastanza comune sia nel segmento client che in quello server. Tutto ciò che serve per creare un array è l'utilità mdadm e alcuni dispositivi a blocchi. L'unico requisito che Linux Software RAID pone sulle unità che utilizza è che siano un dispositivo a blocchi accessibile al sistema.

L'assenza di costi per attrezzature e software è un evidente vantaggio di questo metodo. Linux Software RAID organizza gli array di dischi a scapito del tempo della CPU. L'elenco dei livelli RAID supportati e lo stato degli array di dischi correnti possono essere visualizzati nel file mdstat, che si trova nella root procfs:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] 
unused devices: <none>

Il supporto per i livelli RAID viene aggiunto collegando il modulo kernel appropriato, ad esempio:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
unused devices: <none>

Tutte le operazioni con gli array di dischi vengono eseguite tramite l'utilità della riga di comando mdadm. L'array di dischi viene assemblato in un comando:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

Dopo aver eseguito questo comando, nel sistema apparirà il dispositivo a blocchi /dev/md0, che ti rappresenta come disco virtuale.

Intel® Virtual RAID sulla CPU

Array RAID su NVMeChiave hardware standard Intel® VROC
Intel® Virtual RAID On CPU (VROC) è una tecnologia hardware e software per la creazione di array RAID basati su chipset Intel®. Questa tecnologia è disponibile principalmente per le schede madri che supportano i processori scalabili Intel® Xeon®. Per impostazione predefinita, VROC non è disponibile. Per attivarlo è necessario installare una chiave di licenza hardware VROC.

La licenza VROC standard consente di creare array di dischi con livelli RAID 0, 1 e 10. La versione premium espande questo elenco con il supporto RAID5.

La tecnologia Intel® VROC sulle moderne schede madri funziona insieme a Intel® Volume Management Device (VMD), che fornisce funzionalità di hot-swap per le unità NVMe.

Array RAID su NVMeLicenza standard Intel® VROC Gli array vengono configurati tramite Setup Utility all'avvio del server. Sulla scheda Tecnologia Viene visualizzata la voce Intel® Virtual RAID su CPU, in cui è possibile configurare gli array di dischi.

Array RAID su NVMeCreazione di un array RAID1 su due unità
La tecnologia Intel® VROC ha i suoi assi nella manica. Gli array di dischi creati utilizzando VROC sono compatibili con Linux Software RAID. Ciò significa che lo stato degli array può essere monitorato in /proc/mdstat e amministrato tramite mdadm. Questa "funzionalità" è ufficialmente supportata da Intel. Dopo aver assemblato RAID1 in Setup Utility, è possibile osservare la sincronizzazione delle unità nel sistema operativo:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocks super external:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inactive nvme1n1[1](S) nvme2n1[0](S)
      10402 blocks super external:imsm
       
unused devices: <none>

Tieni presente che non puoi assemblare array su VROC utilizzando mdadm (gli array assemblati saranno Linux SW RAID), ma puoi cambiare i dischi al loro interno e smontare gli array.

LSI MegaRAID 9460-8i

Array RAID su NVMeAspetto del controller LSI MegaRAID 9460-8i
Il controller RAID è una soluzione hardware autonoma. Il controller funziona solo con unità collegate direttamente ad esso. Questo controller RAID supporta fino a 24 unità NVMe. È il supporto NVMe che distingue questo controller da molti altri.

Array RAID su NVMeMenu principale del controller hardware
Quando si utilizza la modalità UEFI, le impostazioni del controller sono integrate nella Setup Utility. Rispetto a VROC, il menu del controller hardware sembra molto più complesso.

Array RAID su NVMeCreazione RAID1 su due dischi
Spiegare come configurare gli array di dischi su un controller hardware è un argomento piuttosto delicato e potrebbe essere il motivo per un articolo a tutti gli effetti. Qui ci limiteremo semplicemente a creare RAID0 e RAID1 con le impostazioni predefinite.

I dischi collegati al controller hardware non sono visibili al sistema operativo. Invece, il controller "maschera" tutti gli array RAID come unità SAS. Le unità collegate al controller, ma che non fanno parte dell'array di dischi, non saranno accessibili dal sistema operativo.

root@grindelwald:~# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               AVAGO
Product:              MR9460-8i
Revision:             5.14
Compliance:           SPC-3
User Capacity:        1,999,844,147,200 bytes [1.99 TB]
Logical block size:   512 bytes
Rotation Rate:        Solid State Device
Logical Unit id:      0x000000000000000000000000000000
Serial number:        00000000000000000000000000000000
Device type:          disk
Local Time is:        Sun Oct 11 16:27:59 2020 MSK
SMART support is:     Unavailable - device lacks SMART capability.

Nonostante siano camuffati da unità SAS, gli array NVMe funzioneranno a velocità PCIe. Tuttavia, questa funzionalità ti consente di eseguire l'avvio da NVMe in Legacy.

banco di prova

Ogni metodo di organizzazione degli array di dischi presenta vantaggi e svantaggi fisici. Ma c'è una differenza di prestazioni quando si lavora con gli array di dischi?

Per ottenere la massima equità, tutti i test saranno condotti sullo stesso server. La sua configurazione:

  • 2x Intel® Xeon® 6240;
  • 12 DDR4-2666 da 16 GB;
  • LSI MegaRAID 9460-8i;
  • Chiave hardware standard Intel® VROC;
  • 4 SSD Intel® DC P4510 U.2 da 2 TB;
  • 1xSamsung 970 EVO Plus M.2 500 GB.

Le unità di prova sono le P4510, metà delle quali sono collegate alla scheda madre e l'altra metà al controller RAID. L'M.2 esegue Ubuntu 20.04 e i test verranno eseguiti utilizzando la versione 3.16 di fio.

Test

Prima di tutto, controlliamo i ritardi quando si lavora con il disco. Il test viene eseguito in un thread, la dimensione del blocco è 4 KB. Ogni prova dura 5 minuti. Prima di iniziare, il dispositivo a blocchi corrispondente è impostato su none come scheduler I/O. Il comando fio è simile al seguente:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --iodepth=1 --loops=1000 --runtime=300  --rw=<mode> --filename=<blkdev>

Dai risultati fio preleviamo clat 99.00%. I risultati sono mostrati nella tabella seguente.

Lettura casuale, μs
Registrazione casuale, μs

disco
112
78

Software Linux RAID, RAID0
113
45

VROC, RAID0
112
46

LSI, RAID0
122
63

Software Linux RAID, RAID1
113
48

VROC, RAID1
113
45

LSI, RAID1
128
89

Oltre ai ritardi nell'accesso ai dati, vorrei vedere le prestazioni delle unità virtuali e confrontarle con le prestazioni di un disco fisico. Comando per eseguire fio:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth=<threads> --rw=<mode> --filename=<blkdev>

Le prestazioni vengono misurate in termini di operazioni di I/O. I risultati sono presentati nella tabella seguente.

Lettura casuale 1 thread, IOPS
Scrittura casuale 1 thread, IOPS
Lettura casuale 128 thread, IOPS
Scrittura casuale 128 thread, IOPS

disco
11300
40700
453000
105000

Software Linux RAID, RAID0
11200
52000
429000
232000

VROC, RAID0
11200
52300
441000
162000

LSI, RAID0
10900
44200
311000
160000

Software Linux RAID, RAID1
10000
48600
395000
147000

VROC, RAID1
10000
54400
378000
244000

LSI, RAID1
11000
34300
229000
248000

È facile vedere che l’utilizzo di un controller hardware comporta una maggiore latenza e un calo delle prestazioni rispetto alle soluzioni software.

conclusione

L'utilizzo di soluzioni hardware per creare array di dischi da due dischi sembra irrazionale. Tuttavia, ci sono attività in cui è giustificato l'uso di controller RAID. Con l'avvento dei controller che supportano l'interfaccia NVMe, gli utenti hanno l'opportunità di utilizzare SSD più veloci nei loro progetti.

Array RAID su NVMe

Solo gli utenti registrati possono partecipare al sondaggio. AccediPer favore.

Utilizzi soluzioni RAID?

  • 29,6%Sì, soluzioni hardware32

  • 50,0%Sì, soluzioni software54

  • 16,7%No18

  • 3,7%Nessun RAID necessario4

108 utenti hanno votato. 14 utenti si sono astenuti.

Fonte: habr.com

Aggiungi un commento