• Suscríbete al Feed Espacio Linux
  • Suscríbete al Feed por Email
  • Sigue a Espacio Linux en Identi.ca
  • Espacio Linux también en Facebook
  • Sigue a Espacio Linux en Twitter
  • Sigue a Espacio Linux en Google +
          Iniciar sesión | Registrarse

Acelerando el acceso a disco en Linux con hdparm

Si estás usando una distribución linux en una máquina Ix86 con discos IDE, es muy probable que el acceso a disco no esté optimizado en velocidad. No existe ningún comando mágico que permita aumentar la velocidad de tus discos con un simple click de ratón, pero haciendo pruebas con la herramienta hdparm, podemos mejorar el rendimiento (o no, si tu sistema ya estaba optimizado).

Antes de continuar, tengo que advertirte que, según la documentación de hdparm,
bajo ciertas circunstancias, el uso de dicho comando puede producir daños en
los datos del disco, yo lo tengo usado muchas veces, y nunca ha pasado nada,
pero quedas avisado…

Como precaución especial, para hacer estas pruebas y ajustes, es necesario
hacerlo como root y MUY ACONSEJABLE que sea en el modo single-user. Para los
neófitos, explicaré como se entra en modo single-user:

Desde el Lilo, si estás en lilo en modo texto tendrás una línea que pone lilo,
dónde puedes escribir, debes poner en ella ‘linux single’ (sin las comillas).
Si estás en lilo en modo gráfico, pulsando escape pasas a modo texto, y sigues
las anteriores instrucciones. Si ya has arrancado linux en modo normal y
quieres pasar as single-user, puedes optar por cerrar todas las aplicaciones, y
como root teclear ‘telinit 1’ (sin comillas) en una consola.

Bueno ya estamos en single-user, vamos al meollo del asunto, lo primero ver
como está nuestro disco, los discos duros en linux no son C:, D:… como en
windows, en un PC suele haber dos puertos IDE, en cada puerto puede haber un
dispositivo maestro y uno esclavo. El disco maestro del primer puerto ide es
/dev/hda, el esclavo es /dev/hdb. El disco maestro del segundo puerto es
/dev/hdc y el esclavo es /dev/hdd, si hubiese más puertos ide, seguiríamos con
/dev/hde, /dev/hdf, /dev/hdg, /dev/hdi… siguiendo el mismo esquema. Si no
sabemos donde está nuestro disco probamos, lo peor que puede pasar si
ejecutamos hdparm en un disco que no existe, es que nos diga que el dispositivo
no existe. Todo lo que comento a continuación se refiere a /dev/hda que es el
primer disco del primer puerto, el habitual en sistemas con un solo disco, ni
que decir tiene que si tienes más de un disco, debes repetir el mismo proceso
para cada uno de ellos.

Primero de todo vamos a ver como está configurado el disco, ejecutaremos:

hdparm /dev/hda

/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 1292/240/63, sectors = 19541088, start = 0

Esto nos indica como está configurado actualmente el disco, luego hablaremos
sobre cada parámetro. Otra cosa interesante que le podemos pedir es la
identificación que se obtuvo disco en el momento del arranque, puede no
funcionar en discos antiguos. Esta información nos puede dar pistas de las
características del disco.

hdparm -i /dev/hda

