Citat:
Ursprungligen inskrivet av Bluescreen
Raid 5 ger bättre prestanda med samma antaldiskar än raid 1+0 vid skrivning och lite sämmre vid läsning.
Jepp. Ungefär såhär är det:
Antag att du har en RAID0+1-array och en RAID5-array med vardera fyra diskar (RAID5:an kommer att vara 50% större, men det kvittar).
Om man också antar att det är en schysst hårdvarukontroller som inte utgör någon flaskhals, så är det den enskilda diskens överföringshastighet som spelar någon roll (accesstider och annat är för inkonsekvent för att enkelt räkna med, så det skiter jag i).
När du skriver data (antag en 12MB stor vanlig fil) ska det datat på RAID0+1:an spridas mellan två diskar (eftersom de andra två bara är speglar), d.v.s. 6MB ska tryckas ner på varje disk (totalt 24MB med spegeln).
Samma fil i RAID5 blir 16MB data (12MB fil i tre klumpar (4MB) och en fjärde paritetsklump (också 4MB). Fil- och paritetsdata sprids mellan diskarna, totalt är det alltså 4MB (16/4) data som ska till varje disk.
Om skrivningen tar 1s på RAID0+1 tar den alltså 2/3s på RAID5, RAID5 är 33% snabbare.
Vid normal läsning finns datat jämnt fördelat på de 4 diskarna i båda fallen.
På RAID0+1 läser man stripeat mellan alla fyra diskarna (från ett spegel-set kan man läsa stripe:at mellan de båda speglarna).
På RAID5 finns filen jämnt utsmetad överallt, och man behöver inte läsa paritetsdatat.
I båda fallen blir det alltså 12MB data jämnt fördelat från 4 diskar, alltså 3MB/disk.
I teorin är RAID5 och RAID0+1 lika snabba vid läsning och RAID5 är 33% snabbare (eller RAID0+1 50% långsammare, vilketsom) vid skrivning.
I praktiken stämmer detta dock inte helt, antingen p.g.a. andra flaskhalsar, eller implementationsspecifika konstigheter. T.ex. får man lite problem vid läsning i båda fallen:
Från en disk i RAID5 läser man (i exemplet ovan) tre block, och hoppar över det fjärde (paritetsdata), för att sedan läsa tre block till. Disken kan få för sig att läsa paritetsblocken ändå, eftersom den vid läsning av ett block ofta läser efterföljande block till sin cache, ifall man vill ha dem också. För RAID0+1 blir det samma problem, fast där vill man ha vartannat block.
(Och det är ju bara vid långa sekventiella läsningar som disken kan nå toppfart)
I RAID0+1 är det rätt lätt fixat, man gör bara lite "större" stripes mellan de båda diskarna i en spegel. I RAID5 är det lite knöligare, vissa kontrollers löser det genom att faktiskt läsa en del paritetsinformation och använda denna för att återskapa en del datablock som man då kan strunta i att läsa.
Alla kontrollers gör inte likadant / lika rätt, och därför skiljer det en del i prestanda. Rätt implementerat (d.v.s. så bra som möjligt) är dock båda varianterna lika snabba.