spiega md's raid10, f2


14

So come funzionano la maggior parte dei vari RAID. Ma mi sono imbattuto nella modalità raid10 consigliata , f2 durante la ricerca del raid del software linux. Non capisco davvero come funzioni su 2 o 3 dischi. qualcuno potrebbe spiegarmelo? o mi indichi un articolo davvero valido che lo spiega?

Risposte:


17

in realtà penso che Wikipedia lo spieghi meglio dei documenti reali. Ecco il testo dell'articolo.

Il driver RAID del software del kernel Linux (chiamato md, per "dispositivo multiplo") può essere utilizzato per creare un classico array RAID 1 + 0, ma anche (dalla versione 2.6.9) come un singolo livello [4] con alcune estensioni interessanti [ 5]. Il layout "quasi" standard, in cui ogni blocco viene ripetuto n volte in un array di strisce k-way, è equivalente alla disposizione RAID-10 standard, ma non richiede che n divida k. Ad esempio un layout n2 su unità 2, 3 e 4 sarebbe simile a:

2 drives         3 drives            4 drives
--------         ----------        --------------
A1  A1           A1  A1  A2        A1  A1  A2  A2
A2  A2           A2  A3  A3        A3  A3  A4  A4
A3  A3           A4  A4  A5        A5  A5  A6  A6
A4  A4           A5  A6  A6        A7  A7  A8  A8
..  ..           ..  ..  ..        ..  ..  ..  ..

L'esempio di 4 unità è identico a un array RAID-1 + 0 standard, mentre l'esempio di 3 unità è un'implementazione software di RAID-1E. L'esempio di 2 unità è RAID 1. Il driver supporta anche un layout "lontano" in cui tutte le unità sono divise in sezioni f. Tutti i blocchi vengono ripetuti in ciascuna sezione ma sfalsati di un dispositivo. Ad esempio, i layout f2 su array a 2 e 3 unità sarebbero simili:

2 drives             3 drives
--------             --------------
A1  A2               A1   A2   A3
A3  A4               A4   A5   A6
A5  A6               A7   A8   A9
..  ..               ..   ..   ..
A2  A1               A3   A1   A2
A4  A3               A6   A4   A5
A6  A5               A9   A7   A8
..  ..               ..   ..   ..

Questo è progettato per lo striping delle prestazioni di un array con mirroring; le letture sequenziali possono essere a strisce, come in RAID-0, le letture casuali sono leggermente più veloci (forse il 10-20% a causa dell'utilizzo dei settori esterni più veloci dei dischi e tempi di ricerca medi più piccoli), e le scritture sequenziali e casuali riguardano le stesse prestazioni ad altre incursioni speculari. Il layout funziona bene per i sistemi in cui le letture sono più frequenti di quelle scritte, il che è una situazione molto comune su molti sistemi. Il primo 1 / f di ogni unità è un array RAID-0 standard. In questo modo è possibile ottenere prestazioni di striping su un set con mirroring di sole 2 unità. Le opzioni near e far possono essere usate contemporaneamente. I blocchi di ciascuna sezione sono sfalsati di n dispositivi. Ad esempio, il layout n2 f2 memorizza 2 × 2 = 4 copie di ciascun settore, quindi richiede almeno 4 unità:

A1  A1  A2  A2        A1  A1  A2  A2  A3
A3  A3  A4  A4        A3  A4  A4  A5  A5
A5  A5  A6  A6        A6  A6  A7  A7  A8
A7  A7  A8  A8        A8  A9  A9  A10 A10
..  ..  ..  ..        ..  ..  ..  ..  ..
A2  A2  A1  A1        A2  A3  A1  A1  A2
A4  A4  A3  A3        A5  A5  A3  A4  A4
A6  A6  A5  A5        A7  A8  A6  A6  A7
A8  A8  A7  A7        A10 A10 A8  A9  A9
..  ..  ..  ..        ..  ..  ..  ..  ..

A partire da Linux 2.6.18 il driver supporta anche un layout offset in cui ogni striscia viene ripetuta o volte. Ad esempio, i layout di o2 su array a 2 e 3 unità sono disposti come:

2 drives       3 drives
--------       --------
A1  A2         A1  A2  A3
A2  A1         A3  A1  A2
A3  A4         A4  A5  A6
A4  A3         A6  A4  A5
A5  A6         A7  A8  A9
A6  A5         A9  A7  A8
..  ..         ..  ..  ..

Nota: k è il numero di unità, n #, f # e o # sono parametri nell'opzione mdadm --layout. Linux può anche creare altre configurazioni RAID standard usando il driver md (0, 1, 4, 5, 6).


6

Da quello che ho letto un array f2 RAID10 mantiene almeno 2 copie di ciascun blocco e sono memorizzate molto distanti tra loro.

Ecco le sezioni pertinenti dalle pagine man.

mdadm (8)

-p, --layout = Questa opzione configura i dettagli dettagliati del layout dei dati per gli array raid5 e raid10
...
Infine, le opzioni di layout per RAID10 sono una tra 'n', 'o' o 'p' seguita da una piccola numero. L'impostazione predefinita è 'n2'.

n segnala copie "vicine". Copie multiple di un blocco di dati hanno offset simili in dispositivi diversi.

o segnala copie "offset". Invece di duplicare i blocchi all'interno di una striscia, intere strisce vengono duplicate ma vengono ruotate da un dispositivo in modo che blocchi duplicati si trovino su dispositivi diversi. Quindi le copie successive di un blocco si trovano nell'unità successiva e sono un pezzo più in basso.

f segnala copie " lontane " (più copie hanno offset molto diversi). Vedi md (4) per maggiori dettagli su 'vicino' e 'lontano'.

md (4)

RAID10 fornisce una combinazione di RAID1 e RAID0 e talvolta noto come RAID1 + 0. Ogni datablock viene duplicato un numero di volte e la raccolta risultante di datablock viene distribuita su più unità. Quando si configura un array RAID10, è necessario specificare il numero di repliche di ciascun blocco di dati richieste (questo sarà normalmente 2) e se le repliche devono essere "vicine", "offset" o "lontane". (Notare che il layout 'offset' è disponibile solo dal 2.6.18).

Quando vengono scelte repliche " vicine ", le copie multiple di un determinato blocco vengono disposte consecutivamente attraverso le strisce dell'array, quindi le due copie di un blocco dati saranno probabilmente allo stesso offset su due dispositivi adiacenti.

Quando si scelgono repliche " lontane ", le copie multiple di un determinato pezzo sono disposte abbastanza distanti tra loro. La prima copia di tutti i blocchi di dati verrà suddivisa in strisce nella parte iniziale di tutte le unità in modo RAID0, quindi la copia successiva di tutti i blocchi verrà suddivisa in strisce in una sezione successiva di tutte le unità, assicurando sempre che tutte le copie di ciascun blocco siano su unità diverse.

La disposizione " lontana " può fornire prestazioni di lettura sequenziali pari a quelle di un array RAID0, ma a scapito delle prestazioni di scrittura degradate.

Quando si scelgono repliche "offset", le copie multiple di un determinato blocco vengono disposte su unità consecutive e offset consecutivi. In effetti ogni striscia viene duplicata e le copie sono sfalsate di un dispositivo. Ciò dovrebbe dare caratteristiche di lettura simili a "lontane" se si utilizza una dimensione di blocco sufficientemente grande, ma senza troppa ricerca di scritture.

Va notato che il numero di dispositivi in ​​un array RAID10 non deve necessariamente essere un multiplo del numero di repliche di ciascun blocco di dati, in quanto devono esserci almeno tanti dispositivi quante repliche.

Se, ad esempio, viene creato un array con 5 dispositivi e 2 repliche, allora sarà disponibile uno spazio equivalente a 2,5 dei dispositivi e ogni blocco verrà archiviato su due dispositivi diversi.


suona come offset è la strada da percorrere ...
xenoterracide

Penso che la spiegazione più visiva di Wikipedia sia più chiara ... quindi l'ho pubblicata qui.
xenoterracide,

2

È interessante e ben spiegato. Tuttavia, il semplice RAID1 ha anche la funzione, almeno sul RAID software Linux, di essere in grado di supportare più lettori in parallelo con prestazioni molto buone:

I dati vengono letti da qualsiasi dispositivo. Il driver tenta di distribuire le richieste di lettura su tutti i dispositivi per massimizzare le prestazioni.
[...] In teoria, avere un RAID1 N-disk permetterà a N thread sequenziali di leggere da tutti i dischi. (man 4 md, sezione RAID1)

Sembra che RAID10, nel suo layout vicino, sia più adatto a questo comportamento (accelerando I / O non a thread singolo come RAID0 ma I / O multi-thread). n2f2 con 4 dischi simili a RAID1 con 4 dischi.

Il layout n2 con 4 dischi farà entrambe le cose: raddoppiare le prestazioni di lettura per un singolo thread e quadruplicare le prestazioni di lettura per due thread (se lo scheduler md RAID10 di Linux è ben implementato, un thread dovrebbe leggere su una coppia e l'altro su l'altra coppia).

Tutto dipende da cosa ti serve! Non ho ancora fatto benchmark.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.