/dev/hda:
Model=FUJITSU MPC3102AT E, !FwRev=CD05, !SerialNo=41161144
Config={ !HardSect !NotMFM !HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, !TrkSize=0, !SectSize=0, ECCbytes=4
!BuffType=unknown, !BuffSize=0kB, !MaxMultSect=16, !MultSect=off
CurCHS=17475/15/63, !CurSects=-78446341, LBA=yes, LBAsects=19541088
IORDY=yes, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2
AdvancedPM=no
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3

Bueno, ya sabemos que disco tenemos, y como está configurado, vamos a probar su
velocidad:

hdparm -Tt /dev/hda

/dev/hda:
Timing buffer-cache reads: 128 MB in 1.34 seconds =95.52 MB/sec
Timing buffered disk reads: 64 MB in 17.86 seconds = 3.58 MB/sec

La ‘T’ hace que se haga un test del caché y la ‘t’ hace una prueba de acceso a
disco y nos devuelve los resultados, es conveniente repetir la spruebas 2 o 3
veces, para obtener un resultado correcto.

Los números de arriba pueden variar, pero en nuestro caso, 3,58Mb/segundo es
una velocidad penosa para un disco UltraDMA?-66, pero ¿como puedo mejorarlo?.
Solo nos queda ir probando parámetors y activando opciones que están
desactivadas, y volver a repetir las pruebas a ver si mejoramos. ¿Que opciones
tocar?:

multcount Esto establece cuantos sectores se leen en cada operación de

entrada/salida, Todos los discos modernos soportan esto, los valores usuales
para esta opción son las potencias de 2: 0,2,4,8,16,32 ver cual es el máximo
que soporta nuestro disco haciendo un hdparm -i y viendo si dice algo de
!MaxMultSect. Para establecer un valor a esta opción usar el parámetro -m de
hdparm, por ejemplo

parm -m8 /dev/hda

/dev/hda:
setting multcount to 8
multcount = 8 (on)

I/O Support: Salvo que tengamos una placa muy muy vieja (una de un 386), o un disco muy muy viejo, no debemos usar la opción 0, acceso a 16 bits. El valor aconsejable es 3 acceso 32-bits sincrono, que es acceso a 32-bits asincrono, pero menos aconsejable, por ser menos seguro aunque quizá pueda ser ligeramente más rápido que el modo 3. Para cambiarlo usamos el parámetro -c

unmaskirq Activando esta opción permitimos que linux enmascare otras interrupciones mientras accede a datos del disco, segun la configuración de nustro hardware puede ser peligroso. Para cambiarlo usar -u

using_dma Usar el acceso directo a memoria para las transferencias de disco puede acelerar nuestro disco, pero trastear mucho con esta opción puede colgar el sistema, combinarlo con -X34 o -X66 o similar (ver man hdparm) si nuestro disco soporta ultradma/66 o la ultradma/100. Se cambia con -d y los valores posibles son 0 o 1

readahead Esto es el tamaño del bloque de datos que el kernel lee en cada operación, normalmente está a 8, aumentando el valor ganamos velocidad al leer ficheros grandes, pero podemos perder en ficheros pequeños, y si lo disminuímos ocurre al revés, yo creo que a 8 está bien para un sistema típico.

PioMode? Usar con mucha precaución acepta valores de 0 a 5, y se cambia con el parámetro -p si no estás seguro de lo que haces no lo toques, puede dañar el disco.

Bueno, si has ido haciendo pruebas, ya sabes cuales son las opciones que
aceleran tu disco, ahora solo tienes que establecerlas cada vez que arranque el
sistema.

Suponiendo que nuestro disco funciona de forma óptima con los siguientes
parámetros

hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda

Solo tenemos que añadir esa órden en los ficheros de arranque, por ejemplo en
/etc/rc.d/rc.local para que se ejecute cada vez que arrancamos.

En distribuciones como Mandrake hay un fichero llamado
/etc/sysconfig/harddisks en donde se pueden establecer todos estos parámetros
de una manera más limpia, luego un script del arranque se encarga de llamar a
hdparm con los parámetros establecidos en este fichero.

(C) 2002 Redy Rodriguez. Se permite su uso, modificación, distribución y publicación mientras se mantenga este mensaje de copyright.


Temas:
Documentación, Hardware


Etiquetas:

Feed Espacio LinuxSi este artículo ha sido de tu interés, considera hacer un comentario o suscribirte al feed para que te enteres de nuevos artículos a través de tu lector de noticias o email.

Acerca del autor

Publica un comentario

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>