To RAID or not to RAID? Instalando un RAID-0 en mi PC

Introducción

Para mi cumpleaños me regalé un disco igual al que tiene mi computadora de escritorio, para dejarlos en configuración RAID-0, y de esta forma poder mejorar la performance de la computadora, atacando el que considero el cuello de botella más significativo en esta PC.

Antes de instalar todo y comprobar si la PC mejoró su rendimiento, me interesé en hacer algunas mediciones para no quedarme sólo con una sensación y poder comparar en cifras la performance del disco que ya tenía, la del que compré estos últimos días y la de ambos funcionando juntos. Además, me interesaba conocer la diferencia de rendimiento del RAID controlados por software (con Windows XP) y por hardware.

¿Qué es RAID?

RAID es un acrónimo en inglés que significa Redundant Array of Independent Disks; hace referencia a un sistema de almacenamiento que usa múltiples discos duros entre los que distribuye o replica los datos. Dependiendo de su
configuración (llamados niveles), los beneficios de un RAID respecto a un único disco son uno o varios de los siguientes: mayor integridad, mayor tolerancia a fallos, mayor throughput (rendimiento) y mayor capacidad.

Se necesita un controlador RAID para manejar la forma de guardar la información que se lee y escribe en cada disco. Este controlador puede ser un dispositivo de hardware (ya sea como parte integral del chipset del motherboard o como un dispositivo físico dedicado a dicha función) o puede estar implementado por software, como parte del sistema operativo.

¿Qué es RAID-0?

El RAID de nivel 0 es también conocido como data striping, y no tiene nada de redundant. La idea es dividir los datos de forma homogénea en cada uno de los volúmenes. Como consecuencia de esta división de los datos, se mejora el rendimiento tanto de escritura como de lectura, dado que los pedidos que se realizan a los dispositivos se pueden paralelizar y atender simultáneamente. En
el mejor de los casos, la performance crecerá de forma lineal a la cantidad de discos del RAID.

(Fuente: Wikipedia)

Esta configuración no es redundante ni tolerante a fallos, ya que los datos no están replicados entre los discos, ni se utilizan algoritmos de corrección o detección de errores. Esto quiere decir que una falla del RAID nivel cero ocurrirá cuando cualquiera de los discos duros falle (y la probabilidad de que esto suceda será mayor cuanto más discos tenga el RAID). Esta medida en horas se llama MTBF, mean time between failures.

La capacidad total del RAID-0 será la capacidad del disco menor,
multiplicado por la cantidad de discos. Si los discos son de tamaños diferentes, quedará espacio inutilizado los discos más grandes.

¿Qué es RAID-1?

El RAID de nivel 1 es también conocido como data mirroring. En esta configuración, cada disco actúa como una copia exacta (espejo) de los datos. El rendimiento de lectura se ve incrementado porque, como cada disco tiene una copia de los datos, la lectura se puede paralelizar. Sin embargo, la escritura será tan lenta como el más lento de los discos (esto es así porque se necesita tener toda la información replicada en cada uno de ellos).

(Fuente: Wikipedia)

La probabilidad de falla
de esta configuración disminuye cuanto más discos se tengan. Para que se pierda la información, deberán fallar todos y cada uno de los discos.

La capacidad total del RAID será igual a la capacidad del menor de los discos. Al igual que con un RAID-0, si los discos son de tamaños diferentes, quedará espacio sin utilizar en los discos de mayor tamaño.

Otros tipos de RAID

Hice una descripción más detallada de RAID-0 y RAID-1 porque son las opciones que estoy considerando para mi computadora. Sin embargo, configuraciones como RAID-5, RAID-6 o RAID-10 son mucho más utilizadas en servidores. Existe mucha información en Internet sobre estos y otros tipos de RAID, pero de todas formas repasemos algunas de sus características:

RAID-5

RAID-5 necesita por lo menos 3 discos para funcionar. En lugar de espejar todos los datos como hace RAID-1, RAID-5 trabaja con bloques (stripes) de datos, dividiendo la información entre N-1 discos, y utilizando el último disco para guardar información de
paridad del stripe. Esta información de paridad puede ser utilizada si se ocasiona un error de lectura, siendo posible reconstruir la información del bloque que sufrió el fallo. La infomación de paridad no se guarda en un único disco, sino que se alterna para cada bloque. Esto es debido a que en cada escritura, es necesario recalcular y escribir la información de paridad. Si esta información estuviera concentrada en sólo un disco para todos los bloques, sería necesario escribir en el mismo cada vez que se escribe un bloque, ocasionando un cuello de botella.

(Fuente: Wikipedia)

Una configuración de RAID-5 puede funcionar con un disco
fallido. Si fallan 2 o más, se pierden datos.

La capacidad de un RAID-5 es (N-1)xT, en donde N es la cantidad discos, y T es el tamaño del menor de los discos.

El rendimiento de lectura es similar a un RAID-0 para (N-1) discos. El rendimiento de escritura es pobre, especialmente si son escrituras no secuenciales y de tamaños menores que un stripe, ya que para cada escritura es necesario recalcular y escribir la infomación de paridad.

RAID-6

RAID-6 es similar a RAID-5, con la diferencia que usa dos discos para almacenar la información de paridad de cada stripe.

(Fuente: Wikipedia)

RAID-6 puede operar con fallas en 2 discos.

Otra ventaja con
respecto a RAID-5 es que el sistema no queda tan vulnerabla ante la falla de un segundo disco. Con discos duros cada vez más grandes, el tiempo de rearmado de un RAID que falló es también cada vez mayor, y por ende, también se agranda la ventana de tiempo en la cual al sistema tiene un punto único de falla.

El rendimiento de un RAID-6 puede ser similar a un RAID-5, dependiendo mucho de la implementación del cálculo de paridad de los stripes.

La capacidad de un RAID-6 es (N-2)xT, en donde N es la cantidad discos, y T es el tamaño del menor de los discos.

RAID-10 (llamado también RAID 1+0)

Un RAID-10 es RAID-0 de varios RAID-1. Es decir, se implementan varios RAID-1, y se utilizan funcionando como RAID-0.

(Fuente: Wikipedia)

Un RAID-10 podría seguir funcionando siempre y cuando al menos un disco de cada RAID-1 funcione.

En la mayoría de los casos, la performance de un RAID-10 es la más rápida de todas, siendo superada solamente por un RAID-0. Es la configuración elegida para escenarios de alta concurrencia de acceso a los discos como ser bases de datos, servidores de mail, etc.

Configuración, pruebas y resultados

Vamos a la práctica. La idea, como comentaba al principio, es hacer unas pruebas antes y después de configurar un RAID en mi computadora personal.

Configuración

Para configurar el RAID por hardware en mi computadora fue necesario hacer unos cambios en el BIOS. Más concretamente, cambié el parámetro Onboard SATA Type de “SATA disk” a “RAID controller“. En mi BIOS, está ubicado en Onboard device configuration ? South Onchip PCI device ? Onboard SATA Type.

nLuego de este cambio, al iniciar la PC y antes de bootear desde la lista de dispositivos configurados (CD, USB, discos duros, etc.) se presenta por un instante la posibilidad de apretar las teclas Ctrl+F, y acceder a FastBuild, un aplicativo para configurar distintos tipos de RAID, asignarle discos físicos, etc.

FastBuild

Por supuesto que esto será diferente para cada marca y modelo de motherboard, por lo que esto es simplemente una referencia.

Plan de pruebas

Hay infinidad de sitios que hacen pruebas de performance mucho más profesionales que éstas (por ejemplo Tom’s Hardware, PC perspective, Anantech, entre otros). De todas formas, me interesaba ejecutar las siguientes pruebas:

  • duplicar un archivo grande
  • duplicar un directorio con muchos archivos pequeños
  • descomprimir un archivo grande
  • ejecutar el benchmark de h2benchw
  • ejecutar el benchmark de IOMeter

Las especificaciones de mi PC relevantes a este post son las siguientes:

En este post detallaré los resultados de un RAID-0 por hardware, utilizando el chipset de mi motherboard en lugar del sistema operativo. Quizá más adelante pruebe con otras configuraciones de RAID por software o con otros niveles, en cuyo caso, complementaré la información con otro post.

Repetí las pruebas por lo menos 2 veces cada una para asegurarme que los resultados obtenidos estuvieran bien tomados (no fueran outliers).

Resultados

Para medir los tiempos de copia utilicé el programa TeraCopy, un sustituto a la copia de Windows muy recomendable.

Para la prueba de descomprimir un archivo utilicé el programa 7-Zip, también recomendable por tener la posiblidad de utilizar el excelente formato de compresión 7z, pero con la usabilidad un poco recortada si lo comparamos con WinRAR o WinZip.

Duplicar un archivo grande

Para esta prueba utilizamos un ISO de Ubuntu (más específicamente ubuntu-9.04-desktop-i386.iso, con MD5=66FA77789C7B8FF63130E5D5A272D67B) que pesa 698Mb.

Los resultados fueron los siguientes:

Duplicar un archivo grande - disco viejo

Duplicar un archivo grande - disco nuevo

Duplicar un archivo grande - RAID-0

El disco nuevo fue muy bueno duplicando el archivo grande, igual de bueno que el RAID-0. La diferencia con respecto al disco viejo es muy apreciable.

