Cada vez que actualizo Linux en la computadora de mi casa, tengo una lista de tareas que suelo hacer. Se han convertido en hábitos a lo largo de los años:hago una copia de seguridad de mis archivos, borro el sistema, reinstalo desde cero, restauro mis archivos y luego reinstalo mis aplicaciones adicionales favoritas. También hago algunos ajustes al sistema. He estado haciendo algunos de estos ajustes durante tanto tiempo que recientemente me pregunté si aún necesitaba hacerlos.
Un ajuste es atime
, que es una de las tres marcas de tiempo en cada archivo en Linux (más sobre eso más adelante). Específicamente, me preguntaba si aún valía la pena deshabilitar atime
en sistemas Linux más recientes. Desde atime
se actualiza cada vez que se accede al archivo, entiendo que tuvo un impacto significativo en el rendimiento del sistema.
Recientemente actualicé mi computadora a Fedora 32 y apagué atime
en mi sistema actualizado por costumbre. ¿Pero todavía necesitaba hacerlo? Decidí investigarlo más a fondo. Esto es lo que encontré.
Un poco sobre las marcas de tiempo de los archivos
Para entender noatime
, debe dar un paso atrás y comprender algunas cosas sobre los sistemas de archivos de Linux y cómo el kernel aplica marcas de tiempo a archivos y directorios. Probablemente ya esté al tanto de la fecha de última modificación en archivos y directorios; puedes ver eso en un ls -l
(larga) lista de directorios o si mira los detalles del archivo en un administrador de archivos. Pero detrás de escena, el kernel de Linux rastrea varias marcas de tiempo en archivos y directorios:
- Cuándo se modificó el archivo por última vez (
mtime
) - Cuándo se modificó el archivo por última vez (
ctime
) - Cuándo se accedió al archivo por última vez (
atime
)
Puedes usar el stat
comando para ver estos detalles de un archivo o directorio. Aquí hay un ejemplo de /etc/fstab
archivo en uno de mis servidores de prueba:
$ stat fstab
File: fstab
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2097285 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2019-04-25 21:10:18.083325111 -0500
Modify: 2019-05-16 10:46:47.427686706 -0500
Change: 2019-05-16 10:46:47.434686674 -0500
Birth: 2019-04-25 21:03:11.840496275 -0500
En el resultado, puede ver que este archivo se creó el 25 de abril de 2019, cuando instalé el sistema. Mi /etc/fstab
El archivo se modificó por última vez el 16 de mayo de 2019 y cualquier otro atributo se cambió aproximadamente al mismo tiempo.
Si copio /etc/fstab
a un archivo nuevo, las fechas cambian, lo que indica que se trata de un archivo nuevo:
$ sudo cp fstab fstab.bak
$ stat fstab.bak
File: fstab.bak
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:53:58.443659981 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500
Pero si simplemente cambio el nombre del archivo sin cambiar su contenido, Linux solo actualiza la hora de cambio del archivo:
$ sudo mv fstab.bak fstab.tmp
$ stat fstab.tmp
File: fstab.tmp
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:54:24.576508232 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500
Estas marcas de tiempo son muy útiles para ciertos programas de Unix. Por ejemplo, biff es un programa que le notifica cuando tiene un nuevo mensaje de correo electrónico. No ve a mucha gente usando biff en estos días, pero en los días en que los buzones de correo eran locales para su sistema, biff era bastante común.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
¿Cómo sabe un programa si tienes correo nuevo en tu bandeja de entrada? Biff compara la hora de la última modificación (cuando el archivo de la bandeja de entrada se actualizó con un nuevo mensaje de correo electrónico) y la hora del último acceso (la última vez que leyó su correo electrónico). Si Modificado es más reciente que Accedido, entonces biff sabe que ha llegado un mensaje de correo electrónico desde la última vez que leyó el correo electrónico y se lo informa. El cliente de correo electrónico Mutt hace algo similar para avisarle cuando llegan nuevos mensajes.
Ese tiempo de último acceso también es útil si necesita hacer estadísticas del sistema de archivos y ajustar el rendimiento. En los sistemas Linux grandes, es posible que los administradores necesiten saber a qué se accede para poder ajustar el sistema de archivos de manera adecuada.
Pero la mayoría de los programas modernos ya no necesitan la hora de último acceso, por lo que ha habido algunos argumentos para no usarla. En 2007, Linus Torvalds y varios otros desarrolladores del kernel hablaron sobre atime
y sus problemas de rendimiento. El desarrollador del kernel de Linux, Ingo Molnár, hizo esta observación sobre atime
y el sistema de archivos ext3:
Es un poco extraño que todos los equipos de escritorio y servidores Linux se vean afectados por una disminución notable del rendimiento de E/S debido a las actualizaciones constantes de atime, mientras que solo hay dos usuarios reales:tmpwatch [que se puede configurar para usar ctime, por lo que no es un gran problema] y algunas herramientas de copia de seguridad. (Ok, y también notificación por correo, supongo). De decenas de miles de aplicaciones.
Pero la gente todavía usa algunos programas que lo necesitan y eliminan atime
rompería esos programas de usuario. Y la regla en el desarrollo del kernel de Linux es no romper el espacio de usuario.
El compromiso de relatime
Las distribuciones de Linux incluyen muchas aplicaciones de software y los usuarios pueden descargar e instalar otros programas para satisfacer sus necesidades particulares. ¡Ese es el beneficio clave de un sistema operativo de código abierto! Pero eso hace que las cosas sean más difíciles para ajustar el rendimiento de su sistema de archivos. ¿Necesitas atime
, o al eliminarlo, se dañará algo en su sistema?
Como compromiso, los desarrolladores del kernel de Linux implementaron un nuevo método:relatime
es una medida de rendimiento ligeramente diferente que pretende equilibrar el rendimiento con la compatibilidad. El mount
la página de manual dice esto sobre relatime
:
El tiempo de acceso solo se actualiza si el tiempo de acceso anterior fue anterior al tiempo de modificación o cambio actual. … Desde Linux 2.6.30, el kernel tiene por defecto el comportamiento proporcionado por esta opción (a menos que se haya especificado noatime) … Además, desde Linux 2.6.30, la última hora de acceso al archivo siempre se actualiza si tiene más de 1 día.
En resumen:los sistemas Linux modernos (desde Linux 2.6.30, lanzado en 2009) ya usan relatime
, lo que debería darle un impulso de rendimiento realmente rápido. Eso significa que no necesita modificar su /etc/fstab
archivo y puede confiar en el relatime
valor predeterminado del núcleo.
Ajustar el rendimiento del sistema con noatime
Pero si está buscando modificar su sistema para obtener el máximo rendimiento, deshabilite atime
sigue siendo una opción válida en 2020.
Es posible que este ajuste de rendimiento no se note mucho en las unidades modernas muy rápidas (como NVME o una SSD rápida), pero aún hay un pequeño impulso allí.
Si sabe que no utiliza software que requiera atime
, puede obtener un ligero aumento de rendimiento configurando noatime
en su /etc/fstab
expediente. Esto le dice al kernel que no rastree la hora del último acceso, evitando ese pequeño impacto en el rendimiento para actualizar continuamente atime
en el sistema de archivos. Agregar noatime
como una opción para sus sistemas de archivos Linux, generalmente después de la entrada predeterminada:
/dev/mapper/fedora_localhost--live-root / ext4 defaults,noatime,x-systemd.device-timeout=0 1 1
UUID=be37c451-915e-4355-95c4-654729cf662a /boot ext4 defaults,noatime 1 2
UUID=C594-12B1 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/fedora_localhost--live-home /home ext4 defaults,noatime,x-systemd.device-timeout=0 1 2
/dev/mapper/fedora_localhost--live-swap none swap defaults,x-systemd.device-timeout=0 0 0
Esto tendrá efecto la próxima vez que reinicie.