¿Cómo es un buen trabajo?

20

sched_setscheduler dice:

Toda la programación es preventiva: si un proceso con una prioridad estática más alta está listo para ejecutarse, el proceso actualmente en ejecución se sustituirá y se devolverá a la lista de espera para su nivel de prioridad estática.

mientras que setpriority dice

Esto hace que los valores agradables muy bajos (+19) realmente proporcionen poca CPU a un proceso siempre que haya otra carga de mayor prioridad en el sistema, y ​​hace que los valores agradables altos (-20) entreguen la mayor parte de la CPU a las aplicaciones que lo requieren

Entonces, ¿cómo va a cambiar el valor agradable influir en la ejecución de los programas? ¿Es similar a la programación RT (donde un programa con un valor agradable más alto va a interrumpir el programa con un valor agradable más bajo)?


Toda la información en internet es cómo usar nicey cómo cambiar la prioridad de un proceso. Ningún enlace explica cómo funciona exactamente el proceso con diferente prioridad. Ni siquiera pude encontrar el código fuente.

BЈовић
fuente

Respuestas:

24

La proporción del tiempo de procesador que recibe un proceso en particular está determinada por la diferencia relativa en la amabilidad entre este y otros procesos ejecutables.

El Programador completamente justo de Linux (CFS) calcula un peso basado en la amabilidad. El peso es aproximadamente equivalente a 1024 / (1.25 ^ nice_value). A medida que disminuye el valor agradable, el peso aumenta exponencialmente. El intervalo de tiempo asignado para el proceso es proporcional al peso del proceso dividido por el peso total de todos los procesos ejecutables. La implementación del CFS está en kernel/sched/fair.c.

El CFS tiene una latencia objetivo para la duración de la programación. Las latencias objetivo más pequeñas producen una mejor interactividad, pero a medida que disminuye la latencia objetivo, aumenta la sobrecarga de conmutación, lo que disminuye el rendimiento general.

Dado, por ejemplo, una latencia objetivo de 20 milisegundos y dos procesos ejecutables de igual precisión, entonces ambos procesos se ejecutarán durante 10 milisegundos cada uno antes de ser anticipados en favor del otro proceso. Si hay 10 procesos de igual amabilidad, cada uno dura 2 milisegundos cada uno.

Ahora considere dos procesos, uno con una similitud de 0 (el valor predeterminado), el otro con una similitud de 5. La diferencia proporcional entre los pesos correspondientes es aproximadamente 1/3, lo que significa que el proceso de mayor prioridad recibe un intervalo de tiempo de aproximadamente 15 milisegundos mientras que el proceso de menor prioridad recibe un intervalo de tiempo de 5 milisegundos.

Por último, considere dos procesos con los valores de amabilidad de 5 y 10 respectivamente. Si bien la simpatía absoluta es mayor en este caso, las diferencias relativas entre los valores de similitud son las mismas que en el ejemplo anterior, produciendo una división de división temporal idéntica.

Thomas Nyman
fuente
Justo lo que estaba buscando. ¡Gracias! Más tarde encontré este artículo que explica todo en detalle, pero no lo que acaba de escribir.
Bћовић
Hay algo que no entiendo ... ¿cuál es el papel de vruntime?
Surfer en el otoño
@Surferonthefall vruntime es el mecanismo interno CFS que realiza un seguimiento de la gran cantidad de tiempo de CPU que se asignan los procesos. Esta pregunta es sobre el buen valor visible para el espacio de usuario. Si tiene una pregunta sobre los componentes internos del CFS y no puede encontrar una respuesta en otra parte , haga una nueva pregunta
Thomas Nyman,