Door Femme Taken

UX Designer

Opslagnetwerken met zfs en Comstar

16-03-2012 • 10:00

110

Singlepage-opmaak

Raid-level en aantal disks

Een vraag waar iedereen bij het bouwen van een opslagserver mee te maken krijgt, is welk raid-level bij welk aantal disks te gebruiken. Dat is een afweging tussen prestaties, betrouwbaarheid, opslagcapaciteit en uitbreidbaarheid. Zfs heeft op dit gebied andere eigenschappen dan hardwarematige raid-controllers.

Het ruimteverlies van raid-z en raid-z2 is gelijk aan dat van raid 5 en raid 6. Zfs verdeelt elk blok in een bestandssysteem of zvol echter over alle disks - behalve de parity disks - in een vdev. De random i/o-prestaties zijn dus beperkt tot het prestatieniveau van een enkele disk: alle disks zijn betrokken bij het lezen of schrijven van een enkel blok en kunnen zich dus niet met andere zaken bezighouden. Bij raid 5 en raid 6 kan dit wel, omdat een leestransfer kleiner dan de stripesize door een individuele disk afgehandeld kan worden. De sequentiële lees- en schrijfprestaties van een raid-z-, raid-z2- of raid-z3-vdev schalen wel mee met het aantal disks.

Vanwege de niet schalende random i/o-prestaties heeft het de voorkeur om raid-z-vdev's klein te houden. De random-i/o-prestaties kunnen dan verbeterd worden door een aantal kleine vdev's te stripen. Het beste raid-level voor random-i/o is raid 10, oftewel striping van mirrors.

Wat betreft de uitbreidbaarheid van storage pools moet er rekening worden gehouden met het feit dat het aantal disks in een vdev niet uitgebreid kan worden. Wel kunnen er extra vdev's aan een pool worden toegevoegd. Ook om deze reden is het aan te raden om kleine vdev's te gebruiken. Een pool met twee raid-z-vdev's van elk drie disks kan later uitgebreid worden met een derde vdev van drie disks.

Uitbreiding is het makkelijkst bij een pool die bestaat uit mirrors. In dat geval kan er per twee disks uitgebreid worden. Het is mogelijk om vdev's toe te voegen met een afwijkend raid-level of een afwijkende capaciteit ten opzichte van bestaande vdev's in een pool. De pool zal dan echter minder consistent presteren. Een bijkomend voordeel van kleine vdev's is de kortere rebuildtijd als er een disk in een vdev verloren gaat.

In de onderstaande tabel zijn een aantal voorbeelden van raidconfiguraties bij elkaar gezet. Hierbij is uitgegaan van Seagate Barracuda Green 5900.3-schijven die per stuk ongeveer 200 iops leveren. In de laatste kolom is de kans weergegeven dat het uitvallen van twee disks resulteert in dataverlies. Raid-z2 kan het falen van twee disks altijd opvangen. Dit is niet het geval bij raid 10 of een pool met meerdere raid-z-vdev's, maar de kans dat een tweede defect de reeds gedegradeerde vdev zal corrumperen is wel altijd lager dan 50 procent. Deze kans wordt bovendien kleiner naarmate het aantal vdev's toeneemt. Vooral voor grote harddiskpools zijn er veel configuraties met uiteenlopende prestaties, capaciteitsbenutting en bescherming mogelijk.

Raid-level Configuratie Netto capaciteit Random i/o Kans op dataverlies
bij dubbele uitval
Vier disks
Raid-z 3 + 1 6 TB 200 iops 100%
Raid-z2 2 + 2 4 TB 200 iops 0%
Raid 10 2x (1 + 1) 4 TB 400 iops 33% (1 / 3)
Zes disks
Raid-z 5 + 1 10 TB 200 iops 100%
Raid-z2 4 + 2 8 TB 200 iops 0%
Raid 10 3x (1 + 1) 6 TB 600 iops 20% (1 / 5)
Raid-z10 2x (2 + 1) 8 TB 400 iops 40% (2 / 5)
Acht disks
Raid-z 7 + 1 14 TB 200 iops 100%
Raid-z2 6 + 2 12 TB 200 iops 0%
Raid 10 4x (1 + 1) 8 TB 800 iops 14% (1 / 7)
Raid-z10 2x (3 + 1) 12 TB 400 iops 43% (3 / 7)
Twaalf disks
Raid-z 11 + 1 22 TB 200 iops 100%
Raid-z2 10 + 2 20 TB 200 iops 0%
Raid 10 6x (1 + 1) 12 TB 1200 iops 9% (1 / 11)
Raid-z10 2x (5 + 1) 20 TB 400 iops 45% (5 / 11)
Raid-z10 3x (3 + 1) 18 TB 600 iops 27% (3 / 11)
Raid-z10 4x (2 + 1) 16 TB 800 iops 18% (2 / 11)

