Optimización de Linux con discos SSD

Hace poco adquirí un nuevo portátil, con disco SSD. Era uno de los pocos requisitos, pero casi indispensable para la compra. El precio era la otra gran incógnita.
Tras la instalación del nuevo sistema operativo, en este caso opté por una Linux Mint (XFCE Edition), pude probar de primera mano la velocidad de esta nueva tecnología. Sorprende!
El gran problema de la tecnología SSD es que tiene un límite máximo de escrituras y es por ello que hay que cuidarlo diariamente. Cuando más podamos reducir las escrituras, mejor.
Otro de los aspectos a tener en cuenta es el cambio radical del acceso a disco. Ahora el acceso es directo (al igual que en un pen drive) y no depende de una cabeza lectora. Por lo tanto, el algoritmo de optimización de escritura, que traen todos los kernel's puede ya no ser útil. Es por ello, que en este artículo voy a describir los pasos que seguí a la hora de optimizar la instalación.
  1. Uso de TRIM
    TRIM es una orden especial para trabajar con discos SSD que permite al SO comunicarle al disco qué bloques ya no están en uso, para poder marcarlos como libres. El propósito de esta instrucción es mantener la velocidad del disco durante toda su vida.
    Lo primero que tenemos que saber es si nuestro disco soporta este tipo de tecnología. Se presupone que sí, pero mejor garantizarnos. Para ello,
    shell> hdparm -I /dev/sda | grep TRIM
      *  Data Set Management TRIM supported (limit 8 blocks)
    
    Con usa salida similar a esta, significa que tenéis soporte TRIM. Ahora debemos de montar cada partición que esté sobre el disco SSD con la opción discard. Para ello, editamos el fichero fstab y añadimos y cambiamos las líneas implicadas (ajustar a cada disco y cada partición como corresponda)
    /dev/sda1  /  ext4  errors=remount-ro  0  1
    
    por
    /dev/sda1  /  ext4  discard,errors=remount-ro  0  1
    
  2. Optimización de /etc/fstab
    A mayores de los cambios de discard, en el fichero fstab también podemos tener otro tipo de optimizaciones, como las que suponen noatime y nodiratime. Ambas evitan que se escriban los datos de acceso a ficheros y directorios cada vez que estos se producen. Para un equipo de sobremesa o un portátil, es una buena idea, puesto que no nos interesa tener estos datos.
    /dev/sda1  /  ext4  noatime,nodiratime,discard,errors=remount-ro  0  1
    
    Este cambio, con la mayoría de programas no supone problema alguno. Quizás haya alguno que sí necesite tener estos datos escritos. Si es así, entonces podemos pensar en cambiar ambas opciones por "norelatime", que sí escribe los datos, pero no cada momento que se producen.
  3. Deshabilitando el uso de SWAP
    Con la cantidad de RAM que actualmente traen los equipos, mínimo hablamos de 4Gb de RAM, sino más, es lógico pensar que no se vaya a usar la SWAP. Si optaste por crear una partición SWAP, vamos a desactivarla para que no se use. En caso de que sea necesario su uso en un futuro, el cambio es fácilmente reversible. En el fichero, /etc/sysctl.conf agregamos la línea
    vm.swappiness=0
    
  4. Aprovechamiento de la RAM
    Sí, vamos a optar por llevar todos aquellos directorios temporales sobre los que se hacen muchas pequeñas escrituras a la RAM. Esto hará que se hagan más rápido y también que no se emplee el disco para datos temporales. Esta opción es realmente aplicable a cualquier sistema con mucha RAM, ya que siempre es más rápida que el disco.
    Yo personalmente opté por dejar en memoria los directorios /tmp, /var/tmp y /home/USER/.cache, los que más datos temporales suelen tener. Para ello, escribí en el fichero /etc/fstab lo siguiente.
    tmpfs  /home/javier/.cache  tmpfs  size=1024M,mode=777   0  0
    tmpfs  /tmp                 tmpfs  noatime,mode=1777     0  0
    tmpfs  /var/tmp             tmpfs  noatime,mode=777      0  0
    
    Los directorios que querráis poner en RAM ya es cosa vuestra, simplemente tener en cuenta cuando el equipo se apaga, esos datos se pierden. Leí artículos que hablaban de llegar a poner /var/log en RAM y también los directorios de lock y run. Personalmente esos datos a mi me interesa tenerlos, así que no los pasé a RAM.
  5. Modificar cola de escritura en disco
    Otro de los grandes cambios, y ya el último, es cambiar el plafinicador de escritura a disco. Vamos a pasar de tener el por defecto, deadline a noop.
    shell> cat /sys/block/sdX/queue/scheduler 
    noop [deadline] cfq
    
    Para ello editamos el fichero /etc/default/grub y dejamos la línea tal como sigue,
    ...
    GRUB_CMDLINE_LINUX="elevator=noop"
    ...
    
    Y a continuación, actualizamos el grub para que recoja los cambios.
    shell> update-grub
    
Con todo esto, lo mejor es reiniciar ahora el equipo, para que arranque con todos los cambios. Tras el obligado reboot, tendremos el sistema tal que así,
shell> cat /sys/block/sda/queue/scheduler 
[noop] deadline cfq

shell> mount
/dev/sda1 on / type ext4 (rw,noatime,nodiratime,discard,errors=remount-ro)
tmpfs on /tmp type tmpfs (rw,noatime,mode=1777)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
tmpfs on /var/tmp type tmpfs (rw,noatime,mode=777)
tmpfs on /home/javier/.cache type tmpfs (rw,size=1024M,mode=777)
Y el sistema debería de hacer menos escrituras en disco e ir realmente bien.



No hay comentarios :

Publicar un comentario

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios