Para una prueba de evaluación comparativa rápida, ¿cómo se pueden combinar nice e ionice para obtener el máximo efecto, es decir, para que un comando use la menor cantidad de recursos posible (sin inactivo por completo)?
(Creo que es algo así como `nice -n 19 ionice -c 2 [comando], pero no estoy seguro acerca de" -n "(parámetro de classdata) de ionice, la página del manual es críptica sobre su relevancia).
performance
nice
ionice
mahemoff
fuente
fuente
Respuestas:
El comando completo que quieres es:
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, enice -n 19
implicaionice -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 necesidadnice
(la prioridad debe establecerse0
en la clase de programación inactiva), y se ve así: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 realSCHED_RR
ySCHED_FIFO
, el comando para establecer clases de programación terminó siendo llamadochrt
. La-i
opción especifica usar laSCHED_IDLE
clase de programaciónPara la clase de programación de E / S, usted usa
ionice
. El comando exacto se ve así: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, elnoop
programador de E / S no admite prioridades o clases de programación en absoluto, y estoy bastante seguro de que losdeadline
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
yioprio_set
llamadas al sistema (aunque ambos son vale la pena leer si lo que desea obtener más antecedentes también).fuente
Suponiendo que no desea que ese comando espere completamente a que otros terminen, para no sufrir potencialmente la falta de recursos , la línea sería:
Como ionice se establecerá proporcionalmente en los núcleos modernos de Linux.
Por cierto,
chrt -b0
no tiene nada que ver con la amabilidad, sino con qué frecuencia la CPU saltará de un proceso a otro. Esta línea alarga el tiempo para que los programas por lotes hagan un mejor uso de los cachés, pero para otros comandos es inútil. Como se ve aquí .fuente