Queremos ofreceros información útil en esta sección. Queremos mostrar datos fidedignos acerca de cual es el rendimiento de un sistema usando RAID por software sobre Linux. Y para eso necesitamos que nos ayudéis.
Así que, por favor, si implementáis alguna solución RAID radicalmente diferente a las que constan en este documento, enviadnos los datos relativos a vuestro hardware, la carga que soporta la máquina cuando ejecutáis pruebas de medición en ella, y, por supuesto, los resultados de vuestros benchmarks (usando, por favor, software válido a tal efecto).
Nosotros, por nuestra parte, trataremos de publicar las muestras que nos parezcan interesantes, ilustrativas o especialmente significativas, siempre siguiendo nuestro criterio personal.
Gracias, por adelantado, por vuestra ayuda. Y ahora vamos con los datos que nosotros mismos hemos obtenido en nuestras máquinas.
Esta sección contiene varias pruebas de evaluación de prestaciones ("benchmarks") de un sistema real y en producción en donde se ha implementado una solución de RAID por software. También hay algo de información general sobre benchmarking.
Las mediciones las hemos tomado usando el programa bonnie y siempre con ficheros dos o más veces más grandes que el tamaño de la RAM física de la máquina.
Estas mediciones sólo miden el ancho de banda de entrada y de
salida sobre un único gran fichero. Esto es interesante conocerlo si
estáis interesados en obtener buen rendimiento de E/S para grandes
lecturas/escrituras. Sin embargo, tales números nos dicen poco sobre
cuál sería el rendimiento si el array se usara para un almacén temporal
de noticias, un servidor web, etc. etc. Tened siempre en cuenta que
los números de las evaluaciones son el resultado de ejecutar un
programa "sintético". Pocos programas del mundo real hacen lo que
bonnie
hace y, aunque es interesante mirar estos números de E/S, no son
indicadores en última instancia del rendimiento de los dispositivos
del mundo real. Ni lo parecen ni lo pretenden.
Por ahora, sólo disponemos de los resultados de una máquina. Ahí va su configuración:
Parece casi imposible sacarle más de 30 MB/s a los buses SCSI de este sistema, usando RAID o no. Suponemos que eso es porque, como se trata de un ordenador bastante antiguo, el ancho de banda de la memoria RAM es muy pobre, y eso limita lo que puede moverse a través de las controladoras de disco.
Lectura significa entrada de bloques secuencial y Escritura significa salida de bloques secuencial. El tamaño de fichero fue de 1GB en todas las pruebas. Las pruebas se realizaron en modo monousuario. Se configuró el driver SCSI para que no encolara órdenes etiquetadas ("tagged command queuing", TCQ).
Tamaño de porción | Tamaño de bloque | Lectura kB/s | Escritura kB/s |
4k | 1k | 19712 | 18035 |
4k | 4k | 34048 | 27061 |
8k | 1k | 19301 | 18091 |
8k | 4k | 33920 | 27118 |
16k | 1k | 19330 | 18179 |
16k | 2k | 28161 | 23682 |
16k | 4k | 33990 | 27229 |
32k | 1k | 19251 | 18194 |
32k | 4k | 34071 | 26976 |
Con esto vemos que el tamaño de porción del RAID no importa mucho. Sin embargo, el tamaño de bloque del sistema de ficheros ext2 debería ser tan grande como fuera posible, lo cual significa 4KB (es decir, el tamaño de página) en una Arquitectura Intel de 32 bits.
Esta vez, el driver SCSI se configuró para usar TCQ, con una longitud de cola de 8. Por lo demás, todo es lo mismo de antes.
Tamaño de porción | Tamaño de bloque | Lectura kB/s | Escritura kB/s |
32k | 4k | 33617 | 27215 |
No se realizaron más pruebas. TCQ pareció incrementar ligeramente el rendimiento de las escrituras, pero la verdad es que apenas se notó la diferencia.
El array se configuró para funcionar en el modo RAID-5 y se hicieron pruebas similares.
Tamaño de porción | Tamaño de bloque | Lectura kB/s | Escritura kB/s |
8k | 1k | 11090 | 6874 |
8k | 4k | 13474 | 12229 |
32k | 1k | 11442 | 8291 |
32k | 2k | 16089 | 10926 |
32k | 4k | 18724 | 12627 |
En este caso, tanto el tamaño de porción como el tamaño de bloque son mucho más significativos.
Un RAID-10 no es más que un array RAID-1 de dos arrays RAID-0. El tamaño de porción es tanto el tamaño de las porciones del array RAID-1 como del array RAID-0. No se realizaron pruebas en las que esos tamaños de porción fueran diferentes, aunque esa debería ser una configuración perfectamente válida.
Tamaño de porción | Tamaño de bloque | Lectura kB/s | Escritura kB/s |
32k | 1k | 13753 | 11580 |
32k | 4k | 23432 | 22249 |
No se realizaron más pruebas. El tamaño de fichero fue de 900MB debido a que las cuatro particiones involucradas eran de 500 MB cada una, lo cual no deja espacio para un fichero de 1GB en esta configuración (RAID-1 sobre dos arrays de 1000MB).
No uséis hdparm
para testar el rendimiento de vuestros sistemas
RAID, eso no hará evaluaciones reales de vuestros arrays.
En lugar de hdparm, echad un vistazo a las herramientas que describimos aquí: IOzone y Bonnie++.
IOzone es una herramienta
pequeña, versátil y moderna. Saca benchmarks de rendimiento de E/S sobre
ficheros para operaciones como read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read
y aio_write
. Y corre sobre ext2, ext3, reiserfs, JFS y XFS.
Podéis usar IOzone para expresar el rendimiento de E/S en función del número de procesos y número de discos del sistema de archivos, algo útil cuando se trata de medir soluciones de RAID-0.
Aunque la documentación de IOzone está disponible en PDF, PostScript, nroff y MS Word, vamos a cubrir aquí un bonito ejemplo de IOzone en acción:
iozone -s 4096Eso ejecuta unos tests usando un archivo de 4096KB.
Y este es un resultado de muestra
File size set to 4096 KB Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 4096 4 99028 194722 285873 298063 265560 170737 398600 436346 380952 91651 127212 288309 292633NOTA: las funciones que hacen a IOzone útil para el benchmarking de RAID son las operaciones sobre ficheros
read strided
.
Bonnie++ parece más orientado a hacer pruebas de rendimiento
en dispositivos sueltos que en un conjunto RAID, pero puede pasarle
benchmarks a más de 2GB de datos en máquinas de 32 bits, y testar
operaciones sobre archivos como creat, stat, unlink
.