Ionice Featured

Cómo administrar la prioridad de los procesos de E/S en Linux

¿Alguna vez copió o movió decenas o cientos de gigabytes de datos? Si lo hizo, seguramente notó que el sistema responde mucho menos durante ese tiempo. En Linux puedes evitar esto con la ayuda del ionice dominio.

¿Qué es la prioridad de E/S?

E/S es la abreviatura de entrada/salida. Hay muchos tipos de dispositivos de E/S, pero en este caso se trata de dispositivos de almacenamiento.

A cada proceso que quiere leer o escribir datos en dicho dispositivo se le asigna una clase de programación y un número de prioridad (o valor «agradable»). Esto se aplica en Linux a sistemas de archivos como ext4. Otros sistemas de archivos, como ZFS, pueden implementar métodos ligeramente diferentes para programar operaciones de lectura/escritura en el disco. Además, el planificador de CFQ debe estar activo para que esto funcione. Puedes consultar con

cat /sys/block/*/queue/scheduler

Un proceso con un valor alto de «agradable» tiene una prioridad más baja. La lógica detrás de esto es que cuanto mayor sea el número, más «agradable» es el proceso para otros procesos.

¿Cómo funciona la prioridad de E/S?

Obviamente, un dispositivo de almacenamiento tiene un número limitado de operaciones de E/S que puede realizar por segundo (IOPS). Entonces, cuando dos procesos quieren leer/escribir al mismo tiempo, cada uno obtiene una parte de IOPS. Si tienen la misma prioridad, obtienen alrededor del 50 % de IOPS cada uno.

Semáforos Iónicos

Pero IOPS puede parecer abstracto y complicado. En aras de la simplicidad, solo puede pensar en el resultado final: velocidades de lectura/escritura. Suponga que su disco puede escribir con 100 MB/s como máximo. El proceso A comienza una operación de escritura. Escribe en el disco con 100 MB/s. Aparece el proceso B y quiere escribir en el mismo disco. Escribirá con alrededor de 50 MB/s, llevando la velocidad de escritura del proceso A al mismo valor, 50 MB/s. Ahora, si asigna al proceso B un valor agradable de E/S más alto, escribirá con 20 MB/s y dejará que el proceso A escriba con 80 MB/s. Cuando finalice el proceso A, el proceso B comenzará a escribir con 100 MB/s.

Este ejemplo es útil para entender algo que podría confundir a algunas personas. Si un proceso tiene una prioridad muy baja (valor agradable alto), no significa que escribirá lentamente todo el tiempo. Si es el único proceso que usa el disco, leerá/escribirá con la máxima velocidad. Pero cuando otros procesos necesiten el disco, se apartará temporalmente y les permitirá utilizar más ancho de banda del disco. Para una operación de copia/escritura que llevará horas completar, es una buena idea darle baja prioridad si desea usar su computadora durante ese tiempo.

Cómo usar el comando ionice

La sintaxis general del comando es:

ionice -c scheduling_class -n priority_nice_value command

Clases de programación de ionice

Inactivo (clase 3): los procesos de esta clase solo leen/escriben cuando ningún otro programa necesita acceso al disco. Esto significa que el proceso lee/escribe a toda velocidad cuando no tiene competencia. Cuando otro programa necesita tiempo de disco, el proceso en la clase inactiva solo leerá/escribirá con los recursos restantes. Desde 100 MB/s, puede escribir temporalmente con 5 MB/s, luego volver a 100 MB/s cuando el otro programa termine de acceder al disco. Esta es la clase perfecta para trabajos de larga duración que no desea ralentizar su sistema. No es necesario especificar ninguna prioridad para esta clase.

Comando de ejemplo:

ionice -c 3 cp /home/user/largefile /Backups

Mejor esfuerzo (clase 2): Toma un valor de prioridad/agradable entre 0 y 7. Recuerde, un número más bajo significa una prioridad más alta. Utilice esta clase cuando desee ajustar el tiempo de disco para dos o más procesos.

Por ejemplo, desea que su copia de seguridad finalice más rápido y asígnele un valor agradable de 0. También está moviendo seis películas a otro disco pero no tiene prisa, por lo que le asigna un valor agradable de 7.

Comando de ejemplo:

ionice -c 2 -n 0 backup_command

Ionice Prioridad 0 Vs Prioridad 7

Tiempo real (clase 1): debe usarse solo si es vital que el proceso se escriba lo antes posible, sin interrupciones de ningún otro programa. La mayoría de los usuarios nunca necesitarán esto y deben evitarlo, excepto en casos especiales. También admite buenos valores entre 0 y 7. Solo la raíz puede usar esta clase, lo que significa que probablemente anteponga el comando con sudo. Tenga en cuenta que un proceso en la clase de tiempo real con prioridad 0 puede privar de recursos a otros procesos. En términos prácticos, significa que otro programa podría tener que esperar minutos o incluso horas para terminar de escribir/leer algunos megabytes de datos. Úselo con cuidado, solo si está seguro de que lo necesita. Si un proceso vital en la clase 2 o 3 necesita acceso al disco, su sistema podría congelarse hasta que el proceso en tiempo real termine de escribir.

Comando de ejemplo:

sudo ionice -c 1 -n 7 bash

Ejemplos útiles de ionice

En el último ejemplo, en lugar de ejecutar un comando copiar/mover, se ha lanzado un shell (Bash). Ahora, cada comando subsiguiente que escriba en ese shell heredará la clase y prioridad de programación de E/S. También puede hacer esto en una interfaz gráfica.

El último comando iniciará un explorador de archivos en el entorno de escritorio LXDE. Reemplace «pcmanfm» con el nombre del explorador de archivos de su escritorio en particular. Ahora todas las operaciones de disco que inicie allí se realizarán con la clase de programación de E/S inactiva.

En otras situaciones, es posible que ya esté activa una operación de copiar/mover. En este caso puedes usar ionice de una manera diferente.

Esto cambia la clase de prioridad del programa que se ejecuta con el ID de proceso 4910. Puede encontrar el PID (ID de proceso) con su administrador de tareas o con un comando como pgrep.

Ionice Cambio Proceso Io Prioridad

Conclusión

ionice puede ser útil en escritorios que no desea retrasar mientras copia o mueve archivos grandes. Pero tenga en cuenta que esto también puede ser aún más útil en los servidores. Ciertamente, no desea que un sitio web que pueda alojar allí se retrase en sus visitantes mientras realiza una copia de seguridad completa.

Experto Geek - Tu Guía en Tendencias Tecnológicas