31 jul. 2007

Linux: Optimizando el acceso a disco con hdparm

Con la utilidad hdparm podemos activar ciertas características de los discos duros IDE modernos que en las distribuciones Linux no se suelen activar por defecto. Estos parámetros, una vez comprobado que mejoran la velocidad del disco duro, los podemos guardar en el archivo /etc/hdparm.conf hacia el final del mismo con la configuración para cada unidad. Si no lo tenemos instalado lo podemos instalar utilizando el administrador de programas de nuestra distribución. En Debian y derivados podemos usar el siguiente comando: sudo apt-get install hdparm.

Es conveniente ejecutar esta orden para conocer las capacidades del disco duro:

hdparm -i /dev/hda

Configuración típica para el disco duro alojado en el IDE 0 como maestro (ejecutar como root):


hdparm -c1 -d1 -u1 -m16 -A1 /dev/hda 

(añadir -q a cada parámetro para que no produzca salida):
hdparm -q -c1 -q -d1 -q -u1 -q -m16 -q -A1 /dev/hda   
Para comprobar los resultados:
hdparm -Tt /dev/hda


Leyenda:
-q: Desactiva la salida de mensajes de activación (no aplica con algunos parámetros como -t, -T, -v o -i)
-c1: Se activan las transferencias E/S de 32 bits entre el chipset y el puerto IDE, con -c0 se desactivan. También puedes poner -c3 para activar las transferencias sincronizadas que algunos chipsets requieren, pero supone más sobrecarga y suele ser contraproducente.
-d1: Se activa el modo DMA (Acceso directo a memoria) de la unidad, maximizando la E/S del acceso a disco y descargando a la cpu del trabajo, dando la mayor velocidad. Normalmente se activa por defecto por el núcleo de Linux si el sistema lo soporta.
-u1: Se activa el enmascaramiento de la interrupción para la unidad, permitiendo otras interrupciones de hardware mientras se procesa una interrupción de disco (irq), lo que generalmente mejora la respuesta de Linux y elimina errores como "serial port overrun". Utilizar con precaución: Algunas combinaciones unidad/controladora no toleran el incremento de latencia de E/S que genera esta característica cuando se activa, lo que resulta en una corrupción masiva del sistema de archivos. Sin embargo esto sucedía con discos (E)IDE antiguos y con kernels previos al 2.6.
-m16: Se activa la lectura/escritura multisector, característica de la mayoría de discos IDE modernos, permitiendo la transferencia de varios sectores del disco duro por cada interrupción de E/S, en vez de un sector por interrupción como es habitual Cuando esta característica se habilita, frecuentemente reduce la carga del sistema operativo para la E/S de disco de un 30% al 50%. En algunos sistemas incluso mejora la tasa de transferencia de datos de un 5% a un 50%. Sin embargo, algunas unidades (sobre todo antiguas) parece que van mas lentas con este modo activado, los resultados pueden variar. La mayoría de unidades soportan la configuración mínima de 2, 4 8 o 16 (sectores). Configuraciones mas altas pueden ser posibles, dependiendo de la unidad de disco. En discos con búfer pequeño (64 kB o menos) es recomendable indicar entre 4 y 8. Con hdparm -i /dev/'unidad' se puede conocer cuál es la máxima configuración soportada para una unidad instalada (indicado en MaxMultSect). Tener cuidado con unidades con hardware erróneo o antiguo, podría llevar a una corrupción masiva del sistema de archivos.
-A1: Se activa la característica read-lookahead de los discos IDE. Esto habilita la lectura por anticipado de los sectores contiguos en un archivo al que se accede en un momento dado, acelerando la lectura de archivos grandes. Suele estar activado por defecto.

Notas finales y comentarios:
Esta información en su mayor parte se ha recogido del archivo man (manual) de hdparm.
Además, con el modo Xfer podemos seleccionar el modo de transferencia de datos, aunque normalmente ya se configura a la mejor de forma predeterminada, por lo que no recomiendo cambiarlo (puede dar errores de transferencia si el cable es de mala calidad):

Xfer:
M/N-0-1-2-3-4-5-6
PIO-08-09-10-11-12
SDMA-16-17-18
MDMA-32-33-34
UDMA-64 -65-66-67-68-69-70
Y lo aplicamos de este modo:
hdparm -X66 /dev/hda
/dev/hda: setting xfermode to 66 (UltraDMA mode2)

Acerca de la organización de archivos y directorios en linux:
En Linux la organización de directorios y unidades cambia respecto a Windows debido a su filosofía Unix, puede haber un número infinito de unidades/directorios, y las unidades son en realidad directorios (donde se "montan" las particiones de las unidades). Para referirnos a una unidad de disco duro/cd-rom se utilida la denominación hd, siendo hda la unidad alojada en el IDE 0 como maestro; el hdb la unidad esclava en el mismo ide, hdc para la unidad maestra del IDE 1 y así sucesivamente. En el directorio /dev/ se enumeran todos los dispositivos de los que dispone el sistema. Como puedes ver todo es accesible a través de archivos en un sistema Unix.

Próximamente analizaremos la potente utilidad dd con la que podremos hasta recuperar datos de DVD's rayados que windfaults no lee...

No hay comentarios:

Publicar un comentario

Puede dejar su comentario. Los comentarios descalificativos o sin relación ninguna con el tema tratado serán eliminados sin previo aviso. Antes de plantear una duda, asegúrate de que la respuesta no está en otra entrada del tema visitando la etiqueta que hay al final del artículo para verlos todos; muchas veces lo que planteas puede haber sido corregido o comentado en otra entrada posterior.