Mejorando el rendimiento del disco duro "hdparm" (kernel 2.2)


Manel Marin.

23 de febrero de 2001
Nivel: medio
Sistema: linux
Arquitectura: i386
Distribución: potato
Sección: administracion
Función: configuracion


ATENCION: ¡¡¡Riesgo de corrupción del sistema de archivos!!! Si usas un
kernel 2.4 parece que no es necesario optimizar el disco con hdparm


MI EJEMPLO: Hay algunas placas en las que el uso de la IRQ de los
discos duros no está soportada por el kernel 2.2 (como mi ASUS ATX para
K6) y no puedo activar el modo DMA, pero si que puedo activar la
transferencia IO de 32 bit incrementando la tasa de transferencia un
43% y el modo multisector, incrementando otro 25%, total incremento =
80% ¿No está mal, no?



 1) Instalar el paquete "hdparm"

 2) Medir (y anotar) la tasa de transferencia actual para comparar

        hdparm -t /dev/hda


 3) Ver información del HD

        hdparm -I /dev/hda

        * Aqui veremos:
            - El máximo número de sectores para el modo multisector
            - El máximo modo UltraDMA soportado


 4) Mirar los ajustes actuales del HD

        hdparm -v /dev/hda


 5) Activar la transferencia IO de 32 bits (+43% mejora) Esto permite
    transferir 32 bits en lugar de 16 bits en las operaciones de IO

        hdparm -c1 /dev/hda


 6)       Activar modo multisector (Modo Bloque IDE) (+%25 mejora)
         Esto permite transferir más de un sector por interrupción

        -El máximo aparece como "MaxMultSect=16" al hacer "hdparm -I
        /dev/hda"-

        hdparm -m16 /dev/hda


 7) Activar el DMA (no puedo activarlo, pero me admite la opción)
    *Esto no tiene por que mejorar la tasa de transferencia, pero
    descarga la CPU*

        hdparm -d1 /dev/hda


 8) Activar el modo UltraDMA4 (64 + modo 4 = 68), por defecto es
    modo 2 -A mi no me da incremento, pero puede ser porque no me
    funciona el DMA-

        hdparm -X68 /dev/hda


 9) Permitir otras interrupciones durante las interrupciones del HD Esto
    aumenta muchisimo la velocidad de respuesta del sistema Pero puede
    causar "Corrupción masiva del sistema de archivos" en algunos
    sistemas (algunas combinaciones de disco/controladora)

        hdparm -u1 /dev/hda # PROBAR CON SUMO CUIDADO


10) Haz pruebas intensivas (compila un kernel ;-) para asegurarte de que
    los ajustes que has fijado son estables en tu sistema. Si no vienen
    activados por defecto en las distribuciones es por algún motivo...


11) Hacer que los ajustes se mantengan tras la secuencia de recuperación
    de errores del HD. Atención haz esto solo cuando estés seguro de que
    los ajustes que usas son estables, ya que los errores no
    reestablecerán la configuración por defecto (más segura)

        hdparm -k1 /dev/hda


12) Hacer que se ejecute el comando en cada arranque

    - Añadir a /etc/rc.boot un script "00-hdparm" con (en mi caso):

---8<---
#! /bin/sh
#       Ajustes para incrementar la tasa de transferencia del HD
#
# -c1 = IO 32 bits -m16 = Modo multisector (16 sectores) -d1 = DMA -X68
# = Modo UltraDMA (64 + modo 4 = 68) -u1 = Permitir otras interrupciones
# durante las de HD *MUCHO CUIDADO* -k1 = Mantener los ajustes tras un
# error de HD

hdparm -c1 -m16 -d1 -u1 /dev/hda # Durante unos dias
# hdparm -c1 -m16 -d1 -u1 -k1 /dev/hda # Cuando veamos que es estable
--->8---

    - Darle permisos de ejecución al script



OTRAS OPCIONES:

a) Activar el buffer de escritura del drive IDE (normalmente OFF) No
   me gusta, si haces esto el ejecutar un "sync" no tiene porque hacer
   lo que le pides, y además ya tenemos caché de escritura en el
   kernel ¿no?

        hdparm -W1 /dev/hda # NO LO RECOMIENDO


b) Hacer que el disco sea de sólo lectura (curioso...)

        hdparm -r1 /dev/hda # ---NO LO HE PROBADO---


c) "hdparm" tiene opciones de control de energía, puedes mirarlo en la
   página man ("man hdparm")



AGRADECIMIENTOS: A TooManySecrets por su mensaje inicial a la lista de
correo de aguila, que he utilizado como base y ampliado (Gracias
TooMany ;-)


MAS INFO: man hdparm

© 2001, La Espiral.