Om te kijken hoe de verschillende configuraties presteren hebben we de raid-levels raid-z, raid-z2 en raid 10 getest met vier, acht en twaalf disks. Ook hebben we raid-z10 getest met acht disks (twee vdev's) en twaalf disks (drie vdev's). Alle benchmarks werden uitgevoerd op de Windows-host en zijn dus resultaten die mogelijk zijn als een op zfs gebaseerde logical unit via fibre channel wordt benaderd. Als baselinevergelijking hebben we de prestaties van een enkele Seagate Barracuda Green in de grafieken opgenomen. Deze schijf werd rechtstreeks aan een sata-interface van het Windows-testsysteem aangesloten.

AS-SSD

In de 4K Random Read-test van AS-SSD halen bijna alle configuraties een doorvoer van rond de 27MBps. Verschillen zijn er wel in de 4K-random-read-test met 64 threads. Hier bereiken de configuraties met vier disks een doorvoer van 145 tot 165MBps, die oploopt naar 220 tot 270MBps bij twaalf disks. De verschillende raid-levels presteren nogal wisselend, hoewel de onderliggende verschillen niet groot zijn. Bij acht en twaalf disks is raid-z10 het snelst.

Vergeleken met de enkele lokale disk, die een doorvoer haalt van 0,6MB/s bij één thread en 1,9MB/s bij 64 threads, zijn de resultaten erg goed. Dit is waarschijnlijk te danken aan het copy-on-write-model van zfs, waardoor de willekeurige gegevens die AS-SSD inleest, daadwerkelijk willekeurig over de disks zijn verspreid. De hoge snelheden die zfs haalt in deze tests zien we normaal gesproken alleen bij ssd's.

In de 4K-random-write-test van AS-SSD zien we een wisselend beeld met resultaten die zich niet altijd eenvoudig laten verklaren. In de tests met een enkele thread levert raid 10 de beste prestaties bij acht en twaalf disks. Bij 64 threads worden er hogere snelheden geleverd door de raid-levels die de opslagcapaciteit van de pool beter benutten en naar meer verschillende fysieke drives kunnen schrijven.

Het uitzonderlijk hoge resultaat van raid-z met twaalf disks is waarschijnlijk een incident. Door de complexe variabelen die er in de achtergrond spelen, zoals automatische tuning van de omvang van caches en de duur van transactiegroepen, kunnen de prestaties van zfs erg wisselvallig zijn. Dankzij copy-on-write haalt zfs in ieder geval wel veel betere resultaten dan een 'dom' bestandssysteem dat direct tegen een disk praat.

IOMeter

De sequentiële doorvoersnelheden waren wisselvalliger. In IOMeter haalden we sterk uiteenlopende resultaten, afhankelijk van de transfergrootte en de queue depth. Bij een queue-depth van 1 was er bij een toename van het aantal disks geen enkele stijging in de doorvoersnelheid te zien. Ook maakte het raid-level geen noemenswaardig verschil. Dit was wel het geval bij een queue depth van 8. De hoogste doorvoersnelheden werden gehaald met een transfergrootte van 64K en een queue depth van 8. Een transfergrootte van 256K was langzamer dan 64K bij een queue-depth van 8, maar sneller bij een queue-depth van 1.

De prestaties van de raid-levels liepen sterk uiteen in de 64K- en 256K-tests. Raid 10 was het snelst in de 64K-tests en haalde met acht en twaalf disks respectabele doorvoersnelheden van 495 tot 555MBps. In de 256K-tests werden de beste resultaten neergezet door de raid-z10-configuratie, die met twaalf disks en drie vdev's een snelheid van 335MBps bereikte.

Trace-based benchmarks

De low-level benchmarks laten zien dat er in de meeste gevallen een gezonde stijging van de prestaties is te zien als het aantal disks toeneemt. Een duidelijk beeld over welk raid-level de beste prestaties biedt is er echter nog niet. De belangrijkste vraagt die we beantwoord willen hebben, is hoe de configuraties in de praktijk presteren. Daarom hebben we onze trace-based benchmarks op de zfs-machine losgelaten. De benchmarks worden uitgevoerd door Intels NAS Performance Toolkit en zijn gebaseerd op eigen traces van handelingen die veelvuldig in de praktijk voorkomen, zoals het booten van Windows, het starten van applicaties, het bewerken van foto's en video's en het kopiëren van bestanden.

