RAID-arrayer på NVMe

RAID-arrayer på NVMe
I den här artikeln kommer vi att prata om olika sätt att organisera RAID-arrayer, och även visa en av de första hårdvaru-RAID-kontrollerna med NVMe-stöd.

Hela variationen av tillämpningar av RAID-teknik finns i serversegmentet. I klientsegmentet används oftast enbart mjukvara RAID0 eller RAID1 på två diskar.

Den här artikeln ger en kort översikt över RAID-teknik, en kort handledning om hur man skapar RAID-arrayer med tre olika verktyg och en jämförelse av prestanda för virtuella diskar med varje metod.

Vad är RAID?

Wikipedia ger en heltäckande definition av RAID-teknik:

RAID (Engelska Redundant matris av oberoende diskar - en redundant array av oberoende (oberoende) diskar) - en datavirtualiseringsteknik för att kombinera flera fysiska diskenheter till en logisk enhet för att förbättra feltolerans och prestanda.

Konfigurationen av diskmatriser och den teknik som används i detta beror på den valda RAID-nivå. RAID-nivåer är standardiserade i specifikationen Vanligt RAID-diskdataformat. Den beskriver många nivåer av RAID, men de vanligaste är RAID0, RAID1, RAID5 och RAID6.

RAID0, eller Stripes, är en RAID-nivå som kombinerar två eller flera fysiska diskar till en logisk disk. Volymen på den logiska disken är lika med summan av volymerna för de fysiska diskarna som ingår i arrayen. Det finns ingen redundans i denna RAID-nivå, och ett fel på en disk kan resultera i att all data på den virtuella disken går förlorad.

Nivå RAID1, eller Spegel, skapar identiska kopior av data på två eller flera diskar. Volymen på den virtuella disken överstiger inte volymen för minimum av fysiska diskar. Data på en virtuell RAID1-disk kommer att vara tillgänglig så länge som minst en fysisk disk i arrayen är i drift. Att använda RAID1 tillför redundans, men är ganska dyrt, eftersom i arrayer med två eller flera diskar, bara en är tillgänglig.

Nivå RAID5 löser kostnadsproblemet. Minst 5 enheter krävs för att skapa en RAID3-array, och arrayen är tolerant för ett enda enhetsfel. Data i RAID5 lagras i block med kontrollsummor. Det finns ingen strikt uppdelning i diskar med data och diskar med kontrollsummor. Kontrollsummor i RAID5 är resultatet av en XOR-operation som tillämpas på N-1-block, vart och ett tagna från sin egen disk.

Även om RAID-arrayer ökar redundansen och ger redundans, är de inte lämpliga för att lagra säkerhetskopior.

Efter en kort rundtur i typerna av RAID-arrayer kan du gå vidare till enheter och program som låter dig sätta ihop och använda diskarrayer.

Typer av RAID-kontroller

Det finns två sätt att skapa och använda RAID-arrayer: hårdvara och mjukvara. Vi kommer att överväga följande lösningar:

  • Linux-programvara RAID.
  • Intel® Virtual RAID på CPU.
  • LSI MegaRAID 9460-8i.

Observera att Intel®-lösningen körs på ett chipset, vilket väcker frågan om det är en hård- eller mjukvarulösning. Så, till exempel, VMWare ESXi hypervisor överväger VROC-mjukvara och stöder den inte officiellt.

Linux Software RAID

Software RAID-arrayer i Linux OS-familjen är en ganska vanlig lösning både i klient- och serversegmenten. Allt du behöver för att skapa en array är mdadm-verktyget och några blockenheter. Det enda kravet som Linux Software RAID ställer på de enheter som används är att vara en blockenhet tillgänglig för systemet.

Frånvaron av hård- och mjukvarukostnader är en uppenbar fördel med denna metod. Linux Software RAID organiserar diskarrayer på bekostnad av CPU-tid. Listan över RAID-nivåer som stöds och statusen för aktuella diskarrayer kan ses i mdstat-filen, som finns i procfs-roten:

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

Stöd för RAID-nivåer läggs till genom att ansluta lämplig kärnmodul, till exempel:

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

Alla operationer med diskarrayer utförs genom kommandoradsverktyget mdadm. Diskarrayen är sammansatt i ett kommando:

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

Efter att ha utfört detta kommando kommer blockenheten /dev/md0 att dyka upp i systemet, som representerar en virtuell disk från dig.

Intel® Virtual RAID på CPU

RAID-arrayer på NVMeIntel® VROC Standard hårdvarunyckel
Intel® Virtual RAID On CPU (VROC) är en hårdvaru-/mjukvaruteknik för att skapa RAID-arrayer baserade på Intel®-kretsuppsättningar. Denna teknik är främst tillgänglig på moderkort som stöder Intel® Xeon® skalbara processorer. VROC är inte tillgängligt som standard. För att aktivera det måste du installera en VROC-hårdvarulicensnyckel.