Duplicar un directorio con muchos archivos pequeños

Para esta prueba utilicé un directorio con más de 35.000 archivos, unos 1.500 directorios y una distribución de tamaños como se detalla en la siguiente figura:

Distribución
de tamaño de archivos

La duplicación del directorio terminó en 6’47” en el disco viejo, en 4’39” en el disco nuevo y en 4’15” en el RAID-0:

Duplicar muchos archivos pequeños - disco viejo

Duplicar muchos archivos pequeños - disco nuevo

Duplicar muchos archivos pequeños - RAID-0

Al igual que para el test anterior, el disco nuevo se comportó muy bien, sólo un poco más lento que la configuración en RAID. El disco viejo nuevamente quedó atrás.

Descompresión de un archivo comprimido

El archivo comprimido que utilicé contiene los más de 35.000 archivos y los 1.500 directorios utilizados en la prueba
anterior. El archivo ocupa 18.9Mb, y se expande a 319Mb luego de descomprimido.

Los resultados intermedios del proceso de descrompresión fueron los siguientes:

Descompresión de un archivo comprimido - disco viejo

Descompresión de un archivo comprimido - disco nuevo

Descompresión de un archivo comprimido - RAID-0

h2benchw

Para esta prueba ejecuté h2benchw con los siguientes parámetros:

h2benchw -english -s -p [0|1]

En donde:

  • -english: configura el idioma
  • -s: activa la medición de tiemops de acceso (seek time)
  • -p: activa la medición de perfiles de aplicación (swapping, installing, Word, Photoshop, copying y F-Prot)
  • 0 o 1: es el disco que quiero testear. En el caso del RAID-0, Windows ve un único volumen.

A continuación están los resultados para de cada volumen.

Disco viejo

Capacity: 
312576705 sectors=152625 MByte, CHS=(19457/255/63)
Checking timer for 10 seconds (Win32) ............. Ok.
timer resolution: 0.000 µs, 2399.960 MHz
timer statistics: 27237051 calls, min 0.15 µs, average 0.15 µs, max 70.00 µs
Reading some sectors to warm up... done.
Measuring random access time (whole disk):
reading... 13.78 ms  (min. 4.43 ms, max. 38.71 ms)
random access time in lower 504 MByte
reading... 7.30 ms  (min. 0.10 ms, max. 12.67 ms)
Running application profile `swapping' ...13158.4 KByte/s
Running application profile `installing' ...15769.4 KByte/s
Running application profile `Word' ...22180.3 KByte/s
Running application profile `Photoshop' ...18933.4 KByte/s
Running application profile `copying' ...28393.2 KByte/s
Running application profile `F-Prot' ...10606.0 KByte/s
Result: application index = 16.8
!!! WARNING: application profiles 
inaccurate since measured read-only

Disco nuevo

Capacity: 312576705 sectors=152625 MByte, CHS=(19457/255/63)
Checking timer for 10 seconds (Win32) ............. Ok.
timer resolution: 0.000 µs, 2399.960 MHz
timer statistics: 27513991 calls, min 0.14 µs, average 0.15 µs, max 148.74 µs
Reading some sectors to warm up... done.
Measuring random access time (whole disk):
reading... 13.17 ms  (min. 3.02 ms, max. 27.00 ms)
random access time in lower 504 MByte
reading... 6.72 ms  (min. -0.96 ms, max. 20.66 ms)
Running application profile `swapping' ...14424.6 KByte/s
Running application profile `installing' ...16695.8 KByte/s
Running application profile `Word' ...25281.3 KByte/s
Running application profile `Photoshop' ...23506.0 KByte/s
Running application profile `copying' ...35727.1 KByte/s
Running application profile `F-Prot' ...11728.3 KByte/s
Result: application index = 19.3

RAID-0

Capacity: 621088965 sectors=303266 MByte, CHS=(38661/255/63)
Checking timer for 10 seconds (Win32) ............. Ok.
timer resolution: 0.279 µs, 3.580 MHz
timer statistics: 3472778 calls, min 1.12 µs, average 1.40 µs, max 87.16 µs
Reading some sectors to warm up... done.
Measuring random access time (whole disk):
reading... 13.26 ms  (min. 3.22 ms, max. 33.53 ms)
random access time in lower 504 MByte
reading... 6.62 ms  (min. 0.12 ms, max. 15.13 ms)
Running application profile `swapping' ...14135.7 KByte/s
Running application profile `installing' ...16908.4 KByte/s
Running application profile `Word' ...29537.2 KByte/s
Running application profile `Photoshop' ...26825.3 KByte/s
Running application profile `copying' ...35556.3 KByte/s
Running application profile `F-Prot' ...
10469.2 KByte/s
Result: application index = 19.8

