![]()
![]() |
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. |
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.
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
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
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"
Sintaxis: hdparm -t /dev/[dico]
- Disco: 74.50 MB/sec
- RAID: 123.37 MB/sec
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
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 |
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
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 | |||||||||||||||