Optimizando el Sistema Linux – Disco Duro

By | 0 Comments

  Continuamos con esta serie de posts, sobre lo que voy haciendo en mi nuevo laptop, tras instalar Debian Jessie (x64). Y es que el tema de los portátiles y el disco duro… se les va de las manos. Para ahorrar batería lo que se hace es bajar la velocidad de giro del disco o spin, cosa que no le va a sentar muy bien a nuestro disco.

  En mi caso, cada vez que bajaba/subía de revoluciones, que además es una cosa que lo vas a oír, la pantalla se congelaba por un segundo, a veces más otras menos. Imagino que no le pasará a todo el mundo, también dependerá del hardware, si a ti no te da problemas y no quieres cambiarlo, pues perfecto. Por suerte podemos configurar este aspecto a nuestro gusto.

  Primero vamos a instalar la aplicación que nos va a ayudar a realizar estos cambios.
hdparm – tune hard disk parameters for high performance

# apt-get install hdparm

  La verdad que es una aplicación completísima, echad un ojo al “man” y veréis la cantidad de parámetros que le podemos poner. Para ver que valor tenemos por defecto en el APM (Advance Power Management).

# hdparm -B /dev/sda

Valor por defecto APM

  Tenéis que indicar el dispositivo del disco duro, lo podéis ver en un “fdisk -l” por ejemplo. Aparentemente me pone que tengo un 128 y me parece raro, ya que según leo en el “man”.
– Valores entre 1 y 127 permiten bajar la velocidad de giro.
– Valores entre 128 y 254 no lo permiten.
– El valor 255 deshabilita el APM (si el disco lo soporta).

  Lo cual es imposible que tuviese un valor de 128 que no permite la bajada de revoluciones, cuando mi disco bajaba de revoluciones a cada rato. Pero investigando un poco más veo que hay otro parámetro para el APM que marca el tiempo que debe pasar para poner en standby el disco, que en hdparm corresponde al parámetro “-S”. Y investigando un poco más, veo que hay un archivo de configuración “/etc/apm/event.d/20hdparm”, que marca un valor de 18 para este parámetro y te explica que son múltiplos de 5, luego 18 veces 5 son 1,5 minutos. Ves, eso ya me cuadra más, porque es aproximadamente el intervalo de tiempo en el que me pasaban esas congelaciones de pantalla.

  Ok, APM fue un gusto conocerte… hasta nunca. Vamos a editar el archivo de configuración en /etc/hdparm.conf y agregamos al final esto. Ojo, esto es para hacerlo permanente, antes recomiendo ejecutar el comando hdparm -B 255 /dev/sda para verificar que nos funciona.

apm = 255
apm_battery = 255

/dev/sda {
}

  Con esto le decimos que deshabilite el APM tanto al bootear con la batería o cargándolo. Si tu disco no soporta el 255 ponle 254, o si quieres bajarlo un poco más, eso ya a gusto del consumidor. Al reiniciar ya veremos.

Valor APM deshabilitado

  Ahora seguimos con un poco de información más profunda. En los sistemas Linux la escritura en disco no se realiza inmediatamente, el kernel maneja un buffer en memoria que se va llenando con bloques que se escribirán en disco. Digamos que cuando se llene ese buffer, saltará un proceso y se escribirán los datos en disco. Todos esto aspectos del kernel se puede configurar desde /proc como ya hemos visto.

  Básicamente se juega con una serie de factores, el tamaño del buffer en memoria que albergará los datos antes de ser escritos al disco, y una serie de tiempos que vamos a detallar a continuación.

  Primero el buffer, podemos mirar el valor actual.

/proc/sys/vm/dirty_ratio     20

  Este es el porcentaje de la memoria disponible (no la total) que destinará al buffer. Ojo, este es el tamaño máximo que puede llegar a tener. ¿ Como saber cuantos datos están en buffer ?, pues mirando la información de la memoria.

$ cat /proc/meminfo | grep -i dirty

Kb en buffer

  Ahora que no estoy haciendo casi nada, la escritura en disco es mínima. Vamos a ver los otros parámetros.

/proc/sys/vm/dirty_expire_centisecs     3000

  Este valor son los “centisegundos” que debe permanecer un dato en el buffer para considerarse que debe ser ya escrito en disco. Pero ¿ cada cuanto se revisa esto ?.

/proc/sys/vm/dirty_writeback_centisecs     500

  Efectivamente, cada 5 segundos se van a revisar si los datos son ya “viejos” y se deben llevar a disco.

  Pero digamos que también hay un límite dentro del tamaño máximo de ese buffer.

/proc/sys/vm/dirty_background_ratio     10

  Atentos a la jugada, al tener un 10% de la memoria disponible ocupado por datos a la espera (datos sucios), ya se ejecuta el proceso de volcado a disco, independiente de los tiempos antes mencionados, y es al llegar al 20% de la memoria disponible (al límite máximo), cuando a los procesos se les impide que puedan seguir escribiendo hasta vaciar ese buffer lleno.

  Aquí ya depende de cada uno, como siempre, si ponéis un valor más alto al buffer se va a usar más la memoria, escribiendo al disco menos veces. Pero también es verdad, que todo lo que esta en memoria es información volátil. Como los portátiles llevan batería no es un riesgo tan grande de poder sufrir en apagón y llegar a perder datos.

  Aquí si voy ha hacer unos pequeños cambios, ya que el tiempo de chequeo de datos viejos es de 5 segundos, cada 5 segundos siempre habrá algún datos viejo que necesite ser escrito a disco, luego eso se transforma en que cada 5 segundos va a escribir (seguramente pocos datos) en disco. Así que vamos a subir este valor por lo menos a 10 segundos. Así se habrá juntado un tomo de datos a escribir más grande.

  Al final del archivo /etc/sysctl.conf vamos a agregar la línea.

vm.dirty_writeback_centisecs = 1000

  Y para curarnos en salud, vamos a poner el límite del buffer un poco más grande, ya que nunca queremos que en un momento dado se bloquee la escritura a los procesos. Vamos a subirlo por lo menos a 30%, en servidores he leído que lo suelen setear mucho más alto.

vm.dirty_ratio = 30

  Guardamos y ejecutamos sysctl -p que releerá los parámetros del fichero que acabamos de editar. Para ver como se comporta realmente, podemos copiar un archivo “gordo” y ver que pasa con este comando.

# while true; do cat /proc/meminfo | grep -i dirty; sleep 1; done

Carga inicial en buffer

  Vemos que lo va escribiendo en el buffer, y llega un punto en el que se pone ya a pasarlo a disco, mientras siguen entrando al buffer más datos.

Carga intermedia en buffer

  Saludos, y cuiden el disco duro del laptop!.