30.2. Ordonnancement statique des priorités avec SCHED_FIFO

Le SCHED_FIFO, également appelé ordonnancement statique des priorités, est une politique en temps réel qui définit une priorité fixe pour chaque thread. Cette politique permet aux administrateurs d'améliorer le temps de réponse aux événements et de réduire la latence. Il est recommandé de ne pas exécuter cette politique pendant une période prolongée pour les tâches sensibles au temps.

Lorsque SCHED_FIFO est en cours d'utilisation, l'ordonnanceur parcourt la liste de tous les threads SCHED_FIFO par ordre de priorité et programme le thread de priorité la plus élevée qui est prêt à s'exécuter. Le niveau de priorité d'un thread SCHED_FIFO peut être n'importe quel nombre entier entre 1 et 99, où 99 est considéré comme la priorité la plus élevée. Red Hat recommande de commencer par un nombre inférieur et d'augmenter la priorité uniquement lorsque vous identifiez des problèmes de latence.

Avertissement

Étant donné que les threads en temps réel ne sont pas soumis au découpage temporel, Red Hat ne recommande pas de définir une priorité de 99. Cela maintient votre processus au même niveau de priorité que les threads de migration et de chien de garde ; si votre thread entre dans une boucle de calcul et que ces threads sont bloqués, ils ne pourront pas s'exécuter. Les systèmes dotés d'un seul processeur finiront par se bloquer dans cette situation.

Les administrateurs peuvent limiter la bande passante de SCHED_FIFO pour empêcher les programmeurs d'applications en temps réel de lancer des tâches en temps réel qui monopolisent le processeur.

Voici quelques-uns des paramètres utilisés dans cette politique :

/proc/sys/kernel/sched_rt_period_us
Ce paramètre définit la période de temps, en microsecondes, qui est considérée comme correspondant à cent pour cent de la bande passante du processeur. La valeur par défaut est 1000000 μs ou 1 second.
/proc/sys/kernel/sched_rt_runtime_us
Ce paramètre définit la période de temps, en microsecondes, consacrée à l'exécution des threads en temps réel. La valeur par défaut est 950000 μs, ou 0.95 seconds.