Cher Nal,
Lors de la confĂ©rence Embedded Recipes Ă Paris, SCHED_DEADLINE a fait l'objet d'une prĂ©sentation claire et accessible Ă toutes et tous. Un planificateur (ou ordonnanceur) pour CPU est le bout de code qui dĂ©cide quand une tĂąche doit ĂȘtre exĂ©cutĂ©. Basiquement : l'ordre d'exĂ©cution. Cet ordonnanceur pour CPU n'est pas nouveau, mais il va devenir l'ordonnanceur par dĂ©faut Ă partir de Linux 4.14.
SCHED_DEADLINE implémente l'algorithme « le délai au plus tÎt possible » (Earliest Deadline First) auquel viennent s'ajouter des priorités dynamiques, et initialement un « mécanisme de bande passante constante » (Constant Bandwidth Server), amélioré par une implémentation du « Greedy Reclamation of Unused Bandwidth (grub)» adaptée au contexte des matériels actuels. En l'état actuel, sched_deadline permet de :
- Ajouter une contrainte de temps sur chaque tùche, de maniÚre déterministe ;
- Permettre la réservation de ressources, et l'isolation comportementale des tùches entre elles (ex : bande passante cpu) ;
- Ne pas imposer pas de style de contraintes (qui peuvent donc ĂȘtre pĂ©riodiques, a-pĂ©riodiques ou sporadiques.)
Une tùche trop gourmande ou qui se comporte mal ne pourra pas outrepasser la réservation faite pour elle. Le comportement temporel d'une tùche ne sera donc pas affecté par une autre tùche, offrant ainsi la prédictibilité (qui n'était pas possible avec sched_normal, sched_rr ni sched_fifo) à noter qu'une tùche demandée/marquée/programmée '-deadline' ne peut forker. Les tùches se voient attribuées trois caractÚres, trois états possibles :
- Inactives: lorsqu'elles sont bloquées et ont dépassé le "temps 0-lag" ;
- Contenu Non Actif (ActiveNonContending) lorsqu'elles sont bloquées mais sans avoir dépassé le "temps 0-lag" ;
- Contenu Actif (ActiveContending) lorsqu'elles sont prĂȘtes Ă ĂȘtre exĂ©cutĂ©es (ou sont en cours d'exĂ©cution)
Le "contenu non actif" est un état transitoire : lorsqu'une tùche bloque (est bloquée) elle n'entre pas immédiatement en état "inactif", car cela casserait les garanties de temps d'exécution. Elle passe donc par cet état transitoire.
Le calcul de ce "temps 0-lag" pour une tùche passant en état "Contenu Non Actif " (cf : la doc) est ainsi fait :
(runtime * dl_period)
deadline - ---------------------
dl_runtime
OĂč "runtime" est le temps d'exĂ©cution restant, et dl_runtime ainsi que dl_period sont les paramĂštres de rĂ©servation.
Si une tùche qui bloquait redevient active avant que son chrono "timer inactif" soit fini, alors ce dernier est simplement détruit. à noter que si une tùche se réveille / redevient active sur une file d'exécution différente, alors elle sera automatiquement retirée de la file initiale par l'ordonnanceur. Des mécanismes pour éviter des "race conditions" sont implémentés (ex : lorsque le chrono se trouve sur un cpu différent de celui ayant la file d'exécution dans laquelle la tùche se réveille)
L'évolution croissante de la complexité et des possibilités des matériels a rendu la tùche de l'ordonnanceur de plus en plus complexe (parfois hors-sujet ?) SCHED_DEADLINE choisi de ne pas implémenter de configurations accessibles d'affinités : la gestion/configuration des affinités est maintenant déléguée aux CGROUPs (cf : cpuset), qui permettent des ajustements fins tout en offrant une configuration facilitée.
En rĂ©sumĂ©, SCHED_DEADLINE est un ordonnanceur rĂ©pondant aux besoins industriels oĂč la prĂ©diction est nĂ©cessaire ainsi qu'aux besoins de faibles latences ou/et de temps d'exĂ©cution garantis, mais Ă©galement aux environnements portant des machines virtuelles par une gestion plus Ă©quitable des ressources CPU distribuĂ©es. Un dĂ©veloppement de 10 ans, et demain l'ordonnanceur par dĂ©faut dans le noyau Linux.
Deux nouveaux appels systÚmes sont implémentés : 'sched_setattr' et 'sched_getattr' , pour aller plus loin lire :
Présentation au Embedded Recipes, par Steven Rostedt
Evidence & Actors-Projets & Retis Lab
Chez vous peut-ĂȘtre ?
# faille spatiotemporelle ?
PostĂ© par Jarvis . ĂvaluĂ© Ă 4.
4.14 ?
[^] # Re: faille spatiotemporelle ?
PostĂ© par bubarđŠ„ . ĂvaluĂ© Ă 2.
En effet ;-)
Merci
[^] # Re: faille spatiotemporelle ?
PostĂ© par Matthieu Moy (site web personnel) . ĂvaluĂ© Ă 10.
Bah non justement : SCHED_DEADLINE est dispo depuis Linux 3.14. Et ce n'est pas vraiment un nouveau scheduler, mais une nouvelle classe, qui vient compléter (et non remplacer) SCHED_RR et SCHED_FIFO dans les ordonnancements temps réel, et le SCHED_OTHER pour les processus non temps réel.
J'ai peut ĂȘtre loupĂ© quelque chose, mais je n'ai rien trouvĂ© qui dise que ça deviendrait la classe par dĂ©faut un jour, et en fait je ne vois pas quel sens ça aurait (SCHED_DEADLINE n'est pertinent que dans les contextes oĂč on connaĂźt les deadlines...).
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.