strip/block size y otros temas de RAID (largo)

Marcelo Espinosa Alliende marcelo en ubiobio.cl
Mie Dic 31 13:08:14 CLST 2008


El mié, 31-12-2008 a las 11:38 -0300, Aldrin Martoq escribió:
> On Wed, 2008-12-31 at 10:09 -0300, Marcelo Espinosa Alliende wrote:
> > El mar, 30-12-2008 a las 17:52 -0300, Aldrin Martoq escribió:
> > > Haz la prueba, de hecho en el primer link que mandaste el tipo muestra
> > > la conversa en una lista y del primer link:
> > > http://lists.us.dell.com/pipermail/linux-poweredge/2007-December/034160.html
> > > 
> > > 10GB file:
> > > * RAID5 : 255MB/s
> > > * RAID10 : 224MB/s (???)
> > > 
> > > 2 x 10GB file (simultaneos)
> > > * RAID5 : 2 x 36MB/s
> > > * RAID10 : 2 x 31MB/s (ouch!)
> > esos datos muestran que la controladora es deficiente, los datos
> > resultantes lo avalan, de hecho el mismo autor lo declara, no debieras
> > poner esto como ejemplo.
> 
> Bueno, lo puse porque es similar a lo que obtuve yo en mis pruebas... y
> en tal caso es lo que importa, al fin y al cabo es lo que se va a usar.
> 
> 
> > el problema de raid 5 es que no escala bien con las escrituras... como
> > lo mencionó Horst, el número IO's que raid 5 es capaz de manejar se
> > determina por la formula siguiente:
> >  [ IO_lecturas + (4 * IO_escrituras) ] / n°_discos
> > en el caso de raid 10 es
> > [ IO_lecturas + (2 * IO_escrituras)] / n°_discos
> > al incrementar el nº de discos mejora considerablemente la lectura
> > (analogía de los platos que mencionas) , y en el caso de la escritura
> > gana raid10 pues sólo se duplica la operación, no cuadriplica como en el
> > caso de raid5.
> 
> Tienes razon en que me he fijado solo en la lectura. Ahora, esta parte
> no la entiendo, porque 4* y 2* ?

eso es solo para el caso de la escritura.

en raid_5 debes leer el stripe (1 "io"), más la paridad (otra "io"), ahí
tienes 2 IOs, luego modificas parte de la data, calculas la nueva
paridad y luego debes escribir el nuevo stripe más paridad, 2 IOs
nuevamente, ojo, no se hace todo junto, son operaciones separadas.

en raid_10 es "2" basicamente por que toda la data se duplica en su
espejo, osea 2 operaciones IO's por cada escritura.

> 
> Si tienes 4 discos, escribir un stripe:
> - en raid5: significa leer 2 y escribir 2 stripes.

no... el stripe es único, y la operación está explicado arriba.

> - en raid10: significa escribir 4 stripes.

tampoco, es "1" stripe que cruza 2 discos, más su espejo (2 discos).  

recuerda que el stripe cruza todos los discos. En el caso de raid 5 el
stripe ocupa N-1 discos y la paridad es distribuida.

> 
> La penalidad de raid5 es que primero leo y luego escribo, mientras que
> en raid10 solo escribo. No veo la duplicidad ni cuadriplicidad _en
> tiempo_ de la operacion, estoy asumiendo que escribo/leo al mismo tiempo
> en todos los discos (como si fueran platos extras).

explicado arriba, ojo que aquí estamos mirando desde la controladora
hacia adentro. Efectivamente los discos leen y escriben en paralelo y en
el caso de raid10 las controladoras decentes utilizan el espejo además
para las lecturas (no está ahí sólo por si acaso falla un disco).

> 
> 
> 
> Tambien hay algo extran~o en la formula, por lo siguiente:
> 
> > un ejemplo para ilustrar lo anterior.
> > 
> > carga de 500 I/Os con 10 discos para RAID5
> > 
> >  Lecturas    Escrituras            I/Os RAID_5  
> > ----------------------------------------------------------        
> >   100,00%    0,00%                (500 + 0) / 10    = 50 
> >    90,00%    10,00%               (450 + 200) / 10  = 65 
> >    75,00%    25,00%               (375 + 500) /10   = 87,5 
> >    50,00%    50,00%               (250 + 1000) / 10 = 125 
> >     0,00%    100,00%              (0 + 2000) / 10   = 200 
> > 
> > 
> > Lecturas    Escrituras            I/Os RAID_10 
> > ----------------------------------------------------------  
> >   100,00%    0,00%                (500 + 0) /10     = 50
> >    90,00%    10,00%               (450 + 100) / 10  = 55
> >    75,00%    25,00%               (375 + 250) / 10  = 62.5
> >    50,00%    50,00%               (250 + 500) / 10  = 75
> >     0,00%    100,00%              (0 + 1000) / 10   = 100
> 
> Con 10 discos y solo lectura deberias tener performance de 9x para
> raid-5 y 5x para raid-10; pero tus calculos no muestran eso.

no, el comportamiento en operaciones de IO es igual para ambos, aquí lo
que te dice es que cada disco va a manejar ese volumen de IOs y punto. 

la comparación que haces no es justa, pues raid10 tendría que tener 20
discos (para hacer equivalentes los "stripes") y ahí claramente gana
raid10 (a un costo mas alto, claro).

> 
> Me parece que estas calculando la carga que lleva cada disco (divides
> por el numero de discos) en vez del rendimiento (yo usaria alguna medida
> de ancho de banda, como KiB/s) para el conjunto en total.

aquí esta tu error... el tema se reduce a un sistema mecánico (discos)
que son capaces de realizar un numero finito (pequeño) de operaciones, y
eso limita el rendimiento del sistema RAID en concordancia con el nivel
seleccionado(0,1,5,10...), esto es independiente del ancho de banda,
para usar otra medida como BW entran otros factores a jugar (cache de
disco y de controladora, read ahead, write-caching, etc).

los datos y formulas muestran el comportamiento de cada nivel y su
escalabilidad, nada mas que eso.

por mucho cache que le pongas a la controladora, si tienes más de un 10%
de escrituras raid10 se va a comportar mejor que raid 5 y punto... 


-- 
Marcelo Espinosa Alliende,  mailto:marcelo en ubiobio.cl
Jefe Depto de Servicios Computacionales
Dirección de Informática - Universidad del Bío-Bio
fono: +56 (41) 2731531,  http://marcelo.ubb.cl



Más información sobre la lista de distribución Linux