De databewerkingstraces werden uitgevoerd op full speed, wat wil zeggen dat NAS Performance Toolkit direct een nieuwe transactie uitvoert zodra de vorige is voltooid. De overige traces werden uitgevoerd met behoud van originele timing. De rustpauzes in de oorspronkelijk trace werden wel wat gecomprimeerd om de duur van de tests te beperken, maar er bleef voldoende tijd over om bijvoorbeeld een write-back cache of zfs-transactiegroep de kans te geven om naar disk te synchroniseren, terwijl de gebruiker handelingen uitvoert die niet i/o-intensief zijn. De traces werden per set drie keer uitgevoerd. De set die werd uitgevoerd met de originele timing voerde 26,9GB aan leesoperaties uit en de full-speedset las 16,3GB. Vanwege de grote dataset was de invloed van de adaptive replacement cache op het testsysteem met 16GB ram gering.

Boot StorageMark 2011 laat de prestaties zien van een bootdrive waarop het besturingssysteem, applicaties en games zijn geïnstalleerd, en waarop een kleine hoeveelheid gebruikersdata aanwezig is. De benchmarks zijn relevant voor gebruikers die willen booten vanaf een storage area network, wat met fibre channel mogelijk is.

Het indexcijfer bestaat voor zestig procent uit de resultaten van twee traces van het booten van Windows 7 en het starten van veelgebruikte applicaties. De resultaten van de desktopworkload-trace worden voor 15 procent meegewogen. In deze trace worden webbrowsers, e-mailprogramma's, eenvoudige beeldbewerkingsprogramma's en kantoorapplicaties gebruikt. Twintig procent wordt bepaald door gametraces. De resterende 5 procent komt voor rekening van een trace waarin een groot softwarepakket wordt geïnstalleerd, terwijl er downloads plaatsvinden en lichte applicaties worden gedraaid, zoals een browser.

De traces in de bootindex doen vooral veel random leesoperaties met een lage queue-depth. Dit type i/o laat zich niet makkelijk verdelen over meerdere disks. De performance-scaling van vier naar acht disks is zwak, en tussen acht en twaalf disks is er zelfs bijna geen prestatiewinst meer te zien. Ook het verschil tussen de enkele lokale Barracuda Green en een zfs-volume met vier disks is gering. Raid 10 levert consequent de beste prestaties, gevolgd door raid-z10. Raid-z2 biedt mindere prestaties dan raid-z, zoals we hadden verwacht.

De Home & StorageMark 2011-index geeft een indicatie van het gebruik van een disk als primair opslagmedium voor OS, applicaties en data, in een systeem dat wordt ingezet voor kantoor- en webgebruik. De desktop-workload-trace is goed voor 60 procent van de index. Voor deze trace worden 90.000 lees- en 33.000 schrijfbewerkingen uitgevoerd, die voor de helft uit sequentiële bewerkingen bestaan. In de index zijn verder boot-, game-, kopieer- en software-installatietraces meegenomen.

De i/o in deze traces is vrij goed geschikt om verdeeld te worden over meerdere disks. De beste prestaties worden opnieuw geleverd door raid 10 en raid-z10 maar de prestatieverschillen tussen de raid-levels zijn gering. De stripe van mirrors levert tussen vier en acht disks een performanceverbetering van 40 procent, wat een stuk beter is dan de stijging van 17 procent in de bootindex. Er is opnieuw nauwelijks winst als het aantal disks wordt uitgebreid van acht naar twaalf.

De Workstation StorageMark geeft een indruk van de prestaties van de primaire drive in een systeem voor professionele beeld- en videobewerkingssoftware. De index wordt voor 55 procent bepaald door twee traces van respectievelijk een grafisch workstation en een video-editingworkstation. Het zwaartepunt van deze benchmark wordt gevormd door 370.000 random leesacties en 250.000 random schrijfacties.

In de beeldbewerkingstrace wordt gewerkt aan zeer grote Photoshop-bestanden en worden fotocollecties met grote raw-bestanden bekeken en bewerkt in Lightroom. Deze trace bestaat voor 55 procent uit schrijftransacties. Als we naar het datavolume kijken komt zelfs tweederde van het verkeer voor rekening van schrijfacties. Het gaat daarbij overwegend om niet-sequentiële schrijfacties naar de scratchfile van Photoshop en de pagefile van Windows. Voor de videobewerkingstrace wordt Sony Vegas Pro losgelaten op een groot videoproject met tientallen lossless gecomprimeerde full-hd-videofragmenten. Deze trace bestaat bijna helemaal uit kleine en sterk verspreide leestransacties. Met een geringere weging maken ook de desktop-workload-, boot-, filecopy- en software-installatietraces deel uit van deze index.