Al igual que en los tests anteriores, la configuración en RAID es la mejor de todas las opciones, siendo seguida de cerca por el disco nuevo.

IOMeter

IOMeter es  una herramienta para medición de performance de systemas de I/O (discos, red, etc.). Funciona ejecutando un profile predefinido, que determina el tipo de acceso al disco (escrituras, lecturas, secuenciales o aleatorias). El perfil utilizado está disponible para descargar haciendo click aquí. Esta prueba se ejecuta haciendo un 67% de pedidos de lectura, 33% de pedidos de escritura, repartidas de forma aleatoria en todo el espacio del disco duro. Además, cada pedido de lectura o de escritura es de a bloques de 4Kbytes. Se hacen 4 ejecuciones de 5 minutos cada una, con 1, 2, 4 y 8 pedidos de I/O en la cola de
invocaciones (outstanding queue depth) respectivamente.

Datos de la ejecución del benchmark en el disco viejo:

Queue depthRead IO/sWrite IO/s% CPUMBpsRead MBpsWrite MBps
166,532,50,310,380,260,13
266,832,10,380,390,260,13
467,733,70,310,400,260,13
874,636,70,470,430,290,14

Datos de la ejecución del benchmark en el disco nuevo:

Queue depthRead IO/sWrite IO/s% CPUMBpsRead MBpsWrite MBps
179,438,90,550,460,310,15
279,138,50,420,460,310,15
480,240,10,460,470,310,16
888,142,50,430,510,340,17

Datos de la ejecución del benchmark en el RAID-0:

Queue depthRead IO/sWrite IO/s% CPUMBpsRead MBpsWrite MBps
1248,8123,71,421,450,970,48
2290,8142,22,441,691,140,56
4306,2151,21,461,791,200,59
8308,8153,11,541,801,210,60

Mejoras del RAID-0 con respecto a los discos separados:

Disco viejoDisco nuevoRAID-0 vs viejoRAID-0 vs nuevo
Read IO/s100%119%419%353%
Write IO/s100%119%423%356%
% CPU100%127%468%370%
MBps100%119%421%354%
Read MBps100%119%421%353%
Write MBps100%119%423%356%

Los resultados obtenidos fueron un poco extraños, ya que el RAID-0 dio resultados mucho mejores (3 o 4 veces mejores) que cada uno de los discos por separado. No tengo claro si esto es normal y está bien, o las medidas individuales de cada disco estuvieron mal tomadas.

Conclusiones

Si bien tenía muy claro que agregarle otro disco a mi PC y ponerlos en RAID-0 no iba a ser la panacea, esperaba que el cambio se sintiera más en el uso práctico de la PC. Por supuesto que el sistema se nota bastante más ágil para responder, pero no se cuánto se lo puedo atribuir al RAID, y cuánto al tener una instalación limpia del sistema operativo. Al tratar con archivos grandes (de más de un megabyte) las velocidades son mejores, pero el uso que yo le doy a la PC está más asociado a leer y escribir cantidad de archivos chicos.

Las comparaciones entre los dos discos individuales fueron bastante contundentes: el disco nuevo, a pesar de ser de la misma
marca y de la misma capacidad, es bastante mejor que el disco viejo. Esto se puede deber a mejoras del hardware en sí, o quizá tenga que ver el contenido de ambos discos: estaban ambos bien desfragmentados, pero el viejo contenía la instalación del sistema operativo. Lo más correcto debería haber hecho cada conjunto de pruebas partiendo de una instalación limpia del sistema operativo, pero no podía darme el lujo de gastar todo el tiempo que esa tarea iba a insumir.

Sería interesante además, que las pruebas hubiesen sido realizadas utilizando dos discos del mismo modelo. De esta forma podríamos descartar diferencias de hardware, y focalizarnos en la diferencia entre tener un disco o un RAID de varios discos. Lamentablemente, no encontré en el mercado un modelo idéntico al disco que ya tenía.

Es notorio que este tipo de configuraciones e instalaciones no son normales para un usuario común. Llego a esta conclusión basándome en la dificultad para encontrar buena documentación práctica de configuración.

nDe todas formas, el contar con 160GB más de espacio es un avance, y si bien el precio del GB de disco es cada vez más barato, estas pruebas valieron mucho la pena, especialmente por lo aprendido durante el proceso.

Empiezo la colecta para un disco SSD, todo sea por seguir aprendiendo 🙂

Referencias

http://es.wikipedia.org/wiki/RAID

http://en.wikipedia.org/wiki/RAID

http://en.wikipedia.org/wiki/Standard_RAID_levels

http://en.wikipedia.org/wiki/Nested_RAID_levels

TeraCopy

7-Zip

Información sobre el formato de compresión 7z

IOMeter

h2benchw