Array RAID in NVMe

Array RAID in NVMe
In questu articulu parlemu di e diverse manere di urganizà arrays RAID, è ancu mostranu unu di i primi controller RAID hardware cù supportu NVMe.

Tutta a varietà di applicazioni di a tecnulugia RAID si trova in u segmentu di u servitore. In u segmentu di u cliente, solu u software RAID0 o RAID1 nantu à dui dischi hè più spessu usatu.

Questu articulu furnisce una breve panoramica di a tecnulugia RAID, un breve tutoriale nantu à cumu creà arrays RAID cù trè strumenti diffirenti, è un paragone di u rendiment di u discu virtuale cù ogni metudu.

Cosa hè RAID?

Wikipedia dà una definizione cumpleta di a tecnulugia RAID:

RAID (eng. Matrice ridondante di Dischi Indipendenti - Array redundante di dischi indipendenti (indipendenti) - Tecnulugia di virtualizazione di dati per cumminà parechji dispositi di discu fisicu in un modulu logicu per aumentà a tolleranza di difetti è u rendiment.

A cunfigurazione di l'arrays di discu è e tecnulugii utilizati dipendenu da a scelta Livellu RAID. I livelli RAID sò standardizati in a specificazione Format di dati di discu RAID cumuni. Descrive assai livelli RAID, ma i più cumuni sò RAID0, RAID1, RAID5 è RAID6.

RAID0o Stripes, hè un livellu RAID chì combina duie o più unità fisiche in una unità logica. U voluminu di u discu logicu hè uguali à a summa di i volumi di i dischi fisichi inclusi in u array. Ùn ci hè micca redundanza à questu livellu RAID, è u fallimentu di una unità pò esse risultatu in a perdita di tutti i dati in u discu virtuale.

livellu RAID1o emiliana, crea copie identiche di dati nantu à dui o più dischi. A dimensione di u discu virtuale ùn supera micca a dimensione minima di i dischi fisichi. I dati nantu à u discu virtuale RAID1 seranu dispunibili finu à chì almenu un discu fisicu da l'array hè operativu. Utilizà RAID1 aghjusta a redundanza, ma hè una suluzione piuttostu caru, postu chì in arrays di dui o più dischi a capacità di solu unu hè dispunibule.

livellu RAID5 risolve u prublema di u costu altu. Per creà un array cù u nivellu RAID5, avete bisognu di almenu 3 dischi, è l'array hè resistente à u fallimentu di un discu. I dati in RAID5 sò almacenati in blocchi cù checksums. Ùn ci hè micca una divisione stretta trà i dischi di dati è i dischi di checksum. Checksums in RAID5 sò u risultatu di una operazione XOR appiicata à i blocchi N-1, ognuna pigliata da un discu differenti.

Ancu l'array RAID aumentanu a redundanza è furnisce a redundanza, ùn sò micca adattati per almacenà backups.

Dopu una breve escursione in i tipi di arrays RAID, pudete passà à i dispositi è i prugrammi chì permettenu di assemblà è aduprà arrays di discu.

Tipi di controller RAID

Ci hè duie manere di creà è aduprà array RAID: hardware è software. Avemu da cunsiderà i seguenti suluzioni:

  • RAID di u software Linux.
  • Intel® Virtual RAID nantu à CPU.
  • LSI MegaRAID 9460-8i.

Innota chì a suluzione Intel® corre nantu à un chipset, chì pone a quistione di s'ellu hè una suluzione hardware o software. Per esempiu, l'hypervisor VMWare ESXi cunsidereghja u software VROC è ùn sustene micca ufficialmente.

RAID di u software Linux

L'array RAID di u software in a famiglia di Linux OS sò una soluzione abbastanza cumuna in i segmenti di u cliente è di u servitore. Tuttu ciò chì avete bisognu di creà un array hè l'utilità mdadm è uni pochi di dispositivi di bloccu. L'unicu requisitu Linux Software RAID posti nantu à e unità chì usa hè di esse un dispositivu di bloccu accessibile à u sistema.

L'absenza di costi per l'equipaggiu è u software hè un vantaghju evidenti di stu metudu. Linux Software RAID urganizeghja arrays di discu à u costu di u tempu di CPU. A lista di i livelli RAID supportati è u statutu di l'array di discu attuale pò esse vistu in u schedariu mdstat, chì si trova in a radica procfs:

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

U supportu per i livelli RAID hè aghjuntu cunnessu u modulu di kernel appropritatu, per esempiu:

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

Tutte l'operazioni cù arrays di discu sò realizate attraversu l'utilità di linea di cumanda mdadm. L'array di discu hè assemblatu in un cumandamentu:

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

Dopu avè eseguitu stu cumandamentu, u dispositivu di bloccu /dev/md0 appariscerà in u sistema, chì vi rapprisenta cum'è un discu virtuale.

Intel® Virtual RAID nantu à CPU

Array RAID in NVMeChiave hardware standard Intel® VROC
Intel® Virtual RAID On CPU (VROC) hè una tecnulugia hardware è software per creà arrays RAID basati nantu à chipset Intel®. Sta tecnulugia hè dispunibule principalmente per e schede madri chì supportanu i processori Intel® Xeon® Scalable. Per automaticamente, VROC ùn hè micca dispunibule. Per attivà, duvete installà una chjave di licenza di hardware VROC.

A licenza VROC standard permette di creà arrays di discu cù livelli RAID 0, 1 è 10. A versione premium espansione sta lista cù supportu RAID5.

A tecnulugia Intel® VROC nantu à e schede madri muderne funziona in cunjunzione cù u Dispositivu di Gestione di Volume Intel® (VMD), chì furnisce capacità di scambià à caldu per unità NVMe.

Array RAID in NVMeLicenza Standard Intel® VROC L'arrays sò cunfigurati per mezu di l'Utilità di Setup quandu u servitore boots. Nantu à a tabulazione Advanced L'elementu Intel® Virtual RAID on CPU appare, induve pudete cunfigurà arrays di discu.

Array RAID in NVMeCreazione di un array RAID1 nantu à duie unità
A tecnulugia Intel® VROC hà i so propiu assi in manica. L'arrays di discu custruiti cù VROC sò cumpatibili cù Linux Software RAID. Questu significa chì u statu di l'arrays pò esse monitoratu in /proc/mdstat è amministratu attraversu mdadm. Questa "funzione" hè ufficialmente supportata da Intel. Dopu avè assemblatu RAID1 in Setup Utility, pudete osservà a sincronizazione di unità in u SO:

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>

Nota chì ùn pudete micca assemblà arrays in VROC usendu mdadm (l'arrays assemblati seranu Linux SW RAID), ma pudete cambià i dischi in elli è disassemble l'arrays.

LSI MegaRAID 9460-8i

Array RAID in NVMeApparizione di u controller LSI MegaRAID 9460-8i
U controller RAID hè una soluzione hardware stand-alone. U controller funziona solu cù unità cunnessi direttamente à questu. Stu controller RAID supporta finu à 24 unità NVMe. Hè u supportu NVMe chì distingue stu controller da parechji altri.

Array RAID in NVMeMenu principale di u controller hardware
Quandu si usa u modu UEFI, i paràmetri di u controller sò integrati in Setup Utility. Comparatu à VROC, u menu di u controller di hardware pare assai più cumplessu.

Array RAID in NVMeCrea RAID1 nantu à dui dischi
Spiegà cumu cunfigurà arrays di discu nantu à un controller di hardware hè un tema piuttostu delicatu è puderia esse u mutivu di un articulu cumpletu. Quì ci limiteremu solu per creà RAID0 è RAID1 cù paràmetri predeterminati.

I dischi cunnessi à u controller hardware ùn sò micca visibili à u sistema operatore. Invece, u controller "maschera" tutte e matrici RAID cum'è unità SAS. Drives cunnessi à u controller, ma micca parte di a matrice di discu, ùn saranu micca accessibili da u SO.

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.

Malgradu esse disfrazati cum'è unità SAS, i matrici NVMe operanu à velocità PCIe. Tuttavia, sta funzione vi permette di boot da NVMe in Legacy.

banc d'essai

Ogni metudu di urganizà arrays di discu hà u so propiu fisicu pro è cuns. Ma ci hè una differenza di prestazione quandu travaglia cù arrays di discu?

Per ottene a massima equità, tutte e teste seranu realizate nantu à u stessu servitore. A so cunfigurazione:

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

L'unità di teste sò P4510, a mità di quale hè cunnessu à a scheda madre, è l'altra mità à u controller RAID. U M.2 hè in esecuzione Ubuntu 20.04 è i testi seranu eseguiti cù a versione fio 3.16.

Prucessioni

Prima di tuttu, andemu à verificà i ritardi quandu u travagliu cù u discu. A prova hè eseguita in un filu, a dimensione di u bloccu hè 4 KB. Ogni prova dura 5 minuti. Prima di principià, u dispusitivu di bloccu currispundenti hè stabilitu à nimu cum'è u pianificatore I / O. U cumandimu fio s'assumiglia cusì:

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

Da i risultati fio pigliamu clat 99.00%. I risultati sò mostrati in a tabella sottu.

Lettura aleatoria, μs
Registrazione casuale, μs

u discu
112
78

Linux SW RAID, RAID0
113
45

VROC, RAID0
112
46

LSI, RAID0
122
63

Linux SW RAID, RAID1
113
48

VROC, RAID1
113
45

LSI, RAID1
128
89

In più di i ritardi in l'accessu à e dati, mi piacerebbe vede u funziunamentu di l'unità virtuale è paragunà cù u rendiment di un discu fisicu. Cumanda per eseguisce fio:

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

U rendiment hè misuratu in termini di operazioni I/O. I risultati sò presentati in a tavula sottu.

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

u discu
11300
40700
453000
105000

Linux SW RAID, RAID0
11200
52000
429000
232000

VROC, RAID0
11200
52300
441000
162000

LSI, RAID0
10900
44200
311000
160000

Linux SW RAID, RAID1
10000
48600
395000
147000

VROC, RAID1
10000
54400
378000
244000

LSI, RAID1
11000
34300
229000
248000

Hè faciule per vede chì l'usu di un controller di hardware si traduce in una latenza aumentata è un successu di rendiment cumparatu cù soluzioni software.

cunchiusioni

Utilizà suluzioni hardware per creà arrays di discu da dui dischi pare irrazionale. Tuttavia, ci sò compiti induve l'usu di i cuntrolli RAID hè ghjustificatu. Cù l'avventu di cuntrolli chì supportanu l'interfaccia NVMe, l'utilizatori anu l'uppurtunità di utilizà SSD più veloci in i so prughjetti.

Array RAID in NVMe

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Aduprate soluzioni RAID?

  • 29,6%Iè, suluzioni hardware32

  • 50,0%Iè, suluzioni software54

  • 16,7%No 18

  • 3,7%Nisun RAID necessariu 4

108 utilizatori anu vutatu. 14 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment