Monitorizar procesos que realizan lectura o escritura al almacenamiento en GNU/Linux

Escrito por el .
gnu-linux planeta-codigo
Comentarios

GNU
linux
Firefox

Hoy día los precios de los SSD son asequibles y a cada mes que pasa su coste por GB se reduce de forma significativa, son mucho más rápidos que un disco duro mecánico y es una de las mejores mejoras que se le pueden hacer a un ordenador para aumentar el rendimiento si el problema es la tasa de transferencia del almacenamiento. El sistema se inicia mucho más rápido, en segundos en vez de minutos, y las aplicaciones también tardan mucho menos en cargarse. Cambiar a un SSD significa aumentar el rendimiento notablemente y parecer que se tiene equipo nuevo.

Aunque los SSD son muchísimo más rápidos que los discos duros mecánicos tradicionales tanto en lectura como en escritura adolecen de un tiempo de vida de unos 1000 ciclos de escritura por cada celda. Aunque 1000 ciclos de escritura pueden parecer pocos son más que suficientes para que el disco SSD y equipo se quede obsoleto antes de que pueda fallar según el ritmo al que avanza la tecnología. Aunque en un principio no debamos preocuparnos demasiado de la fiabilidad no está demás cuidarlo en lo posible.

Según Samsung la cantidad de datos que se pueden escribir en un 860 EVO y 970 EVO son según la capacidad 250, 500 GB y 1 TB de 150 TBW, 300 y 600 respectivamente (TBW = Terabytes escritos, 1 TB = 1000 GB). La esperanza de vida estimada antes de que se empiecen a producir fallos para el SSD de 250 GB es de de unos 20 años estimando unos 20 GB de escritura al día (150 TBW * 1000 GB/TB / (20 GB * 365 dias/año), en ese tiempo el equipo se quedará obsoleto y el coste del almacenamiento se habrá reducido significativamente.

Para cuidar el SSD hay que conocer la cantidad de datos que se están escribiendo en la unidad. En GNU/Linux es sencillo, el siguiente comando da la cantidad de datos en megabytes leídos y escritos desde que que se ha encendido el sistema.

1
$ awk '/sd|nvme/ {print $3"\t"($6 * 512) / (1024 * 1024)"\t"($10 * 512) / (1024 * 1024)}' /proc/diskstats

En este caso se han escrito 326 MB en el dispositivo nvme0n1p2 que corresponde a la partición root en una hora de actividad del sistema realizando tareas ofimáticas y de navegación.

Datos escritos al almacenamiento desde el inicio del sistema

También es interesante conocer los datos escritos en la unidad en total desde su instalación, en realidad lo siguiente nos dará los GiB escritos desde la creación de la partición, si se han hecho varios particionados no será el total del tiempo de vida de la unidad. Al usar LVM on LUKS el nombre que Linux le a la unidad en mi caso es dm-1, según la configuración del sistema otro nombre que se le asigna es sda2. En esta captura de 129 GB.

1
$ awk '// {print $0 / (1024 * 1024)}' /sys/fs/ext4/dm-1/lifetime_write_kbytes
Datos escritos a una partición

Después de comprar un Intel NUC junto con SSD e instalarle Arch Linux me he dado cuenta que de forma periódica, cada 5 o 10 segundos, parpadea la luz de actividad del disco duro (o simplemente almacenamiento al tener un SSD) sin hacer ninguna actividad salvo tener algunas aplicaciones abietas. He instalado iotop para descubrir el origen de esta actividad y he encontrado dos. Por un lado Firefox, varios procesos de él, y otro proceso del sistema jdb2-dm-1-8 que corresponde al journaling del sistema de archivos. La opción -a de iotop muestra la cantidad de E/S en la sesión por proceso y la opción –only solo aquellos que han realizado E/S.

1
$ iotop -a --only
Datos escritos por procesos del sistema

Investigando sobre los motivos de escritura de Firefox he encotrado algunos artículos y tres recomendaciones a cambiar en la configuración de Firefox para optimizar su uso en unidades SSD.

Las opciones a cambiar en la configuración son:

  • browser.sessionstore.interval: para recuperar las pestañas abiertas en caso de cierre inesperado Firefox las guarda en disco cada cierto tiempo, por defecto 15000 ms o 15 segundos que es un tiempo muy bajo y que ocasiona escrituras al disco constantemente.
  • browser.cache.disk.enable: para no realizar tŕafico de red en un futuro los recursos ya descargados como imágenes, archivos de estilo o javascript los almacena en una caché en el disco. Evita tráfico de red y mejora el rendimiento pero la caché ocupa espacio en disco y ocasiona escrituras. Cambiando el valor de esta propiedad a false se inhabilita la cache y las escrituras.
  • browser.cache.memory.capacity: para no perder la funcionalidad de la cache al menos en una sesión si se dispone de memoria RAM suficiente se puede activar una cache en memoria. Esta opción indica en KiB el espacio reservado para esa caché. Un valor de 307200 (300 * 1024) corresponde a 300 MiB de caché en memoria. Aún teniendo una cache de sesión y en memoria no he notado diferencia velocidad de carga en las páginas al navegar aún usando ADSL. Esa opción se ha de crear de tipo entero.

Estas opciones se cambian el la sección de configuración de Firefox introduciendo about:config en la barra de direcciones.

Configuración de Firefox optimizado para SSD

Con la configuración por defecto y cambiando estas opciones esta es la diferencia de los procesos de Firefox que causan E/S después de un tiempo de uso. Por defecto se observa que hay un proceso relacionado que debe estar relacionado con la caché a raíz de su nombre que escribe en el almacenamiento y cambiadas las opciones solo los procesos mozStorage escriben, estos procesos están relacionados con las cookies y almacenamiento local o bases de datos que los navegadores ofrecen a las páginas web pero los procesos relacionados con la caché han desaparecido. La cantidad de datos escritos con las opciones por defecto y cambiadas son significativamente menores en el mismo periodo de tiempo.

Dado que la caché ocasiona escrituras en el almacenamiento el proceso de journaling del sistema también realiza escrituras amplificando el problema. Con Firefox optimizado para SSD el proceso firefox [Cache2 I/O] desaparece y al escribir la sesión no cada 15 segundos Firefox deja de escribir de forma regular. Google Chrome no ofrece estas opciones de personalización.

Entrada y salida de Firefox por defecto y optimizado para SSD

En el entorno de escritorio GNOME con la aplicación Monitor del sistema es posible ver la cantidad de datos escritos por un proceso en total y en tiempo real.

Monitor del sistema de GNOME

Dado que los SSD no hacen ruido no se ha pedido la alerta sonora del «rascar» del disco cuando algún programa está escribiendo o leyendo de forma intensiva y por ello quizá no nos demos cuenta de que algún programa está teniendo un mal comportamiento y esté escribiendo muchos datos al SSD, peor aún si el sistema ni siquiera dispone de este LED de actividad.

Para visualizar el uso del disco de forma constante en GNOME hay una extensión que hace de monitor del sistema que agregará en la barra superior un área de estado visible en todo momento en la que se puede ver la información del estado del sistema, entre esa información se puede visualizar la cantidad de lectura y escritura que está realizando al almacenamiento.

Extensión de GNOME de monitor del sistema