El comando completo que quieres es:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
El chrt
comando al principio cambiará las cosas a la clase de programación por lotes, que es equivalente a agregar 0.5 al valor agradable. La opción -n para ionice es una prioridad simple para las opciones en tiempo real ( -c 1
) y de mejor esfuerzo ( -c 2
), siendo los valores más bajos una prioridad más alta al igual que los valores agradables (pero en el rango 0-7). Sin embargo, el comando ionice no es estrictamente necesario, ya que la clase de programación de E / S y la prioridad se derivan por defecto de los parámetros de programación de la CPU, e nice -n 19
implica ionice -c 2 -n 7
.
Sin embargo, puede obtener el uso mínimo absoluto de recursos configurando tanto la CPU como las clases de programación de E / S en inactivo. En ambos casos, los programadores 'inactivos' no son realmente programadores inactivos, y aún podrá utilizar los recursos, es solo que todo tendrá mayor prioridad.
Para la clase de programación de CPU, esto también usa el chrt
comando, aunque sin necesidad nice
(la prioridad debe establecerse 0
en la clase de programación inactiva), y se ve así:
chrt -i 0 {command or PID}
El nice
comando en Linux refleja la versión SVR4, lo que significa que no puede cambiar la clase de programación, solo un buen valor (que también se comporta de manera diferente en Linux que UNIX clásico, pero eso es un poco OT). Como las clases de programación alternativas originales eran POSIX.1E en tiempo real SCHED_RR
y SCHED_FIFO
, el comando para establecer clases de programación terminó siendo llamado chrt
. La -i
opción especifica usar la SCHED_IDLE
clase de programación
Para la clase de programación de E / S, usted usa ionice
. El comando exacto se ve así:
ionice -c 3 {command or PID}
La -c
opción especifica qué clase de programación usar, y 3 es el número para la clase inactiva. Tenga en cuenta que, según el bloque de planificador de E / S que se esté utilizando, esto puede no afectar realmente nada. En particular, el noop
programador de E / S no admite prioridades o clases de programación en absoluto, y estoy bastante seguro de que los deadline
programadores (tanto el heredado como el blk-mq) tampoco lo hacen.
Si quieres hacer esto mediante programación, ya sea para su propio programa, o para ajustar las cosas para otros procesos, echa un vistazo a las páginas de manual para las sched_setscheduler
y ioprio_set
llamadas al sistema (aunque ambos son vale la pena leer si lo que desea obtener más antecedentes también).