Archivo de la etiqueta: TRIM

Cómo configurar Ubuntu para disco de estado sólido (SSD)

HDD-vs-SSD

El siguiente tutorial tiene por objetivo configurar Ubuntu 12.04 LTS después de ser instalado en o bien utilizar un disco de estado sólido. La SSDs son muy diferentes de los HDs, no tienen discos magnéticos rotatorios y son muchísimo más rápido (no me lo creía hasta que instalé uno en mi computadora). Existe muchos tutoriales de éste tipo, pero son algo antiguos y realizan acciones que o ya no son necesarias y que según mi criterio no valen la pena.

Tomar en cuenta que éste artículo aplica para sistemas de archivos ext4. En mi caso mi SSD es un OCZ Technology 256GB Agility 4 Series SATA 6Gb/s 2.5-Inch.

Se realizarán las siguientes acciones:

  1. Habilitar TRIM.
  2. Desactivar registro de acceso de los archivos.
  3. Ajustar el planificador de disco.

1) Habilitar TRIM

TRIM es una instrucción que le permite al sistema operativo comunicarle a un disco de estado sólido (SSD) qué bloques de datos ya no están en uso. En sistemas de archivos tradicionales el disco duro nunca sabe qué información es borrada, pues el sistema de archivo la marca como espacio disponible en su estructurada de datos en RAM. Al poder ser notificado de bloques borrados, el firmware del SSD puede balancear la escritura de información en otras celdas de forma que pueda prolongar la vida útil del mismo. TRIM está disponible en Linux desde la versión 2.6.33 pero hay que habilitarla manualmente para cada partición en la que se desee utilizar. Para ello se requiere agregar la opción discard en las opciones de montaje de una partición en el archivo fstab.

En mi caso, las particiones de root y home quedan de la siguiente forma:

$ cat /etc/fstab

# / was on /dev/sda3 during installation
UUID=[MI-UUID] / ext4 discard,errors=remount-ro 0 1
# /home was on /dev/sda4 during installation
UUID=[MI-UUID] /home ext4 discard,defaults 0 2

2) Desactivar atime

Access Time (o atime) es un campo definido en el sistema de archivos que indica la fecha del último acceso de un archivo. Si, suena genial, pero es terrible. Es decir, para cada acceso de lectura a un archivo… hagamos una escritura a disco :S Es ridículo. Más sobre el problema de tener activado la actualización del atime (por defecto es relatime, parecido) pueden leer este link, este y este.

En el caso particular de un SSD es interesante desactivar la actualización del atime porque prolonga la vida del SSD al no tener que estar escribiendo información irrelevante para cada acceso de lectura. En el caso de los HDs es interesante desactivar la actualización del atime porque elimina el overhead importante de tener que realizar una escritura por cada lectura. Tiene consecuencias desactivar la actualización del atime? Si, programas como mutt pueden no funcionar… y, ya, este es el único ejemplo que conozco. Yo no uso mutt, por lo que no hay problema para mi.

Para desactivar la actualización del atime, tanto para carpetas como para archivos se debe agregar la opción noatime a las opciones de montado de cada una de las particiones en las cuales queremos desactivarlo. En mi caso:

$ cat /etc/fstab

# / was on /dev/sda3 during installation
UUID=[MI-UUID] / ext4 noatime,discard,errors=remount-ro 0 1
# /home was on /dev/sda4 during installation
UUID=[MI-UUID] /home ext4 noatime,discard,defaults 0 2

3) Ajustar el planificador de disco

El planificador de disco es el componente del sistema operativo que se encarga de calendarizar y ordenar las solicitudes de escritura y acceso a disco. Existen diferentes criterios para organizar la escritura a un disco. Por defecto, Linux utiliza el planificador llamado CFQ (Completely Fair Queuing). El CFQ, entre otros aspectos, asigna un margen de tiempo para el cual cada proceso puede enviar solicitudes de escritura a disco. En disco magnéticos tradicionales, esto permite que el rendimiento de acceso mejore. En el caso de un SSD, dado que el acceso es de tiempo prácticamente fijo, similar al RAM, este planificador no tiene sentido. Vamos a reemplazarlo por el planificador noop, o bien deadline. Para información de cada planificador disponible puede visitar este link.

Para verificar qué planificador está siendo utilizado para el disco sda (o cualquier disco) se puede ejecutar el comando:

$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]

Se mostrará el planificador en uso entre backets. Para cambiar el planificador en tiempo de ejecución se puede ejecutar el comando:

sudo sh -c "echo deadline > /sys/block/sda/queue/scheduler"

Para hacer este cambio permanente se edita el archivo /etc/rc.local y se agrega la una instrucción antes del exit 0 de la siguiente forma:

echo noop > /sys/block/sda/queue/scheduler
exit 0

Espero les sirva.

Etiquetado , , , ,