Fondato nel 2008 · Edizione digitale · 15 Giugno 2026

SMB IT Journal

La risorsa di Information Technology per le piccole imprese

Italiano
Archiviazione

Prestazioni pratiche del RAID

Scegliere un livello RAID è un esercizio di bilanciamento di molti fattori, tra cui costo, affidabilità, capacità e, naturalmente, prestazioni. Le prestazioni del RAID possono essere difficili da comprendere, soprattutto perché i diversi livelli RAID usano tecniche diverse e in alcuni casi si comportano in modo piuttosto diverso l'uno dall'altro. In questo articolo voglio esplorare i comuni livelli RAID 0, 5, 6 e 10 per vedere come le prestazioni differiscano tra di essi.

Ai fini di questo articolo, si assumerà che il RAID 1 sia un sottoinsieme del RAID 10. Questo è spesso un modo comodo di pensare al RAID 1: semplicemente come un array RAID 10 con un solo membro a coppia speculare. Poiché il RAID 1 è davvero un RAID 10 a coppia singola e si comporta come tale, ciò funziona magnificamente per rendere facili da comprendere le prestazioni del RAID, dato che si inserisce semplicemente nella curva delle prestazioni del RAID 10.

Ci sono due tipi di prestazioni da esaminare con qualsiasi tipo di storage: lettura e scrittura. In termini di RAID la lettura è estremamente semplice e la scrittura è piuttosto complessa. Le prestazioni in lettura sono di fatto stabili su tutti i tipi di RAID. La scrittura, però, non lo è.

Per rendere più facile discutere delle prestazioni dobbiamo definire alcuni termini, poiché lavoreremo con alcune equazioni. Nelle nostre discussioni useremo N per rappresentare il numero totale di dischi, spesso indicati come spindle, nel nostro array e useremo X per riferirci alle prestazioni di ciascun disco individualmente. Questo ci permette di parlare in termini di prestazioni relative come fattore delle prestazioni del disco, consentendoci di astrarre l'array RAID e di non dover ragionare in termini di IOPS grezzi. Questo è importante perché gli IOPS sono spesso molto difficili da definire, ma possiamo confrontare le prestazioni in modo significativo parlandone in relazione ai singoli dischi all'interno dell'array.

È anche importante ricordare che stiamo parlando solo delle prestazioni dell'array RAID stesso, non di un intero sottosistema di storage. Elementi come le cache di memoria e le cache a stato solido faranno cose straordinarie per alterare le prestazioni complessive di un sottosistema di storage, ma non cambiano fondamentalmente le prestazioni dell'array RAID stesso a livello interno. Non esiste una formula semplice per determinare in che modo le diverse opzioni di cache influenzeranno le prestazioni complessive, ma è sufficiente dire che può essere molto drastico, sebbene ciò dipenda fortemente non solo dalle scelte di cache stesse, ma anche, in misura considerevole, dal carico di lavoro. Persino le opzioni di cache più grandi, veloci e robuste non possono cambiare le prestazioni a lungo termine e sostenute di un array.

Il RAID è complesso e molti fattori influenzano le prestazioni finali. Uno è l'implementazione del sistema RAID stesso. Una scarsa implementazione potrebbe causare latenza o potrebbe non sfruttare gli spindle disponibili (come avere un array RAID 1 che legge solo da un singolo disco invece che da entrambi simultaneamente!) Non esiste un modo semplice per tener conto delle carenze in specifiche implementazioni RAID, quindi dobbiamo assumere che tutte lavorino fino ai limiti della specifica come, in effetti, farà qualsiasi sistema RAID enterprise. Sono principalmente i sistemi RAID amatoriali e di tipo consumer a non riuscirci.

Alcuni tipi di RAID hanno anche notevoli quantità di overhead computazionale associate ad essi, mentre altri no. Principalmente i livelli RAID a parità richiedono un'elaborazione pesante per gestire le operazioni di scrittura, con livelli diversi che richiedono quantità diverse di calcolo per ciascuna operazione. Questo introduce latenza, ma non riduce il throughput. Questa latenza varierà, tuttavia, in base all'implementazione del livello RAID nonché alla capacità di elaborazione del sistema in questione. Il RAID hardware userà qualcosa come una CPU general purpose (spesso un processore RISC Power o ARM) o un ASIC personalizzato per gestire questo, mentre il RAID software lo demanda alla CPU del server stesso. Spesso la CPU del server è in realtà più veloce in questo, ma consuma risorse di sistema. Gli ASIC possono essere molto veloci, ma sono costosi da produrre. Questa latenza influisce sulle prestazioni dello storage, ma è molto difficile da prevedere e può variare da nominale a drastica. Quindi menzionerò l'impatto relativo della latenza per ciascun livello RAID, ma non tenterò di misurarlo. Nella maggior parte dei calcoli delle prestazioni del RAID, questa latenza viene ignorata, ma è importante capire che è presente e potrebbe, a seconda della configurazione dell'array, avere un impatto evidente su un carico di lavoro.

C'è, va detto, un minuscolo impatto sulle prestazioni delle operazioni di lettura dovuto alle modalità di disposizione dei dati sul disco stesso. Il RAID a parità richiede che sui dischi vi siano dati che sono inutili durante un'operazione di lettura in stato integro ma che non possono essere usati per velocizzarla. Questo si traduce in realtà in una velocità leggermente inferiore. Ma questo impatto è ridicolmente piccolo e normalmente non viene misurato, quindi può essere ignorato.

Fattori come la dimensione dello stripe influiscono anch'essi sulle prestazioni, naturalmente, ma poiché ciò è configurabile e non è un elemento intrinseco di alcun livello RAID, lo ignorerò qui. Non è un fattore nella scelta del livello RAID in sé, ma solo nella configurazione di uno una volta scelto.

L'ultimo fattore che voglio menzionare è il rapporto tra lettura e scrittura delle operazioni di storage. Alcuni array RAID verranno usati quasi esclusivamente per operazioni di lettura, alcuni quasi solo per operazioni di scrittura, ma la maggior parte usa un mix dei due, probabilmente qualcosa come l'ottanta percento in lettura e il venti percento in scrittura. Questo rapporto è molto importante per comprendere le prestazioni che otterrai dal tuo specifico array RAID e per capire in che modo ciascun livello RAID ti influenzerà. Mi riferisco a questo come al mix lettura/scrittura.

Misuriamo le prestazioni dello storage principalmente in IOPS. IOPS sta per Input/Output Operations Per Second (operazioni di input/output al secondo; sì, lo so che le lettere non corrispondono bene, è così e basta). Uso inoltre i termini RIOPS per gli IOPS di lettura, WIOPS per gli IOPS di scrittura e BIOPS per gli IOPS misti (Blended), che verrebbero con un rapporto 80/20 o quale che sia. Molte persone parlano delle prestazioni dello storage con un singolo numero di IOPS. Quando lo si fa, normalmente si intendono gli IOPS misti a 50/50. Tuttavia, raramente un carico di lavoro funziona a 50/50, quindi quel numero può essere estremamente fuorviante. Due numeri, RIOPS e WIOPS, sono ciò che serve per comprendere le prestazioni, e questi due insieme possono essere usati per trovare qualsiasi mix di IOPS necessario. Per esempio, un mix 50/50 è semplice come (RIOPS * 0,5) + (WIOPS * 0,5). Il più comune mix 80/20 sarebbe (RIOPS * 0,8) + (WIOPS * 0,2).

Ora che abbiamo stabilito alcuni criteri e una comprensione di base, ci addentreremo nei livelli RAID stessi e vedremo come le prestazioni variano tra di essi.

Per tutti i livelli RAID, il numero di IOPS di lettura è calcolato usando NX. Questo non tiene conto dei valori di overhead nominale che ho menzionato sopra, naturalmente. Si tratta di un numero nel “caso migliore”, ma il numero reale è così vicino che è molto pratico usare semplicemente questa formula. Quindi prendi il numero di spindle (N) e moltiplica per le prestazioni in IOPS di un singolo disco (X). Tieni presente che i dischi hanno spesso prestazioni di lettura e scrittura diverse, quindi assicurati di usare il valore di IOPS di lettura del disco o la velocità misurata per il calcolo degli IOPS di lettura e il valore di IOPS di scrittura o la velocità misurata per il calcolo degli IOPS di scrittura.

RAID 0

Il RAID 0 è il livello RAID più facile da comprendere perché di fatto non c'è overhead di cui preoccuparsi, nessuna risorsa consumata per alimentarlo e sia la lettura sia la scrittura ottengono il pieno beneficio di ogni spindle, in ogni momento. Quindi per il RAID 0 la nostra formula per le prestazioni in scrittura è molto semplice: NX. Il RAID 0 è sempre il livello RAID più performante.

Un esempio sarebbe un array RAID 0 a otto spindle. Se un singolo disco nell'array eroga 125 IOPS, allora il nostro calcolo partirebbe da N = 8 e X = 125, quindi 8 * 125 dà 1.000 IOPS. Poiché qui gli IOPS di lettura e di scrittura sono gli stessi, è estremamente semplice, dato che otteniamo 1K RIOPS, 1K WIOPS e 1K con qualsiasi mix di essi. Molto semplice. Se non conoscessimo gli IOPS assoluti di un singolo spindle, potremmo riferirci a un RAID 0 a otto spindle come a uno che eroga 8X IOPS misti.

RAID 10

Il RAID 10 è il secondo livello RAID più semplice da calcolare. Poiché il RAID 10 è uno stripe RAID 0 di set speculari (mirror), non abbiamo overhead di cui preoccuparci per lo stripe, ma ciascun mirror deve scrivere gli stessi dati due volte per creare il mirroring. Questo dimezza le nostre prestazioni in scrittura rispetto a un array RAID 0 con lo stesso numero di dischi. Il che ci dà una formula per le prestazioni in scrittura semplicemente: NX/2 oppure 0,5NX.

Va notato che, a parità di capacità, anziché a parità di numero di spindle, il RAID 10 ha le stesse prestazioni in scrittura del RAID 0 ma il doppio delle prestazioni in lettura, semplicemente perché richiede il doppio degli spindle per eguagliare la stessa capacità.

Quindi un array RAID 10 a otto spindle sarebbe N = 8 e X = 125 e il nostro calcolo risultante viene (8 * 125)/2 che fa 500 WIOPS o 4X WIOPS. Un mix 50/50 darebbe come risultato 750 IOPS misti (1.000 IOPS di lettura e 500 IOPS di scrittura).

Questa formula si applica allo stesso modo a RAID 1, RAID 10, RAID 100 e RAID 01.

Opzioni non comuni come il mirroring triplo nel RAID 10 modificherebbero questa penalità di scrittura. Il RAID 10 con mirroring triplo sarebbe NX/3, per esempio.

RAID 5

Sebbene il RAID 5 sia deprecato e non dovrebbe mai essere usato in nuovi array, lo includo qui perché è un livello RAID ben noto e comunemente usato e le sue prestazioni vanno comprese. Il RAID 5 è il più elementare dei moderni livelli RAID a parità. RAID 2, 3 e 4 non si trovano più nei sistemi in produzione, quindi non esamineremo qui le loro prestazioni. Il RAID 5, sebbene non raccomandato per l'uso oggi, è il fondamento di altri moderni livelli RAID a parità, quindi è importante comprenderlo.

Il RAID a parità aggiunge una necessità un po' complicata di verificare e riscrivere la parità a ogni scrittura che va su disco. Questo significa che un array RAID 5 dovrà leggere i dati, leggere la parità, scrivere i dati e infine scrivere la parità. Quattro operazioni per ogni operazione effettiva. Questo ci dà una penalità di scrittura sul RAID 5 pari a quattro. Quindi la formula per le prestazioni in scrittura del RAID 5 è NX/4.

Quindi, seguendo l'esempio a otto spindle in cui gli IOPS di scrittura di un singolo spindle sono 125, otterremmo il seguente calcolo: (8 * 125)/4 ovvero 2X IOPS di scrittura, che fa 250 WIOPS. In un mix 50/50 questo darebbe come risultato 625 IOPS misti.

RAID 6

Il RAID 6, dopo il RAID 10, è probabilmente il livello RAID più comune e utile in uso oggi. Il RAID 6, tuttavia, è basato sul RAID 5 e ha un ulteriore livello di parità. Questo lo rende drasticamente più sicuro del RAID 5, il che è molto importante, ma impone anche una drastica penalità di scrittura, poiché ogni operazione di scrittura richiede che i dischi leggano i dati, leggano la prima parità, leggano la seconda parità, scrivano i dati, scrivano la prima parità e infine scrivano la seconda parità. Questo si traduce in una penalità di scrittura pari a sei volte, che è piuttosto drastica. Quindi la nostra formula è NX/6.

Continuando il nostro esempio otteniamo (8 * 125)/6 che fa ~167 IOPS di scrittura o 1,33X. Nel nostro esempio di mix 50/50 questo è una prestazione di 583,5 IOPS misti. Come puoi vedere, le scritture a parità causano un calo molto rapido delle prestazioni in scrittura e un calo evidente delle prestazioni miste.

RAID 7 (alias RAID 5.3 o RAID 7.3)

Il RAID 7 è un livello RAID alquanto non standard con tripla parità, basato sull'esistente parità singola del RAID 5 e sull'esistente doppia parità del RAID 6. L'unica implementazione attuale del RAID 7 è il RAIDZ3 di ZFS. Poiché il RAID 7 contiene tutto l'overhead sia del RAID 5 sia del RAID 6 più l'overhead aggiuntivo del terzo componente di parità, abbiamo una penalità di scrittura di ben otto volte. Quindi la nostra formula per trovare le prestazioni in scrittura del RAID 7 è NX/8.

Nel nostro esempio questo significherebbe che (8 * 125)/8 farebbe 125 IOPS di scrittura o 1X. Quindi, con otto dischi nel nostro array, otterremmo solo le prestazioni in scrittura di un singolo disco autonomo. Si tratta di un overhead significativo. I nostri IOPS misti 50/50 farebbero solo 562,5.

RAID complesso

I livelli RAID complessi o livelli RAID annidati come RAID 50, 60, 61, 16, ecc. possono essere calcolati usando le informazioni di cui sopra e scomponendo il RAID nei suoi componenti, applicando a ciascuno le formule fornite sopra. Non esiste una formula semplice per questi livelli perché hanno configurazioni variabili. È necessario scomporli nei loro componenti e applicare le formule più volte.

Un RAID 60 con dodici dischi, due set di sei dischi, in cui ciascun disco fa 150 IOPS, verrebbe calcolato con due RAID 6. Sarebbe l'NX del RAID 0 dove N è due (per due array RAID 6) e X è le prestazioni risultanti di ciascun RAID 6. Ciascun set RAID 6 sarebbe (6 * 150)/6. Quindi l'intero array sarebbe 2((6 * 150)/6). Il che dà come risultato 300 IOPS di scrittura.

Lo stesso esempio di cui sopra ma configurato come RAID 61, una coppia speculare di array RAID 6, avrebbe le stesse prestazioni per array RAID 6, ma applicate alla formula del RAID 1, che è NX/2 (dove X è le prestazioni risultanti di ciascun array RAID). Quindi la formula finale sarebbe 2((6 * 150)/6)/2 che fa 150 IOPS di scrittura da dodici dischi.

Le prestazioni come fattore della capacità

Quando elaboriamo le formule per le prestazioni del RAID, le pensiamo in termini di numero di spindle, il che è incredibilmente sensato. Questo è molto utile per determinare le prestazioni di un array proposto o persino di uno esistente di cui non è possibile la misurazione, e ci permette di confrontare le prestazioni relative tra diverse opzioni proposte. È in questi termini che pensiamo universalmente alle prestazioni del RAID.

Questo non è però sempre un buon approccio, perché tipicamente guardiamo al RAID come a un fattore della capacità anziché delle prestazioni o del numero di spindle. Sarebbe molto raro, ma certamente possibile, che qualcuno prenda in considerazione un array RAID 6 a otto dischi rispetto a un array RAID 10 a otto dischi. Di tanto in tanto questo accadrà a causa di una limitazione dello chassis o di qualche altra ragione simile. Ma tipicamente gli array RAID vengono considerati dal punto di vista della capacità totale dell'array (ad esempio la capacità utilizzabile) anziché del numero di spindle, delle prestazioni o di qualsiasi altro fattore. È strano, quindi, che dovremmo poi passare a considerare le prestazioni del RAID come una funzione del numero di spindle.

Se cambiamo il nostro punto di vista e ci basiamo sulla capacità come fattore comune, pur continuando a presumere che la capacità e le prestazioni del singolo disco (X) rimangano costanti tra i termini di confronto, arriviamo a un panorama di prestazioni completamente diverso. Facendo questo vediamo, per esempio, che il RAID 0 non è più il livello RAID più performante e che le prestazioni in lettura variano drasticamente invece di essere una costante.

La capacità è una cosa capricciosa, ma possiamo distillarla nel numero di spindle necessari per raggiungere la capacità desiderata. Questo rende questa discussione molto più facile. Quindi il nostro primo passo è determinare il numero di spindle necessari per la capacità grezza. Se abbiamo bisogno di una capacità di 10 TB e usiamo dischi da 1 TB, avremmo bisogno di dieci spindle, per esempio. Oppure, se abbiamo bisogno di 3,2 TB e usiamo dischi da 600 GB, avremmo bisogno di sei spindle. Faremo riferimento, diversamente da prima, al nostro numero di spindle come R. Come prima, le prestazioni del singolo disco sono rappresentate come X. (R è usato qui per indicare che questo è il conteggio per la capacità grezza, Raw Capacity Count, anziché il numero totale di spindle.)

Il RAID 0 rimane semplice: le prestazioni sono ancora RX, poiché non ci sono dischi aggiuntivi. Sia gli IOPS di lettura sia quelli di scrittura sono semplicemente NX.

Il RAID 10 ha RX IOPS di scrittura ma 2RX IOPS di lettura. Questo è drastico. Improvvisamente, quando si considerano le prestazioni come fattore di una capacità stabile, scopriamo che il RAID 10 ha il doppio delle prestazioni in lettura rispetto al RAID 0!

Il RAID 5 diventa leggermente più complicato. Gli IOPS di scrittura si esprimerebbero come ((R + 1) * X)/4. Gli IOPS di lettura si esprimono come ((R +1) * X).

Il RAID 6, come prevediamo, segue lo schema che il RAID 5 delinea. Gli IOPS di scrittura per il RAID 6 sono ((R + 2) * X)/6. E gli IOPS di lettura si esprimono come ((R + 2) * X).

Il RAID 7 si allinea perfettamente. Gli IOPS di scrittura del RAID 7 sarebbero ((R + 3) * X)/8. E gli IOPS di lettura sono ((R + 3) * X).

Questo punto di osservazione cambia il modo in cui pensiamo alle prestazioni e, guardando puramente alle prestazioni in lettura, il RAID 0 diventa il livello RAID più lento anziché il più veloce, e il RAID 10 diventa il più veloce sia in lettura sia in scrittura, a prescindere da quali siano i valori di R e X!

Se prendiamo un esempio reale di 10 dischi da 2 TB per ottenere 20 TB di capacità utilizzabile, con ciascun disco che ha 100 IOPS di prestazioni, e assumiamo un mix 50/50, gli IOPS risultanti sarebbero: RAID 0 con 1.000 IOPS misti, RAID 10 con 1.500 IOPS misti (2.000 RIOPS / 1.000 WIOPS), RAID 5 con 687,5 IOPS misti (1.100 RIOPS / 275 WIOPS), RAID 6 con 700 IOPS misti (1.200 RIOPS / 200 WIOPS) e infine RAID 7 con 731,25 IOPS misti (1.300 RIOPS / 162,5 WIOPS). Il RAID 10 è qui un vincitore schiacciante.

Latenza e impatto sul sistema con il RAID software

Come ho affermato in precedenza, il RAID 0 e il RAID 10 hanno, di fatto, nessun overhead di sistema da considerare. L'operazione di mirroring non richiede sostanzialmente alcuno sforzo computazionale ed è, a tutti gli effetti, incommensurabilmente piccola. Il RAID a parità ha un overhead computazionale e questo si traduce in latenza a livello dello storage e in risorse di sistema consumate. Naturalmente, se stiamo usando un RAID hardware, quelle risorse sono dedicate all'array RAID e non hanno altra funzione se non quella di essere consumate in questo ruolo. Se stiamo usando un RAID software, però, queste sono risorse di sistema general purpose (principalmente la CPU) che vengono consumate ai fini dell'elaborazione dell'array RAID.

L'impatto persino su un sistema molto piccolo con una grande quantità di RAID è comunque molto ridotto, ma può essere misurato e dovrebbe essere preso in considerazione, anche se solo leggermente. La latenza e l'impatto sul sistema sono direttamente correlati tra loro.

Non c'è un modo semplice per esprimere la latenza e l'impatto sul sistema per i diversi livelli RAID se non in questo modo: il RAID 0 e il RAID 10 hanno di fatto nessuna latenza o impatto, il RAID 5 ha una certa latenza e un certo impatto, il RAID 6 ha all'incirca il doppio della latenza e dell'impatto computazionale del RAID 5 e il RAID 7 ha all'incirca il triplo della latenza e dell'impatto computazionale del RAID 5.

In molti casi questa latenza e questo impatto sul sistema saranno così ridotti da non poter essere misurati con gli strumenti di sistema standard e, man mano che i processori moderni diventano sempre più potenti, la latenza e l'impatto sul sistema continueranno a diminuire. L'impatto è stato considerato trascurabile per i sistemi RAID 5 e RAID 6 anche su hardware commodity di fascia bassa fin da circa il 2001. Ma è possibile che su sistemi pesantemente carichi con una grande quantità di attività RAID a parità ci possa essere contesa tra il sottosistema RAID e altri processi che richiedono risorse di sistema.

Riferimento: The IT Hollow – Understanding the RAID Penalty

Articolo pubblicato originariamente sul Blog di StorageCraft – RAID Performance.

Etichettatoperformance raid

Pubblicità

SMB IT Journal — the IT resource for small business