CFS (qui est le planificateur par défaut pour les processus) n'a pas de tranche de temps fixe, il est calculé au moment de l'exécution en fonction de la latence ciblée (sysctl_sched_latency
) et le nombre de processus en cours d'exécution. La tranche de temps ne peut jamais être inférieure à la granularité minimale (sysctl_sched_min_granularity
).
La tranche de temps sera toujours comprise entre sysctl_sched_min_granularity
et sysctl_sched_latency
, qui sont respectivement par défaut à 0,75 ms et 6 ms et définis dans kernel/sched/fair.c.
Mais la tranche de temps réelle n'est pas exportée vers l'espace utilisateur.
Le quantum alloué pour un processus particulier peut varier :
Vous pouvez régler "slice" en ajustant sched_latency_ns etsched_min_granularity_ns , mais notez que "tranche" n'est pas un quantum fixe. Notez également que les décisions de préemption du CFS sont basées sur un état instantané. Une tâche peut avoir reçu une "tranche" complète (variable) de temps CPU, mais la préemption ne sera déclenchée que si une tâche plus méritante est disponible, donc une "tranche" n'est pas le "temps CPU maximum ininterrompu" auquel vous pouvez vous attendre. .. mais c'est un peu similaire.
En effet, le Completely Fair Scheduler, le planificateur Linux par défaut, affecte une proportion du processeur à un processus plutôt qu'à une tranche de temps fixe. Cela signifie que la tranche de temps de chaque processus est proportionnelle à la charge actuelle et pondérée par la valeur de priorité du processus.
Pour les processus temps réel spéciaux qui utilisent SCHED_RR, la tranche de temps par défaut est définie dans le noyau Linux comme RR_TIMESLICE
dans 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)
Vous pouvez utiliser sched_rr_get_interval()
pour obtenir l'intervalle SCHED_RR pour un processus SCHED_RR spécifique.