Mejora la velocidad de disco en Linux con noatime, nodiratime o relatime

Mejora la velocidad de disco en Linux con noatime, nodiratime o relatime

Hoy vamos a hablar acerca de como mejorar las tasas de lectura y escritura en sistemas Linux mediante un sencillo de cambio de configuración en el sistema.

El ecosistema Linux es altamente personalizable -como sabréis seguramente- y para cambiar el comportamiento de sus servicios o procesos lo normal es que solo sea necesario editar el archivo correcto, donde está su configuración.

Mejorar el rendimiento del disco en sistemas Linux

Con el fin de sobrecargar un poco menos el rendimiento del sistema -concretamente, del disco- vamos a ver hoy cómo desactivar el atributo atime de del sistema.

De esta manera podremos ganar algo más transferencia en escritura y lectura, dado que le sistema estará menos ocupado manteniendo este atributo actualizado para cada uno de los archivos del sistema que son accedidos.

No solo ganaremos algo de velocidad en nuestro disco duro, sino que además liberaremos algo de recursos de nuestro procesador y memoria.

¿Qué es el atributo atime?

En sistemas basados en Linux, el atributo atime (access time) es recopilado y actualizado cada vez que el usuario accede a un determinado archivo. En total, se recogen 3 atributos principales para cada archivo presente en el disco, lo que se conocen como MAC:

  • Access: la última vez que el archivo fue leído
  • Modify: la última vez que el archivo fue modificado (su contenido)
  • Change: la última vez que los meta-datos del archivo fueron modificados (permisos, nombre, propietario, etc)

El sistema de archivos de Linux actualiza constantemente estos datos y los almacena en la información contenida en su Inodo correspondiente.

Si enviamos un comando como el siguiente (stat):

stat rr.sh

Obtendremos una salida similar a esta:

File: ‘rr.sh’
Size: 107 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17098542 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-08-30 21:02:47.288383934 +0100
Modify: 2018-08-30 21:02:30.208383934 +0100
Change: 2018-08-30 21:02:37.844383934 +0100
Birth: -

Si queréis hacer una prueba para ver cómo se actualizan estos datos, podéis usar el comando touch en UNIX/Linux sobre un archivo, con el que podremos actualizar su último acceso (-a), modificación (-m), etcétera.

Este atributo de acceso no solamente se está actualizando para los archivos que nosotros mismos copiamos o utilizamos a diario, sino además de forma invisible para cada archivo de sistema, paquetes de controladores o aplicaciones, actualizadas, etcétera.

¿Necesito tener el atributo atime habilitado?

Como en tantas cosas la palabra es depende. Me explico, desde el punto de vista de la seguridad y para garantizar la integridad de los archivos no tiene mucho sentido desactivar un indicador como atime.

Esto es especialmente cierto en entornos corporativos o en servidores. Sin embargo, desde el punto de vista del usuario doméstico podemos decir que no es necesario. Ningún proceso o servicio va a fallar por el hecho de desactivarlo.

En base a mi experiencia personal y a las numerosas fuentes consultadas podemos sustentar esta teoría como algo real. Por ejemplo, en la Wiki de ArchLinux se indica lo siguiente:

El inconveniente de la opción predefinida atime es que incluso la lectura de un archivo desde la memoria caché (lectura desde la memoria, en lugar desde el disco directamente), aún en este caso, ¡resultará registrado! Usando la opción noatime deshabilita completamente la actualización del tiempo de acceso a los archivos cada vez que se lee un archivo[…]

Diferencias entre Noatime, nodiratime y relatime

  • Noatime: deshabilita por completo el registro de tiempo de acceso para cualquier archivo. Implica la aplicación de nodiratime.
  • Nodiratime: deshabilita el registro de tiempos de acceso para los directorios en Linux, pero mantiene activo el registro para los archivos.
  • Relatime: limita el registro de timestamps únicamente a aquellos casos en que el archivo se modifica.

La opción menos invasiva es claramente relatime, que ya de por sí ofrecerá alguna ganancia en el rendimiento de nuestros discos duros, sobre todo mecánicos. La opción que más rendimiento permitirá conseguir es noatime.

¿Como llevar a cabo las modificaciones?

Requisitos

  • Filesystem de tipo ext2/ext3/ext4 (desconozco si funciona en otros, si alguien lo sabe invitado está a comentarlo)
  • Acceso de tipo superusuario (sudo/su) o root

Pasos

Primero haremos una copia de seguridad del archivo fstab original:

cp -p /etc/fstab /etc/fstab.backup

Usaremos nuestro editor de texto favorito para modificar el archivo fstab del sistema (aquí es donde se guarda la información de particionamiento y montaje). Ejemplo:

sudo nano /etc/fstab

En caso de no tener el editor nano, siempre podemos recurrir al bueno de vi/vim:

sudo vim /etc/fstab

Dentro de dicho archivo veremos un contenido “similar” al siguiente:

/dev/mapper/centos_lvm-root / xfs defaults 1 1
UUID=f3b744e4-e754-4842-93d1-43b06de64b66 /boot xfs defaults 1 2
UUID=971d09b6-8ce8-49c7-9ec9-16b0155f42cf swap swap defaults 0 0

Si, por ejemplo, quisiéramos establecer la propiedad noatime en la partición root (la primera /) dejaríamos la linea como sigue:

/dev/mapper/centos_lvm-root / xfs noatime 1 1

Si optásemos por establecer la propiedad relatime, quedaría así:

/dev/mapper/centos_lvm-root / xfs relatime 1 1

Si queremos probar la diferencia de rendimiento sin convertir el cambio en permanente, podremos volver a montar cualquier partición con el atributo deseado así:

mount / -o remount,noatime

Ahora, lo más sencillo y rápido para ver los cambios en marcha es reiniciar el sistema con el comando:

sudo reboot

Algunos consejos importantes

  1. Realiza una copia de seguridad del archivo fstab actual de tu equipo antes de modificarlo.
  2. Ten a mano un disco de arranque de Linux (Live boot) por si algún problema te obliga a restablecer el archivo fstab original.

Conclusiones

Este es uno de los muchos trucos que podemos utilizar para hacer que Linux se ejecute más rápido, descargando a nuestro disco de operaciones innecesarias. Los sistemas que más podrán beneficiarse del mismo son los domésticos, los de desarrollo y, especialmente, los sistemas de bases de datos.

Si has llegado hasta aquí, es posible que ahora te interese realizar alguna medición comparativa de rendimiento con Sysbench o con la herramienta Fio. También puedes medir el el uso de disco de manera contínua con watch -n 1 iostat.

Anuncios

Deja tu comentario (puedes hacerlo de forma anónima)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.