Journal sched_deadline est dans les temps

PostĂ© par . Licence CC By‐SA.
22
15
oct.
2017

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 . ÉvaluĂ© Ă  4.

    Cet ordonnanceur pour CPU n'est pas nouveau, mais il va devenir l'ordonnanceur par défaut à partir de Linux 3.14.

    4.14 ?

    • [^] # Re: faille spatiotemporelle ?

      PostĂ© par . ÉvaluĂ© Ă  2.

      En effet ;-)
      Merci

      • [^] # Re: faille spatiotemporelle ?

        PostĂ© par (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.