RAID-arrays op NVMe

RAID-arrays op NVMe
In dit artikel bespreken we verschillende manieren om RAID-arrays te organiseren en laten we een van de eerste hardware RAID-controllers zien die NVMe ondersteunt.

De verscheidenheid aan toepassingen van RAID-technologie komt voor in de serversegment. In de klantenomgeving wordt meestal uitsluitend software-RAID0 of RAID1 met twee schijven gebruikt.

In dit artikel vindt u een korte overzicht van RAID-technologie, een kleine handleiding voor het creëren van RAID-arrays met behulp van drie verschillende tools en een vergelijking van de prestaties van virtuele schijven met elk van de methoden.

Wat is RAID?

KB van Fortinet geeft een uitgebreide definitie van RAID-technologie:

RAID (eng. Redundant Array of Independent Disks is een technologie voor gegevensvirtualisatie die meerdere fysieke schijfapparaten samenvoegt tot een logische module om de betrouwbaarheid en prestaties te verhogen.

De configuratie van schijfarrays en de gebruikte technologieën hangen af van het gekozen RAID-niveau (RAID level). RAID-niveaus zijn gestandaardiseerd in de specificatie Common RAID Disk Data Format. Het beschrijft meerdere RAID-niveaus, maar de meest voorkomende zijn RAID0, RAID1, RAID5 en RAID6.

RAID0, of Stripes, is een RAID-niveau dat twee of meer fysieke schijven combineert tot één logische schijf. De capaciteit van de logische schijf is gelijk aan de som van de capaciteiten van de fysieke schijven die in het array zijn opgenomen. Op dit RAID-niveau is er geen redundantie en kan het falen van één schijf leiden tot het verlies van alle gegevens op de virtuele schijf.

Niveau RAID1, of Mirror, maakt identieke kopieën van gegevens op twee of meer schijven. De capaciteit van de virtuele schijf overschrijdt niet de capaciteit van de kleinste fysieke schijf. Gegevens op de virtuele schijf RAID1 zijn toegankelijk zolang ten minste één fysieke schijf in de array operationeel is. Het gebruik van RAID1 voegt redundantie toe, maar het is een vrij dure oplossing, omdat in arrays van twee of meer schijven alleen de capaciteit van één beschikbaar is.

Niveau RAID5 lost a bit of cost. To create an array with RAID5, at least 3 disks are necessary, while the array is resistant to the failure of one disk. Data in RAID5 is stored in blocks with checksums. There is no strict division between disks with data and disks with checksums. Checksums in RAID5 are the result of the XOR operation applied to N-1 blocks, each taken from its disk.

Although RAID arrays increase redundancy and provide backup, they are not suitable for storing backups.

After a brief overview of the types of RAID arrays, we can move on to the devices and programs that allow us to create and use disk arrays.

Types of RAID controllers

There are two ways to create and use RAID arrays: hardware and software. We will consider the following solutions:

  • Linux Software RAID.
  • Intel® Virtual RAID On CPU.
  • LSI MegaRAID 9460-8i.

It should be noted that the Intel® solution operates on the chipset, which raises the question of whether it is a hardware or software solution. For example, the VMWare ESXi hypervisor considers VROC to be software and does not officially support it.

Linux Software RAID

Software RAID arrays in the Linux OS family are a fairly common solution both in the client segment and in servers. All that is needed to create an array is the mdadm utility and several block devices. The only requirement that Linux Software RAID has for the drives used is that they must be block devices accessible to the system.

The absence of costs for hardware and software is an obvious advantage of this method. Linux Software RAID organizes disk arrays at the cost of CPU time. A list of supported RAID levels and the state of current disk arrays can be viewed in the mdstat file located in the root of procfs:

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

Support for RAID levels is added by loading the appropriate kernel module, for example:

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

All operations with disk arrays are performed through the command line utility mdadm. Assembling a disk array is done in one command:

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

Na het uitvoeren van dit commando ontstaat in het systeem een blokapparaat /dev/md0, dat een virtuele schijf vertegenwoordigt.

Intel® Virtual RAID On CPU

RAID-arrays op NVMeIntel® VROC Standard Hardware Key
Intel® Virtual RAID On CPU (VROC) is een software-hardware technologie voor het creëren van RAID-arrays op basis van Intel® chipsets. Deze technologie is voornamelijk beschikbaar voor moederborden die Intel® Xeon® Scalable-processors ondersteunen. Standaard is VROC niet beschikbaar. Om het te activeren, moet een hardwarelicentie voor VROC worden geïnstalleerd.

De standaard VROC-licentie maakt het mogelijk om schijfarrays met RAID-niveaus 0, 1 en 10 te creëren. De premiumversie breidt deze lijst uit met ondersteuning voor RAID5.

De technologie Intel® VROC werkt met moderne moederborden samen met het Intel® Volume Management Device (VMD), dat de mogelijkheid voor hot-swapping van NVMe-schijven biedt.

RAID-arrays op NVMeIntel® VROC met standaardlicentie De configuratie van de arrays gebeurt via het Setup Utility tijdens het opstarten van de server. Onder de tab Geavanceerd verschijnt het item Intel® Virtual RAID on CPU, waar schijfarrays kunnen worden geconfigureerd.

RAID-arrays op NVMeCreëren van een RAID1-array met twee schijven
De technologie Intel® VROC heeft enkele 'troeven'. De schijfarrays die met VROC zijn opgebouwd, zijn compatibel met Linux Software RAID. Dit betekent dat de status van de arrays kan worden gevolgd in /proc/mdstat, en beheerd kan worden via mdadm. Deze 'eigenschap' wordt officieel ondersteund door Intel. Na het opbouwen van RAID1 in het Setup Utility kan de synchronisatie van schijven in het OS worden waargenomen:

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>

Merk op dat met mdadm geen arrays op VROC kunnen worden opgebouwd (gebouwde arrays worden Linux SW RAID), maar dat schijven kunnen worden vervangen en arrays kunnen worden ontmanteld.

LSI MegaRAID 9460-8i

RAID-arrays op NVMeUiterlijk van de LSI MegaRAID 9460-8i controller
De RAID-controller is een zelfstandige hardwareoplossing. De controller werkt alleen met schijven die direct op hem zijn aangesloten. Deze RAID-controller ondersteunt tot 24 NVMe-schijven. Het ondersteunen van NVMe maakt deze controller onderscheidend ten opzichte van vele andere.

RAID-arrays op NVMeHoofdmenu van de hardwarecontroller
In de UEFI-modus worden de controllerinstellingen geïntegreerd in de Setup Utility. In vergelijking met VROC lijkt het menu van de hardwarecontroller aanzienlijk complexer.

RAID-arrays op NVMeRAID1 aanmaken op twee schijven
Het uitleggen van de configuratie van schijfarrays op de hardwarecontroller is een vrij delicate zaak en kan als onderwerp voor een volledige artikel dienen. Hier beperken we ons tot het aanmaken van RAID0 en RAID1 met standaardinstellingen.

Schijven die op de hardwarecontroller zijn aangesloten, zijn niet zichtbaar voor het besturingssysteem. In plaats daarvan "maskeert" de controller alle RAID-arrays als SAS-schijven. Schijven die op de controller zijn aangesloten, maar geen deel uitmaken van het schijfarray, zijn niet toegankelijk voor het besturingssysteem.

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

=== START VAN INFORMATIESECTIE ===
Leverancier:           AVAGO
Product:              MR9460-8i
Versie:              5.14
Compliance:           SPC-3
Gebruikerscapaciteit: 1.999.844.147.200 bytes [1,99 TB]
Logische blokgrootte: 512 bytes
Rotatiesnelheid:      Solid State Device
Logisch Eenheid id:   0x000000000000000000000000000000
Serienummer:         00000000000000000000000000000000
Apparaat type:       schijf
Lokale Tijd:         Zon Okt 11 16:27:59 2020 MSK
SMART-ondersteuning is: Ongeschikt - apparaat mist SMART-capaciteit.

Ondanks de maskering als SAS-schijven, zullen arrays met NVMe werken op PCIe-snelheden. Deze eigenschap maakt het echter mogelijk om op te starten vanaf NVMe in Legacy.

Teststand

Elke methode om schijfarrays te organiseren heeft zijn eigen fysieke voor- en nadelen. Maar is er een verschil in prestaties bij het werken met schijfarrays?

Om maximale rechtvaardigheid te bereiken, worden alle tests uitgevoerd op dezelfde server. De configuratie is als volgt:

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

De testobjecten zijn P4510, waarvan de ene helft op het moederbord is aangesloten en de andere op de RAID-controller. Op de M.2 is het besturingssysteem Ubuntu 20.04 geïnstalleerd, en de tests zullen worden uitgevoerd met fio versie 3.16.

Testen

Eerst zullen we de latencies bij schijfgebruik controleren. De test wordt uitgevoerd in één thread, met een blokgrootte van 4 KB. Elke test duurt 5 minuten. Voorafgaand aan de test wordt voor het betreffende blokapparaat none ingesteld als I/O-scheduler. De fio-opdracht is als volgt:

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

Uit de resultaten van fio nemen we clat 99,00%. De resultaten zijn weergegeven in de onderstaande tabel.

Toevallig lezen, µs
Toevallige schrijfacties, µs

Schijf
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

Naast de latenties bij data-toegang willen we ook de prestaties van virtuele schijven zien en vergelijken met de prestaties van een fysieke schijf. De opdracht om fio uit te voeren:

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

De prestaties worden gemeten in het aantal invoer- en uitvoerbewerkingen. De resultaten zijn in de onderstaande tabel gepresenteerd.

Toevallig lezen 1 thread, IOPS
Toevallige schrijfacties 1 thread, IOPS
Toevallig lezen 128 threads, IOPS
Toevallige schrijfacties 128 threads, IOPS

Schijf
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

Het is gemakkelijk op te merken dat het gebruik van een hardwarecontroller leidt tot hogere latenties en prestatieverlies in vergelijking met softwareoplossingen.

Conclusie

Het gebruik van hardwareoplossingen om schijven van twee schijven samen te stellen lijkt niet rationeel. Er zijn echter taken waarbij het gebruik van RAID-controllers gerechtvaardigd is. Met de opkomst van controllers die NVMe-interface ondersteunen, hebben gebruikers de mogelijkheid om snellere SSD's in hun projecten te gebruiken.

RAID-arrays op NVMe

Alleen geregistreerde gebruikers kunnen deelnemen aan de enquête. Log in, alstublieft.

Gebruikt u RAID-oplossingen?

  • 29,6%Ja, hardwareoplossingen32

  • 50,0%Ja, softwareoplossingen54

  • 16,7%Nee18

  • 3,7%RAID is niet nodig4

108 gebruikers hebben gestemd. 14 gebruikers hebben zich onthouden.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster