Sistemi RAID

RAID: deep Inside

RAID, Redundant Array of Independent Disk, è un sistema di protezione e alta disponibilità del dato. Al di là delle specifiche di implementazione, quello che ci proponiamo in questo articolo è quello di capire, in pratica, i vantaggi e le modalità per utilizzare un RAID in modo efficace.

Prerequisiti per proseguire : RAID, Base concept.

Iniziamo con il dare uno sguardo agli IOPS di varie tipologie di disco (non vi sono differenze sostanziali tra 2,5′ e 3,5′):

  • flash 2k-4k IOPS
  • 15k – 180 IOPS
  • 10k – 130 IOPS
  • 7,2k – 90 IOPS

Dato quindi un numero N di dischi, possiamo presumere che l’IOPS totale (RAW) disponibile sia:

T_{IOPS} = IOPS totali
 D_{IOPS} = IOPS tipico per tipologia di disco
 \eta = numero di dischi presenti

T_{IOPS} = \eta \cdot D_{IOPS}

Tenendo conto che parte dell’IOPS viene utilizzato per operazioni interne, che per semplicità vengono chiamate penalità, a seconda della tipologia di Raid Utilizzata. Si parla quindi di IOPS Funzionale, netto, definito come:

F_{IOPS} = IOPS funzionale, ovvero quello effettivamente utile e che ci interessa
R_p = percentuale in lettura
W_p = percentuale in scrittura
P = RAID Penalty

F_{IOPS} = \frac{T_{IOPS} \cdot W_p}{P} + T_{IOPS} \cdot Rp
RAID PENALTY

E’ un extra time che impiega il nostro sistema per scrivere i dati. In lettura ovviamente non esiste penalty per motivi abbastanza evidenti. In ogni caso consideriamo le operazioni che devono essere eseguite per modificare un dato: readData, readOldParity, writeData, writeNewParity.
Questo ci serve per capire come alcuni tipi di RAID introducono appunto una penalità, che concorre a diminuire l’IOPS “grezzo” che avrei dalla semplice aggregazione di dischi.

RAID 1 PENALTY 2. Mirroring. Scrive il dato due volte
RAID 5 PENALTY 4. Per ogni dato fa 4 operazioni: readData,readOldParity,writeData,writeNewParity
RAID 6 PENALTY 6. Per ogni dato ne fa sei: readData,readOldParity, readOldSecondParity,writeData,writeNewParity, writeNewSecondParity.
RAID10 PENALTY 2. E’ lo striping di un mirroring per cui introduce la penalty del mirroring.

In ultimo ci serve capire come calcolare l’IOPS per determinati tipi di disco.
Beh la formuletta è molto semplice, detti:
θ = rotation latency
τ = average read/write seek time

IOPS=\frac{1}{\theta + \tau}
Rotation latency: è il tempo che impiega la testina a raggiungere il settore desiderato ed è calcolabile dalla seguente formula:
Latency ≅ 60000/RPM ms
Average latency = 0,5*latency.
Average Read ≅ 4ms
Average Write seek time ≅ 5ms

Supponendo a regime con un 75% di lettura e 25%in scrittura

average read/write seek time ≅ 0,75*Average Read+0,25*Average Write seek time= 4,25ms

Considerando dischi da 7,2k

IOPS ≅ 1/(60/7,2 ms + 4,25 ms) ≅ 80

Non lontano dai valori sopra

Vediamo qualche esempio.

Storage a 24 slot tutti da 7,2k. Scegliamo di fare un RAID 6 con doppia parità e  un hot spare, perdendo quindi un ottavo della capacità totale .
Supponendo quindi un utilizzo tipico di 20% write e 80% read dalla formuletta sopra abbiamo:
Total IOPS RAW= 90 * 23≅2070 IOPS
Functional IOPS = (2070 * 0,2)/6 + (2070* 0,8)= 69+1656≅ 1725 (quasi vicino ad un disco flash).
Sostituiamo i dischi da 7,2k con all flash da 4k.
Total IOPS RAW= 4k * 23≅92k IOPS
Functional IOPS = (92k * 0,2)/6 + (92k* 0,8)= 3k+73k≅ 76k
Supponiamo di non voler occupare tutti e 24 gli slot necessariamente. Ipotizziamo che per le nostre operazioni ci servano 850 IOPS in raid 5 utilizzando dischi da 10k. Di quanti dischi dovrò disporre?
Nella solita ipotesi di 20% wr e 80% rd
N°DISKS=(Func.IOPS*Penalty)/ (Disk_IOPS*(%wr + Penalty*%rd)
da cui
N°DISKS= (850*4)/(130*(0,2+4*0,8))=3400/442≅ 8 dischi da 10k

Best Practice

1 – Dedicare i dischi, non usarli per lavori diversi
2 – Verifica delle impostazioni se cambio la configurazione
3 – Non fare l’oversubscribing dei link storage
4 – Usare flush array se possibile e le opzioni di tiering
5 – Fare delle prove, analizzare e correggere

About the author: amf

System Integrator and Vitualization EXPERT - VCP