X
  • ZFS
    May 31, 2008

RAID-Z

Guest Author

La promesa original de RAID (matrices redundantes de discos baratos) fue que proporcionaría unidades de almacenamiento rápidas y fiables utilizando discos baratos. El punto clave era barato; pero sin saber muy bien cómo hemos acabado aquí. ¿Por qué?

RAID-5 (y otros esquemas de datos/paridad como RAID-4, RAID-6, par-impar y paridad de fila diagonal) nunca harán cierta la promesa de RAID -- ni pueden -- debido a un defecto conocido como el agujero de escritura RAID-5, por el que cada vez que se actualicen los datos de una banda RAID deberá actualizarse también la paridad para que el valor XOR de todos los discos sea cero -- se trata de la ecuación que permite reconstruir los datos cuando falla un disco. El problema es que no hay forma de actualizar dos o más discos atómicamente, y eso hace que las bandas RAID resulten dañadas por un choque eléctrico o un apagón.

Veamos esto con un ejemplo; suponga que la luz se corta después de haber escrito un bloque de datos pero antes de escribir el bloque de paridad correspondiente. En tal caso tendremos que los datos y la paridad de la banda no son coherentes entre sí, y permanecerán así para siempre (a menos que en algún momento consiga escribir una banda completa sobre los datos antiguos). De lo que se deduce que, si un disco falla, el proceso de reconstrucción de RAID generará basura tan pronto como se intente leer cualquier bloque de la misma banda. Y lo peor de todo es que lo hará tan en silencio... y sin la menor idea de que los datos que facilita no son correctos.

Hay soluciones de software dedicadas, pero son tan lentas que el software de RAID está muerto en el mercado. Los productos RAID actuales realizan toda la lógica RAID en el hardware, donde pueden utilizar NVRAM para sobrevivir a la pérdida de energía. Funciona, pero es caro.

Y, además, hay un molesto problema de rendimiento con los esquemas RAID existentes. Cuando se escribe parcialmente en una banda, es decir, cuando se actualizan menos datos de los que contiene una banda RAID, el sistema RAID debe leer los datos y la paridad antiguos para poder calcular la nueva paridad. Es una cantidad de trabajo enorme. Mientras que una escritura en toda una banda completa se puede hacer de forma asíncrona, una escritura parcial debe hacer la lectura síncrona antes incluso de empezar a escribir.

De nuevo, el hardware caro ofrece una solución: una matriz RAID puede guardar temporalmente la escritura parcial en el búfer NVRAM mientras espera que el disco haga su tarea, de modo que la lectura de latencia quede oculta para el usuario. Por supuesto, este procedimiento sólo funciona hasta que el búfer NVRAM se llena. ¡No es problema, dice el vendedor de almacenamiento! Sólo hace soltar más efectivo para tener más NVRAM. No hay problema que no pueda resolverse con dinero.

La escritura de banda parcial añade otro problema más a un sistema de archivos transaccional como ZFS. Necesariamente, un sistema de escritura de banda parcial modifica datos vivos, lo que no deja de ser una infracción a la norma que garantiza la semántica transaccional. (No tiene importancia si pierde energía durante una escritura de banda completa por la misma razón que no importa si pierde energía durante cualquier otra escritura en ZFS: ninguno de los bloques en los que se escribe sigue estando vivo).

Si sólo hubiéramos hecho mal esas dichosas escrituras de banda parcial...

Introducción de RAID-Z.

RAID-Z es un esquema de datos/paridad igual que el sistema RAID-5, pero con un ancho de banda dinámico. Cada bloque, sea cual sea su tamaño, tiene una banda RAID-Z propia, lo que significa que cada escritura RAID-Z es una escritura de banda completa. Cuando esto se combina con la semántica transaccional "copiar al escribir" de ZFS, se elimina totalmente el agujero de escritura RAID. Además, RAID-Z es incluso más rápido que el sistema RAID tradicional porque no tiene que "leer-modificar-escribir".

¡Ja, ja, ja! ¿de qué habla? ¿Ancho de banda variable? Vale, parece bastante claro, pero, si es tan buena idea... ¿por qué no lo hace todo el mundo?

Bueno, el truco está en la reconstrucción RAID-Z. Las bandas son todas de tamaños distintos, lo que quiere decir que no existen fórmulas de tipo "poner todos los valores XOR de los discos a cero". Ni es necesario atravesar el sistema de archivos de metadatos para determinar la geometría RAID-Z. Tenga en cuenta que esto sería imposible si el sistema de archivos y la matriz RAID fueran productos independientes... y he aquí la razón de que no haya nada que iguale a RAID-Z en el mercado del almacenamiento actual. Lo que en verdad necesita es una visión integrada de la estructura lógica y física de los datos para hacer que funcione.

Pero, espere, según dice: ¿no es lento? ¿no es caro atravesar todos los metadatos? En realidad es un intercambio de concesiones. Si el lugar de almacenamiento está a punto de llenarse, entonces, sí, es lento. Pero si no está a punto de llenarse, la reconstrucción impulsada de los metadatos es mucho más rápida porque sólo copia los datos vivos, sin perder tiempo en copiar el espacio sin asignar del disco.

Pero mucho más importante todavía es que, a medida que atraviesa los metadados, ZFS puede validar cada bloque al compararlo con una suma de comprobación de 256 bits. Los productos RAID tradicionales no pueden hacer esto; se limitan a agrupar a ciegas los XOR de los datos.

Sin embargo, el punto más importante de RAID-Z es... la auto sanación de los datos. Además de poder gestionar un error total de disco, RAID-Z es capaz de detectar y corregir la corrupción silenciosa de los datos. Cada vez que se lee un bloque RAID-Z, ZFS lo compara con su propia suma de comprobación. Si los datos del disco no devuelven una respuesta correcta, ZFS lee la paridad y lleva a cabo la reconstrucción del proceso para averiguar qué disco ha devuelto los datos incorrectos. A continuación, repara el disco dañado y envía los datos correctos a la aplicación. ZFS se encarga también de informar del incidente a través de Solaris FMA para que el administrador del sistema sepa que uno de los discos está fallando.

Por último, recuerde que RAID-Z no requiere ningún tipo de hardware especial. No necesita NVRAM para garantizar la corrección de los datos, ni necesita escribir en el búfer para ofrecer un buen rendimiento. Con RAID-Z, ZFS se hace realidad la promesa original de RAID: ofrecer unidades de almacenamiento rápidas, fiables y utilizando discos baratos.


Para ver un ejemplo real de RAID-Z detectando y corrigiendo la corrupción silenciosa de datos en un hardware con problemas, consulte Saga SATA de Eric Lowe.

El algoritmo actual RAID-Z es de paridad sencilla, pero el concepto RAID-Z funciona con cualquier tipo de RAID. En el trabajo se ha utilizado una versión de doble paridad.

Un último detalle que los colegas programadores sabrán apreciar: toda la implementación de RAID-Z está sólo en 599 líneas.


Technorati Tags:

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.