Standard VROC-licensen låter dig skapa diskarrayer med 0, 1 och 10 RAID-nivåer. Premiumversionen utökar denna lista med stöd för RAID5.

Intel® VROC-teknik i moderna moderkort fungerar tillsammans med Intel® Volume Management Device (VMD), som tillhandahåller hot-swap-kapacitet för NVMe-enheter.

RAID-arrayer på NVMeIntel® VROC standardlicens Matriser konfigureras via Setup Utility när servern startar. På fliken Advanced Open water Intel® Virtual RAID on CPU visas, så att du kan konfigurera diskarrayer.

RAID-arrayer på NVMeSkapa en RAID1-array på två enheter
Intel® VROC Technology har ett trick i rockärmen. Diskarrayer byggda med VROC är kompatibla med Linux Software RAID. Detta innebär att arrayer kan övervakas i /proc/mdstat och administreras via mdadm. Denna "funktion" stöds officiellt av Intel. Efter att ha monterat RAID1 i Setup Utility kan du observera synkroniseringen av enheter i operativsystemet:

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>

Observera att du inte kan sätta ihop arrayer på VROC via mdadm (de sammansatta arrayerna kommer att vara Linux SW RAID), men du kan byta diskar i dem och ta isär arrays.

LSI MegaRAID 9460-8i

RAID-arrayer på NVMeExtern vy av LSI MegaRAID 9460-8i-kontrollern
RAID-styrenheten är en fristående hårdvarulösning. Regulatorn fungerar endast med enheter anslutna direkt till den. Denna RAID-kontroller stöder upp till 24 NVMe-enheter. Det är NVMe-stöd som skiljer denna kontrollenhet från många andra.

RAID-arrayer på NVMeHuvudmeny för hårdvarustyrenheten
När du använder UEFI-läge är kontrollerinställningarna integrerade i Setup Utility. Jämfört med VROC ser hårdvarukontrollmenyn mycket mer komplicerad ut.

RAID-arrayer på NVMeSkapa en RAID1 på två enheter
Att förklara hur man konfigurerar diskarrayer på en hårdvarukontroller är ett ganska tunt ämne och kan vara anledningen till en fullfjädrad artikel. Här kommer vi bara att begränsa oss till att skapa RAID0 och RAID1 med standardinställningar.

Enheter som är anslutna till en hårdvarukontroller är inte synliga för operativsystemet. Istället "maskerar" styrenheten alla RAID-arrayer som SAS-enheter. Enheter som är anslutna till styrenheten, men som inte ingår i diskarrayen, kommer inte att vara tillgängliga för operativsystemet.

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.

Trots att de maskerar sig som SAS-enheter kommer NVMe-arrayer att köras med PCIe-hastigheter. Den här funktionen låter dig dock starta från NVMe i Legacy.

Testbänk

Var och en av metoderna för att organisera diskarrayer har sina egna fysiska för- och nackdelar. Men finns det någon prestandaskillnad när man arbetar med diskarrayer?

För att uppnå maximal rättvisa kommer alla tester att utföras på samma server. Dess konfiguration:

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

De testade är P4510, varav ena hälften är ansluten till moderkortet, och den andra hälften är ansluten till RAID-kontrollern. M.2 kör Ubuntu 20.04 och testerna kommer att köras med fio version 3.16.

testning

Först och främst, låt oss kontrollera förseningarna när vi arbetar med disken. Testet utförs i en tråd, blockstorleken är 4 KB. Varje test varar 5 minuter. Före start är motsvarande blockenhet inställd på ingen som I/O-schemaläggare. Fio-kommandot ser ut så här:

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

Från fio resultat tar vi clat 99.00%. Resultaten visas i tabellen nedan.

Slumpmässig avläsning, µs
Slumpmässig inspelning, µs

skiva
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

Förutom förseningar vid åtkomst till data vill jag se prestandan för virtuella enheter och jämföra den med prestandan på en fysisk disk. Kommando för att köra fio:

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

Prestanda mäts i termer av I/O-operationer. Resultaten presenteras i tabellen nedan.

Läs slumpmässigt 1 tråd, IOPS
Slumpmässigt skriv 1 tråd, IOPS
Slumpmässigt läst 128 trådar, IOPS
Skriv slumpmässigt 128 trådar, IOPS

skiva
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

Det är lätt att se att användningen av en hårdvarustyrenhet leder till ökade förseningar och sämre prestanda i jämförelse med mjukvarulösningar.

Slutsats

Att använda hårdvarulösningar för att skapa diskarrayer från två diskar ser irrationellt ut. Det finns dock uppgifter där användningen av RAID-kontroller är motiverad. Med intåget av NVMe-aktiverade kontroller har användare möjlighet att använda snabbare SSD:er i sina projekt.

RAID-arrayer på NVMe

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Använder du RAID-lösningar?

  • 29,6%Ja, hårdvarulösningar32

  • 50,0%Ja, mjukvarulösningar54

  • 16,7%Nr 18

  • 3,7%Ingen RAID krävs4

108 användare röstade. 14 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar