1 Campi di Galois: riepilogo e notazioni [1] 2 Il sistema RAID 6

Transcript

1 Campi di Galois: riepilogo e notazioni [1] 2 Il sistema RAID 6
Corso: Gestione ed elaborazione grandi moli di dati
Lezione del: 2 maggio 2006
Argomento: Raid 6: Campi di Galois
Scribes: Tullio Coppotelli, Claudio Lora e Marco Rizzi
1
Campi di Galois: riepilogo e notazioni [1]
Dalle lezioni precedenti ricordiamo che esiste un isomorfismo tra GF (2w ) e gli interi nell’intervallo [0, 2w −1], dove ad ogni polinomio di GF (2w ) corrisponde l’intero la cui rappresentazione
binaria é data dai coefficienti del polinomio. Inoltre gli elementi diversi da zero di GF (2w )
sono generati da xi mod q(x), con 0 ≤ i ≤ 2w − 2, dove q(x) é un polinomio primitivo di grado
w su GF(2).
Dati a, b ∈ [0, 2w − 1], le operazioni sono cosı́ definite:
• a+b corrisponde allo XOR bit a bit delle loro rappresentazioni binarie ed equivale perció
alla somma dei corrispondenti polinomi in GF (2w )
• a − b viene eseguita allo stesso modo della somma
• a · b corrisponde x(i+j)mod(2
• a/b corrisponde x(i−j)mod(2
w −1)
w −1)
se a, b 6= 0 con a = xi , b = xj
se a, b 6= 0 con a = xi , b = xj .
Si definiscono quindi due tabelle che associano ad ogni intero in [1, 2w −1] la corrispondente
potenza i di x e viceversa
GFLOG(a) = i, se a rappresenta l’elemento xi di GF (2w ), con a ∈ [1, 2w − 1] e 0 ≤ i ≤ 2w − 2.
E la sua inversa
GFILOG(i ) = a, se l’elemento xi di GF (2w ) rappresenta a, con a ∈ [1, 2w −1] e 0 ≤ i ≤ 2w −2.
Grazie a queste due tabelle siamo in grado di moltiplicare 2 elementi di GF (2w ) in maniera
efficiente semplicemente effettuando degli accessi alle tabelle. Vediamo qualche esempio nel
caso w=4 (vedi tabella 1):
2*3=GFILOG[GFLOG[2] + GFLOG[3]]=GFILOG[1+4]=GFILOG[5]=6
13*10=GFILOG[GFLOG[13] + GFLOG[10]]=GFILOG[(13+9) mod 15]=GFILOG[7]=11
Vogliamo far notare in particolare che le somme dei risultati di GFLOG vanno eseguite in
w
modulo 2w − 1 in quanto xi = xi mod (2 −1) .
2
Il sistema RAID 6
Quando i dati vengono memorizzati in maniera distribuita su piú dischi la probabilitá che
una di queste periferiche si rompa comincia a diventare significativa.
1
Figura 1: Esempio utilizzo dischi per n=8, m=2
Definiamo F come il tempo medio tra due rotture (Mean Time Between Failure o MTBF).
Questa é una metrica molto diffusa nell’IT e viene calcolata sulla base degli effettivi dati di
utilizzo o sulla base di stime effettuate dai fornitori di hardware.
L’MTBF di un sistema con n dischi risulta essere Fn e quindi, in un sistema del genere, la
fault-tolerance deve essere presa in considerazione.
Per valori piccoli di n e periferiche ragionevolmente affidabili un singolo disco di checksum
é spesso sufficiente. Questo é ad esempio il caso del livello 5 del sistema RAID e della
tecnica di codifica nota come paritá n+1 dove l’i-esimo byte del disco di checksum é calcolato
come lo XOR degli i-esimi byte dei rimanenti dischi. Quest’ultima tecnica é utilizzata per
la sua semplicitá: richiede infatti un solo disco supplementare ed un’operazione di scrittura
addizionale per ogni scrittura su un singolo disco. A fronte di tale semplicitá vi é peró un
grande svantaggio: questo sistema non é in grado di resistere al verificarsi di piú di un errore
simultaneo.
Risulta quindi evidente come al crescere di n cresca anche l’importanza per il sistema di
tollerare il verificarsi di piú errori contemporanei.
Da queste considerazioni si deduce l’importanza di definire uno schema generale in grado
di tollerare la rottura di m dischi (m ≥ 2) utilizzando n dischi di dati D0 , D1 , . . . Dn−1 ed m
dischi di checksum C0 , C1 , . . . Cm−1 .
Nell’esempio in figura 1 i valori dei dischi C1 e C2 sono calcolati applicando rispettivamente
le funzioni F1 ed F2 .
La codifica Raid 6 divide ogni disco in parole, ognuna di w bits. Ogni disco contiene
bits 1 parola
· w bits = 8k
quindi l = k bytes · 8 byte
w parole, dove k é la dimensione del disco in bytes. La
funzione di codifica lavora sulle singole parole.
Vediamo nel dettaglio come funziona l’algoritmo:
1) Determinare w.
Come prima operazione da eseguire é necessario determinare su quale campo dobbiamo la-
2
vorare. Per tollerare m rotture dobbiamo scegliere w in modo tale che 2w > n + m. Inoltre
é piú semplice scegliere valori di w come 8 o 16 in modo tale che siano multipli del byte. Si
noti inoltre che scegliendo w = 16 si puó raggiungere un valore di n+m pari a 65.535.
2) Creiamo le tabelle GFLOG e GFILOG
Come abbiamo giá sottolineato queste tabelle sono fondamentali per l’esecuzione delle moltiplicazioni. In [1] é fornito il codice C per generare le tabelle per GF (24 ), GF (28 ), GF (216 ).
3) Calcoliamo le matrici F e B
Definiamo la matrice F come matrice di Vandermonde di dimensioni (m + n) · n dove le moltiplicazioni sono eseguite in GF (2w ).
F = [fij ] con i, j tali che 0 ≤ i < n + m, 0 ≤ j < n, in cui fij = ij , la matrice sará quindi del
tipo:





