Estudiando un RAID0 (realizando varios benchmarks)

Los discos duros son el actual cuello de botella de un ordenador, mientras tenemos conexiones de red estandarizadas a 125MB/s la mayoría de los discos actuales no superan los 70MB/s. Un metodo relativamente barato de aumentar ese rendimieno es el RAID. En este artículo estudiaremos los resultados de un fakeraid Nvidia nForce 680i con dos discos SATA2 de 300GB en RAID0. Naturalmente el entorno será GNU/Linux utilizando dmraid.

1. El RAID0

Vamos a empezar con una pequeña explicación teórica. El RAID0 (Data Stripping) se usa para incrementar el rendimiento. Consiste en distribuir los datos equivalentemente entre dos o más discos. Es decir, si diponemos de 2 discos, al copiar un archivo se guarda la mitad en cada uno. Como es deducible, el rendimiento que ofrezca un RAID0 depende en gran medida del software que lo gestione. Uno bueno dividirá las operaciones de lectura y escritura en bloques de igual tamaño y los distribuirá equitativamente entre los dos discos.Hay que decir que el RAID0 no dispone de redundancia, por lo que si uno de los discos se daña, se pierde toda la información.

Podemos hacer un RAID mediante software, con el propio sistema operativo. O mediante hardware, donde es una tarjeta controladora quien lo gestiona por lo que es transparente para el SO. Luego hay un "híbrido" comunamente llamado fakeraid, este es creado desde la BIOS usando un controlador estandar de disco y gestionado por el Sistema Operativo. El mejor de los tres es el hardware, pero el precio de las tarjetas controladoras es superior a los 200 euros. Entre el híbrido y el software, cada uno tiene sus pros y contras. La ventaja del híbrido es que permite el dual-boot ya que se implementa en la BIOS. Pero generalmente el software da mejor rendimiento.

2. El entorno

Placa base: Asus P5N32-E SLI
RAID: fakeraid integrado en placa con chip 680i
Discos: 2x SATA2 300Gb/s de 300GB
CPU: Intel Core 2 Duo 6420 2.13GHz - cache de 4MB
RAM: 3GB Kingston DDR2 667MHz
SO: Gentoo Linux con kernel 2.6.22 utilizando dmraid

3. El software de testeo

Utilizaremos los siguientes programas para estudiar el rendimiento:

- hdparm - http://sourceforge.net/projects/hdparm
- dd - incluido en todos los Linux
- cp - incluido en todos los Linux
- bonnie++ - http://www.coker.com.au/bonnie++
- dbench - http://freshmeat.net/projects/dbench

4. Resultados

Las pruebas se harán primero con uno de los discos, y luego con el RAID.

Se limpiarán siempre las caches para evitar el uso de RAM en las pruebas mediante el comando: "echo 3 > /proc/sys/vm/drop_caches"

 

1. HDPARM


Sintaxis: hdparm -t /dev/[dico]

- Disco: 74.50 MB/sec

- RAID: 123.37 MB/sec

 

 

2. CP


Creamos un archivo de 2GB y lo copiamos en la misma unidad. Esta prueba es de lectura/escritura simultaneamente.

Sintaxis: dd if=/dev/zero of=test bs=1024 count=2000000 && time cp test /tmp/test

- Disco: 26.7 MB/s

- RAID: 52.99 MB/s

 

 

3. DD


Sintaxis: dd if=/dev/zero of=test bs=[tamaño bloque] count=[numero bloques]
He hecho un pequeño bash script que escribe un archivo de X tamaño en bloques de 1024 a 32768 Bytes: ddtest
La prueba se ha hecho con 10GB de datos.

- Disco

tamaño bloque (bs) cantidad de bloques (count) Resultado MB/sec
1024 10000000 65
2048 5000000 68
4096 2500000 69
8192 1250000 64
16384 625000 68
32768 312500 66

 

 

- RAID

tamaño bloque (bs) cantidad de bloques (count) Resultado MB/sec
1024 10000000 107
2048 5000000 115
4096 2500000 119
8192 1250000 120
16384 625000 120
32768 312500 106

 

4. DBENCH 3.0


Syntaxis: dbench -t 30 -D /tmp -c /usr/share/dbench/client.txt 1
- Disco: 216.449 MB/sec
- RAID: 276.369 MB/sec

Syntaxis: dbench -t 30 -D /tmp -c /usr/share/dbench/client.txt 10
- Disco: 282.904 MB/sec
- RAID: 495.722 MB/sec

Syntaxis: dbench -t 30 -D /tmp -c /usr/share/dbench/client.txt -sS 1
- Disco: 9.01807 MB/sec MB/sec
- RAID: 43.8316 MB/sec MB/sec

Syntaxis: dbench -t 30 -D /tmp -c /usr/share/dbench/client.txt -sS 10
- Disco: 10.1228 MB/sec MB/sec
- RAID: 38.6868 MB/sec MB/sec

 

 

5. BONIE++ 1.93


Sintaxis: bonnie++ -d /tmp -m[nombre] -n 4:1048576:0:32 -u0 -r512

Version 1.93c Sequential Output Sequential Input Random
Seeks
Sequential Create Random Create
Concurrency Size Per Char Block Rewrite Per Char Block Num Files Max Size Create Read Delete Create Read Delete
K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU
Disco 1 1G 327 99 57346 22 60817 14 1581 95 1240684 99 2487 22 4 1048576 58 10 3769 98 4826 95 57 11 3650 99 4262 97
Disco Latency 38960us 54380us 2979us 83702us 20us 24014us Latency 1005ms 566us 522us 1563ms 766us 577us


Version 1.93c Sequential Output Sequential Input Random
Seeks
Sequential Create Random Create
Concurrency Size Per Char Block Rewrite Per Char Block Num Files Max Size Create Read Delete Create Read Delete
K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU
RAID 1 1G 525 99 121149 33 122788 25 2178 99 1847551 99 7541 47 4 1048576 109 14 5285 97 4546 72 108 14 5242 98 5959 97
RAID Latency 25022us 1010ms 1018ms 9388us 4214us 20531us Latency 1552ms 3974us 4045us 1331ms 7816us 2656us