¿Cómo saber linux scheduler time slice?


Estoy buscando el valor de la porción de tiempo (o cuántica) de mi núcleo Linux.

¿Existe un archivo /proc que exponga dicha información ?

(O) ¿Está bien definido en el encabezado Linux de mis distribuciones ?

(O) ¿Hay una función C de la API de Linux (tal vez sysinfo) que exponga este valor ?

Gracias de antemano.

Author: AjayKumarBasuthkar, 2013-05-06

4 answers

El quantum asignado para un proceso particular puede variar :

Puede afinar "slice" ajustando sched_latency_ns y sched_min_granularity_ns , pero tenga en cuenta que "slice" no es un cuántica. También tenga en cuenta que las decisiones de preferencia del CSA se basan en estado instantáneo. Una tarea puede haber recibido un completo (variable) "rebanada" de tiempo de CPU, pero preemption se activará solo si un más tarea merecedora está disponible, por lo que un "slice" no es el "max tiempo de CPU ininterrumpido " que usted puede esperar que sea.. pero es algo similar.

Para los procesos especiales en tiempo real que usan SCHED_RR, el intervalo de tiempo predeterminado se define en el núcleo Linux como RR_TIMESLICE en include/linux/sched/rt.h.

/*
 * default timeslice is 100 msecs (used only for SCHED_RR tasks).
 * Timeslices get refilled after they expire.
 */
#define RR_TIMESLICE            (100 * HZ / 1000)

Puede utilizar sched_rr_get_interval() para obtener el intervalo SCHED_RR para un proceso SCHED_RR específico.

 26
Author: Vilhelm Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-02 14:13:59

CFS (que es el programador predeterminado para los procesos) no tiene un intervalo de tiempo fijo, se calcula en tiempo de ejecución en función de la latencia objetivo (sysctl_sched_latency) y el número de procesos en ejecución. Timeslice nunca podría ser menor que la granularidad mínima (sysctl_sched_min_granularity).

Timeslice estará siempre entre sysctl_sched_min_granularity y sysctl_sched_latency, que son valores predeterminados a 0.75 ms y 6 ms respectivamente y definidos en kernel/sched/fair.c .

Pero el timeslice real no se exporta al espacio de usuario.

 23
Author: Alexey Shmalko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-07 13:11:58

Hay cierta confusión en la respuesta aceptada entre los procesos SCHED_OTHER (es decir, aquellos que operan bajo la política (predeterminada) de tiempo compartido round-robin no en tiempo real) y los procesos SCHED_RR.

Los archivos sched_latency_ns y sched_min_granularity_ns (que están destinados a fines de depuración, y visibles solo si el núcleo está configurado con CONFIG_SCHED_DEBUG) afectan la programación de los procesos SCHED_OTHER. Como se señaló en la respuesta de Alexey Shmalko, el segmento de tiempo bajo CFS no es fijo (y no se exporta al espacio de usuario), y dependerá de parámetros del kernel y factores como el buen valor del proceso.

Sched_rr_get_interval () devuelve un valor fijo que es el quantum que un proceso SCHED_RR está garantizado para obtener, a menos que sea preemptado o bloques. En Linux tradicional, el cuántico SCHED_RR es de 0,1 segundos. Desde Linux 3.9, el límite es ajustable a través del archivo /proc/sys/kernel/sched_rr_timeslice_ms, donde el cuántico se expresa como un valor de milisegundos cuyo valor predeterminado es 100.

 8
Author: mtk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-25 13:11:54

Busqué en Google estos tickets sobre la misma duda de la porción de tiempo de SCHED_RR en Linux. Pero no puedo obtener una respuesta clara tanto desde aquí como desde el código fuente del núcleo. Después de una verificación adicional, encontré que el punto clave es "RR_TIMESLICE" es el segmento de tiempo predeterminado en jiffies, ¡no milisegundos! Por lo tanto, la porción de tiempo predeterminada de SCHED_RR es siempre 100ms, sin importar qué HZ configuró.

Igual que el valor de "/ proc / sys / kernel / sched_rr_timeslice_ms", que ingresa el valor en milisegundo , pero almacena y salida en jiffies! Por lo tanto, cuando CONFIG_HZ = 100, encontrará que:

# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
# cat /proc/sys/kernel/sched_rr_timeslice_ms
10

Es un poco confuso. ¡Espero que esto pueda ayudarte a entenderlo!

 2
Author: Shile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 05:48:12