¿Qué es lo mejor que puede ser un comando Unix?

9

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).

mahemoff
fuente
3
más 1 para el título de la pregunta inteligente, pero también es una buena pregunta en general.
Lizardx

Respuestas:

10

El comando completo que quieres es:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

El chrtcomando 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 19implica 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 chrtcomando, aunque sin necesidad nice(la prioridad debe establecerse 0en la clase de programación inactiva), y se ve así:

chrt -i 0 {command or PID}

El nicecomando 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_RRy SCHED_FIFO, el comando para establecer clases de programación terminó siendo llamado chrt. La -iopción especifica usar la SCHED_IDLEclase 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 -copció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 noopprogramador de E / S no admite prioridades o clases de programación en absoluto, y estoy bastante seguro de que los deadlineprogramadores (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_setschedulery ioprio_setllamadas al sistema (aunque ambos son vale la pena leer si lo que desea obtener más antecedentes también).

Austin Hemmelgarn
fuente
0

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:

nice -n19 [command]

Como ionice se establecerá proporcionalmente en los núcleos modernos de Linux.

Por cierto, chrt -b0no 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í .

Alberto Salvia Novella
fuente