F=



1
1
1
..
.
0
1
21
..
.
0
1
22
..
.
...
...
...
..
.
0
1
2n−1
..
.
1 (n + m − 1)1 (n + m − 1)2 . . . (n + m − 1)n−1









dove la riga i-esima (0 ≤ i < n + m) di F é associata all’intero i visto come elemento di
w
GF (2w ), se i corrisponde a xl allora ij corrisponde a x(l·j)mod(2 −1)
Date queste caratteristiche, la matrice F gode delle due seguenti proprietá:
Proprietá 1 Un qualsiasi sottoinsieme di n righe di F forma una matrice n · n invertibile.
Applicando a F operazioni elementari di colonna del tipo:
Ck ← a · Ck , con a ∈ GF (2w ), a 6= 0
Ck ← Ck + a · Cj , con a ∈ GF (2w ), 0 ≤ j 6= k < n
possiamo trasformarla nella matrice:
In,n
Gm,n
Bn+m,n =
!
dove I rappresenta la matrice identitá di dimensioni n · n.
Si puó dimostrare (per esercizio) che B gode della seguente proprietá:
Proprietá 2 Un qualsiasi sottoinsieme di n righe di B forma una matrice n · n invertibile.
3
...
...
...
...
...
...
...
...
...
...
...
...
...
...
δ0
δ1
δn−1
γ0
...
...
...
...
...
...
...
...
...
...
D0
D1
Dn−1
C0
...
...
...
...
...
γm−1
Cm−1
4) Calcoliamo i valori di checksum
Si partizioni ogni disco in parole di w bit e si consideri una stripe δ0 , δ1 , . . . , δn−1 , γ0 , γ1 , . . . γm−1
costituite da parole corrispondenti nei vari dischi, dove δi ∈ Di e γj ∈ Cj . Tali parole possono
essere interpretate come le notazioni binarie di elementi di GF (2w ).
I valori δi sono indipendenti dall’algoritmo, mentre si deve procedere al calcolo dei valori γj
da memorizzare nei dischi di checksum.
Si definiscono i vettori colonna ∆ = [δ0 δ1 . . . δn−1 ]T e Γ = [γ0 γ1 . . . γm−1 ]T
Si definisce
Γ=G·∆
(1)
e quindi
"
∆
Γ
#
=B·∆
(2)
In particolare la formula 1 ci permette di ricavare il contenuto degli m dischi di checksum a
partire dagli n dischi dati.
5) Modifica dei dati
Cerchiamo ora di comprendere come si comporta il sistema in caso di modifica dei dati. Si
supponga che venga modificata la parola δi ∈ ∆ in δi0 6= δi mentre le altre parole restino
inalterate, cioé ∀k 6= i sia δk0 = δk .
Possiamo riscrivere la formula 1:







γ00
γ10
..
.
0
γm−1


 
 
=
 
 


g0,0
gi,0
...
..
.
g0,n−1
...
..
.
gi,n−1
gm−1,0 . . . gm−1,n−1

δ0
 .
  ..


  δi0
 .
 .
 .
δn−1









dove gji rappresenta la entry nella riga j e colonna i della matrice Gm,n .
4
Allora tutte le parole nei dischi di checksum dovranno essere modificate, cioé
∀j, 0 ≤ j < m, γj → γj0
dove, effettuando la moltiplicazione riga per colonna, risulta:
γj0 =
n−1
X
gjk δk0
k=0
Sappiamo peró che é cambiata una sola parola, δi , quindi la sommatoria dará come risultato
γj piú la variazione dovuta alla modifica di δi :
γj0
=
n−1
X
gjk δk0 = γj + gji (δi0 − δi )
k=0
Notiamo come la modifica di una parola in un disco dati ci costringa ad effettuare una operazione di scrittura su ogni disco di Checksum, appesantendo il sistema. Questo degrado delle
prestazione é il prezzo da pagare per un sistema in grado di tollerare un numero arbitrariamente grande di rotture (limitato solo dal numero massimo di dischi che siamo in grado di
gestire con l’array).
6) Recovery in seguito a failure
Vediamo infine come si comporta il sistema in seguito ad una rottura.
Innanzitutto ridefiniamo la formula 2
"
#
∆
(3)
=B·∆
E=
Γ
Si supponga che un certo numero di dischi (di dati o di checksum) siano guasti. Se i dischi
guasti sono al piú m, il sistema RAID utilizzato ci permette di recuperare tutte le informazioni.
E’ necessario creare la matrice B 0 n · n ottenuta da B scegliendo n righe associate ad n dischi
funzionanti (ricordiamo che B 0 é invertibile per la Proprietá 2).
Sia E 0 il sottoinsieme di E associato alle stesse righe scelte per B (corrispondenti ai dischi).
Se i dischi funzionanti sono piú di n si sceglie comunque un sottoinsieme di E associato ad n
dei dischi funzionanti.
Per definizione si ha che B 0 · ∆ = E 0 da cui si deriva la relazione ∆ = (B 0 )−1 · E 0 che permette
di recuperare i dati persi negli n dischi dati.
A questo punto risulta semplice recuperare anche i dati persi negli m dischi di checksum
poiché é sufficiente utilizzare la formula 1 esattamente come fatto al punto 4.
Notiamo infine che perché il sistema funzioni si deve sempre conoscere la matrice B. Definiti
w, n ed m la matrice B resta costante e puó essere memorizzata all’interno del controller
stesso e non all’interno dei dischi (in caso di rottura del controller comunque il sistema RAID
5
non funzionerebbe). La memorizzazione di E’ invece non costituisce un problema poiché viene
ricavata a partire da informazioni memorizzate in n dei dischi funzionanti.
3
Prestazioni [3]
Il sistema RAID 6 richiede un controller hardware specializzato (costoso). Richiede un minimo di 4 hard disks mentre il massimo dipende dal controller utilizzato. Gli hard disk devono
essere tutti della stessa dimensione. Se vengono utilizzati dischi di diverse dimensioni viene
sprecato dello spazio, come si vede con la formula successiva.
La capacitá dell’array é pari a Dimensione del disco piu0 piccolo · (numero di dischi − m)
dove m é definito come sopra.
Fault Tolerance: da molto buona ad ottima. Puó sopportare la rottura simultanea di m
degli n+m dischi dell’array.
Availability: ottima.
Degradation and Rebuilding: A causa della complessitá dell’architettura il degrado delle
prestazioni puó essere significativo in seguito ad una rottura e durante la ricostruzione dei
dischi di checksum. E’ possibile rimandare la fase di ricostruzione per evitare tale degrado
delle prestazioni.
Random Read Performance: da molto buona ad ottima; in genere migliora con l’aumentare della dimensione delle stripe.
Random Write Performance: scarsa dovuta alla ridondanza elevata.
Sequential Read Performance: da buona a molto buona; in genere migliore per stripe di
dimensioni inferiori.
Sequential Write Performance: scarsa.
Costo: Elevato.
Utilizzi consigliati: In teoria il RAID 6 é consigliabile negli stessi casi del RAID 5 ma in
situazioni dove sia necessaria una maggiore tolleranza agli errori. In pratica il sistema RAID
6 non ha avuto la stessa diffusione poiché poche aziende sono in grado di pagare i costi aggiuntivi per far fronte ad un evento raro come la rottura simultanea di 2 o piú dischi. Si puó
verificare il caso in cui l’intero ARRAY venga distrutto ma chiaramente in questa situazione
il sistema RAID non é di nessuna utilitá. Inoltre l’introduzione nel RAID 5 del sistema di
hot swapping e di ricostruzione automatica hanno reso il sistema RAID 6 ancora meno interessante poiché il sistema RAID 5 é in grado di recuperare la rottura di un disco in poche
ore(senza queste feature invece un sistema RAID 5 avrebbe richiesto un periodo di down
time). Nella fascia alta del mercato il sistema RAID 6 comunque é in difficolta soprattutto
nei confronti dei sistemi RAID multipli come il RAID 1+0 che permette qualche grado di
tolleranza rispetto a rotture multiple insieme ad un aumento delle prestazioni.
6
4
Esercizio svolto
Viene ora proposto un esercizio svolto per vedere l’applicazione del modello teorico sopra
descritto. L’esercizio richiede di risolvere i seguenti quesiti:
1. determinare il campo di Galois GF (24 ) di 16 elementi utilizzando il polinomio primitivo
q(x) = x4 + x + 1 e determinare le tabelle GFLOG(a) e GFILOG(i).
2. impostare uno schema RAID per n=3 data disk ed m=2 checksum disk.
3. data una stripe δ0 δ1 δ2 γ0 γ1 , specializzare il meccanismo di recovery nei seguenti casi:
(a) perdita di δ0 ;
(b) perdita di γ0 ;
(c) perdita di δ0 γ0 ;
(d) perdita di δ0 δ1 ;
RISOLUZIONE.
1) Innanzitutto creiamo la seguente tabella che contiene i 16 elementi che compongono
il campo di Galois GF (24 ) richiesto, con la relativa notazione binaria su 4 bit seguita dalla
notazione decimale, che ci sará utile consultare nello svolgimento dell’esercizio:
Potenza di x
Polinomio
Notazione binaria (4 bit)
Notazione decimale
-
0
1
x
x2
x3
x+1
x2 + x
x3 + x2
x3 + x + 1
x2 + 1
x3 + x
x2 + x + 1
x3 + x2 + x
x3 + x2 + x + 1
x3 + x2 + 1
x3 + 1
0000
0001
0010
0100
1000
0011
0110
1100
1011
0101
1010
0111
1110
1111
1101
1001
0
1
2
4
8
3
6
12
11
5
10
7
14
15
13
9
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
x10
x11
x12
x13
x14
I valori ottenuti per la colonna polinomi sono ottenuti con la seguente regola:
xi = xi−1 · x = (a3 x3 + a2 x2 + a1 x1 + a0 )x = a3 x4 + a2 x3 + a1 x2 + a0 x.
7
Tabella 1: Tabelle per GF (24 )
a
GFLOG(a)
0
-
1
0
2
1
3
4
4
2
5
8
6
5
i
GFILOG(i)
0
1
1
2
2
4
3
8
4
3
5
6
6
12
7
10
7
11
8
3
9
14
8
5
9
10
10
9
11
7
10
7
11
14
12
6
12
15
13
13
13
13
14
11
15
12
14
9
Se é a3 = 0 allora la formula si riduce a xi = a2 x3 + a1 x2 + a0 x altrimenti deve essere
a3 = 1 e perció si ottiene xi = a3 x4 + a2 x3 + a1 x2 + a0 x + q(x). Di seguito creiamo le tabelle
GFLOG(a) e GFILOG(i) precedentemente definite a partire dai dati inseriti nella tabella
precedente:
2) Lo schema RAID che viene chiesto di impostare é composto da n=3 data disk ed m=2
checksum disk.
Come prima cosa creiamo la matrice F:




F=



1
1
1
1
1
 
0 0
 
1 1  
 

2 22 
=


3 32  
4 42
1
1
1
1
1
0
1
2
3
4
0
1
4
5
3








La matrice F, come detto precedentemente, ha dimensione (n + m) · n quindi in questo
caso ha dimensione 5x3. A titolo di esempio, vengono riportati i conti eseguiti per determinare il valore dell’elemento f32 = 32 : essendo 3 = x4 ció implica che 32 = x8 e sfruttando
l’informazione contenuta nella tabella GFILOG con i = 8 si puó concludere che 32 = x8 = 5.
Prima di procedere é meglio attribuire dei nomi alle tre colonne della matrice F per semplificare la notazione utilizzata nell’indicare le operazioni sulle colonne della matrice che verranno
eseguite al fine di ottenere la matrice B sopra presentata. Le colonne sono C0 , C1 , C2 , e le
prime operazioni da eseguire su di esse sono:
C0 ← C0 + C1
C2 ← C2 + C1
8
che danno luogo alle seguenti operazioni sui termini presenti nella matrice:








1
0
1+2
1+3
1+4
0
0
1
0
2 4+2
3 5+3
4 3+4








Le somme indicate non devono essere eseguite come somme di interi ma é necessario fare
l’XOR bit a bit. Per esempio, il calcolo da eseguire per la cella f32 é il seguente:
0101
5 + 3 → 0011 = 6
0110
Eseguendo tutte le somme nel modo indicato si ottiene la seguente matrice:








1
0
3
2
5
0
1
2
3
4
0
0
6
6
7








Osservando la matrice ottenuta si vede come le prime due righe abbiano la forma corretta
per essere parte della matrice identitá perció la prossima operazione da eseguire consiste
nel moltiplicare la colonne C2 per 6−1 affinché l’elemento f22 = 6 diventi pari ad 1. Di
particolare interesse é il calcolo che deve essere eseguito per l’elemento in posizione f42 =
7 · 6−1 = x10 x10 = x20 = x15 x5 = x5 = 6. La matrice che si ottiene é perció la seguente:








1
0
3
2
5
0
1
2
3
4
0
0
1
1
6








É ora necessario rendere nulli i valori presenti in f20 e f21 affinché la terza riga della matrice,
assieme alle due che la precedono, formi la matrice identitá. Per fare ció le operazioni sulle
colonne da eseguire sono le seguenti:
C0 ← C0 + 3C2
C1 ← C1 + 2C2
9
che danno luogo, perció, ai seguenti passaggi di calcolo:








1
0
0
1
0
0
2+3
3+2
5+3·6 4+2·6
0
0
1
1
6


 
 
 
=
 
 
 
1
0
0
1
15
0
1
0
1
8
0
0
1
1
6








La matrice ottenuta presenta la matrice identitá I3,3 nella parte alta ed é perció la matrice
B che volevamo ottenere:


1 0 0


 0 1 0 



B=
 0 0 1 


 1 1 1 
15 8 6
3) L’ultimo punto dell’esercizio richiede di eseguire la specializzazione del meccanismo di
recovery a partire dalla stripe δ0 δ1 δ2 γ0 γ1 a seconda che si verifichino diversi tipi di perdite.
Prima di analizzare i singoli casi é peró necessario esprimere i 2 blocchi della stripe provenienti
dai checksum disk in funzione dei 3 blocchi della stripe contenuti nei data disk utilizzando le
informazioni contenute nella matrice G2,3 presente al di sotto della matrice identitá I3,3 nella
matrice B calcolata al passo precedente. Utilizzando la formula Γ = G · ∆ si ottiene:
γ0
γ1
!
=
1 1 1
15 8 6
!


δ0


 δ1 
δ2
che restituisce i valori γ0 = δ0 + δ1 + δ2 e γ1 = 15δ0 + 8δ1 + 6δ2 .
(a) Perdita di δ0 . Posso recuperare il blocco δ0 eseguendo:
δ0 ← γ0 + δ1 + δ2
(b) Perdita di γ0 . Il recupero avviene mediante l’esecuzione della seguente istruzione:
γ0 ← δ0 + δ1 + δ2
(c) Perdita di δ0 e γ0 . Il recupero deve essere eseguito in modo ordinato, procedendo prima
con il ripristino di δ0 tramite l’operazione:
δ0 ← 15−1 (γ1 + 8δ1 + 6δ2 )
10
e poi procedendo al recupero di γ0 nel modo seguente:
γ0 ← δ0 + δ1 + δ2
(d) Perdita di δ0 e δ1 . In questo caso il recupero richiede la risoluzione del sistema:
(
δ0 + δ1 = γ0 + γ2
15δ0 + 8δ1 = γ1 + 6γ2
Viene lasciato da svolgere allo studente il seguente esercizio. Si consideri il campo di Galos
GF (2w ) e sia n tale che 2w ≥ n + 2. Si definisca la matrice


In,n


Bn+2,n 
 1 1

x0 x1
...
...
1
xn−1





dove x é generatore di GF (2w )\{0}.
1. Dimostrare che per B vale la Proprietá 2 ;
2. Utilizzando B come matrice di codifica, specializzare il meccanismo di recovery nel caso
di rottura di 1 o 2 dischi.
Bibliografia
[1]
James S. Plank A Tutorial on Reed-Solomon Coding for Fault-Tolerance in
RAID-like Systems Technical Report CS-96-332, Department of Computer Science
University of Tennessee, 1997.
[2]
James S. Plank, Ying Ding Note: Correction to the 1997 Tutorial on ReedSolomon Coding. Technical Report UT-CS-03-504, Department of Computer
Science University of Tennessee,2003.
[3]
Tekram
System
CO,
About
RAID
6
Sito
http://www.tekram.com.cn:8060/files/About%20RAID%206.pdf.
11
web