De resultaten van de Workstation-benchmark komen in grote lijnen overeen met die van de Home & Office StorageMark 2011-test. Wel zijn de prestaties ten opzichte van een enkele lokale disk een stuk beter. Dit is waarschijnlijk te danken aan de slimme caching in zfs. De schrijfacties in de Photoshop-trace worden in het geheugen van de zfs-server opgevangen in vijf seconde durende transactiegroepen. Zolang er met korte bursts wordt geschreven, wat het geval is bij de schrijfacties naar de scratchfile van Photoshop, kan de transactiegroep met veel hogere snelheden inkomende data accepteren dan dat er naar disk kan worden gesynchroniseerd.

De Data StorageMark 2011 is gericht op het meten van de prestaties van hardware die louter wordt gebruikt voor de opslag van data. In de traces die deel uitmaken van deze index bevindt zich geen i/o van de pagefile, de scratchfile in Photoshop, applicatiebestanden of OS-bestanden. De index is samengesteld uit filecopy's in verschillende richtingen met uiteenlopende bestandsgroottes. Daarnaast bevat deze benchmark een bestandscompressietest en i/o van de datapartitie in de beeld- en videobewerkingstraces. Voor gebruikers die netwerkopslag alleen willen gebruiken om data te bewaren, en geen applicaties of het besturingssysteem zelf, is dit de belangrijkste index.

Ten opzichte van de eerdere indices zien we een veel betere performance-scaling tussen acht en twaalf drives. Raid 10 en raid-z10 leverend opnieuw de beste prestaties. De verschillen tussen de raid-levels zijn wat groter, vooral bij twaalf drives.

Om een indruk te geven van de serverprestaties hebben we ook de IOMeter-fileserversimulatie nog op de raidconfiguraties losgelaten. Deze simulatie genereert een kunstmatig toegangspatroon dat volledig uit random i/o's bestaat. De i/o's hebben een transfergrootte van 512 bytes tot 64kB en worden in een mix van 80 procent leesopdrachten en 20 procent schrijfopdrachten aan het opslagmedium aangeboden. Het toegangspatroon wordt uitgevoerd met een concurrency die oploopt van 1 tot 64 gelijktijdige i/o's. Het toegangspatroon geeft een indruk van de prestaties van een drive bij het uitvoeren van een mix van kleine gelijktijdige lees- en schrijfopdrachten.

De theorie over aantal iops van de verschillende raid-levels, zoals hierboven uitgedrukt in de tabel, lijkt in de praktijk grotendeels op te gaan. De raid-levels z1 en z2 leveren niet méér iops als het aantal disks groeit. Er is zelfs een negatieve performance-scaling zichtbaar. Raid 10 schaalt wel bijna lineair, hoewel de stijging in de praktijk veel minder groot is dan de theorie belooft: een verdubbeling van het aantal disks levert een winst van slechts 17 tot 26 procent op. Waarschijnlijk wordt een deel van de lees-i/o's uit de adative replacement cache geserveerd. Raid-z10 blijkt daadwerkelijk meer iops te leveren dan raid-z1 en -z2.

Uit onze benchmarks blijkt dat raid 10 over het algemeen de beste prestaties levert. In desktopachtige gebruiksscenario's zijn de verschillen met raid-z en raid-z2 beperkt en weegt het enorme verlies van bruikbare opslagcapaciteit in raid 10 niet op tegen de betere prestaties. Raid 10 is alleen aan te bevelen voor servertoepassingen die baat hebben bij een zo hoog mogelijk aantal iops.

Gebruikers die grote pools willen bouwen, doen er verstandig aan om verder te kijken dan de vanzelfsprekende raid-levels raid 10, raid-z1 en raid-z2. Het stripen van meerdere raid-z-vdev's biedt een goede middenweg tussen de prestaties van raid 10 en raid-z of -z2. De prestaties schalen beter dan die van een grote raid-z-pool. Als er met veel disks wordt gewerkt, is het beter om twee of meer raid-z-vdev's te stripen.

Een zogenaamde raid-z10 biedt minder bescherming dan raid-z2 maar kan bij grote pools wel dicht in de buurt komen. In een pool van twaalf disks met drie raid-z1-vdev's is de kans minder dan een derde dat een tweede defecte disk dezelfde vdev treft als de eerste defecte disk, en zo de hele pool laat omvallen.