Provided by: manpages-fr_4.18.1-1_all bug

NOM

       sched - Aperçu de l’ordonnancement de CPU

DESCRIPTION

       Depuis  Linux 2.6.23,  l’ordonnanceur  par  défaut  est  CFS  (Completely  Fair  Scheduler
       – ordonnanceur complètement équitable). Il remplace l’ordonnanceur précédent, « O(1) ».

   Résumé des API
       Linux  fournit  les  appels  système  suivants   pour   contrôler   le   comportement   de
       l’ordonnancement  du CPU, la politique et la priorité des processus (ou, plus précisément,
       des threads).

       nice(2)
              Définir une nouvelle valeur de politesse pour le thread appelant et renvoyer  cette
              nouvelle valeur.

       getpriority(2)
              Renvoyer  la  valeur  de  politesse  d’un  thread,  d’un  groupe de processus ou de
              l’ensemble des threads possédés par un utilisateur particulier.

       setpriority(2)
              Définir la valeur de  politesse  d’un  thread,  d’un  groupe  de  processus  ou  de
              l’ensemble des threads possédés par un utilisateur particulier.

       sched_setscheduler(2)
              Définir la politique d'ordonnancement et les paramètres du thread indiqué.

       sched_getscheduler(2)
              Renvoyer la politique d'ordonnancement du thread indiqué.

       sched_setparam(2)
              Définir les paramètres d'ordonnancement du thread indiqué.

       sched_getparam(2)
              Récupérer les paramètres d'ordonnancement du thread indiqué.

       sched_get_priority_max(2)
              Renvoyer  la  priorité  la plus haute disponible pour la politique d'ordonnancement
              indiquée.

       sched_get_priority_min(2)
              Renvoyer la priorité la plus basse disponible pour  la  politique  d'ordonnancement
              indiquée.

       sched_rr_get_interval(2)
              Récupérer  le  quantum de temps alloué utilisé pour les threads ordonnancés par une
              politique de type répartition par tourniquet (round robin).

       sched_yield(2)
              Provoquer la libération  du  CPU  par  l'appelant  afin  de  permettre  l’exécution
              d'autres threads.

       sched_setaffinity(2)
              Définir le masque d'affinité CPU du thread indiqué (propre à Linux).

       sched_getaffinity(2)
              Récupérer le masque d'affinité CPU du thread indiqué (propre à Linux).

       sched_setattr(2)
              Définir  la  politique  d'ordonnancement  et  les paramètres du thread indiqué. Cet
              appel système (propre à Linux) fournit un  sur-ensemble  de  la  fonctionnalité  de
              sched_setscheduler(2) et de sched_setparam(2).

       sched_getattr(2)
              Récupérer  la  politique  d'ordonnancement et les paramètres du thread indiqué. Cet
              appel système (propre à Linux) fournit un  sur-ensemble  de  la  fonctionnalité  de
              sched_getscheduler(2) et de sched_getparam(2).

   Politiques d'ordonnancement
       L'ordonnanceur est la partie du noyau qui décide quel thread prêt va être exécuté ensuite.
       Chaque  processus  a   une   politique   d'ordonnancement   associée   et   une   priorité
       d'ordonnancement  statique, sched_priority. L'ordonnanceur prend ses décisions en fonction
       de la politique d'ordonnancement et de  la  priorité  statique  de  tous  les  threads  du
       système.

       Pour   les  threads  ordonnancés  sous  l'une  des  politiques  d'ordonnancement  normales
       (SCHED_OTHER,  SCHED_IDLE,  SCHED_BATCH),  sched_priority  n'est  pas  utilisée  dans  les
       décisions d'ordonnancement (et doit valoir 0).

       Les   processus   ordonnancés  sous  l'une  des  politiques  d'ordonnancement  temps  réel
       (SCHED_FIFO, SCHED_RR) ont une valeur sched_priority  dans  l'intervalle 1  (faible)  à 99
       (haute). (Comme les nombres l'impliquent, les threads temps réel ont toujours une priorité
       plus haute que les threads normaux.)  Notez  bien :  POSIX.1  exige  d'une  implémentation
       qu'elle  gère seulement un minimum de 32 niveaux de priorité distincts pour les politiques
       temps réel et certains systèmes n'offrent que ce minimum. Les programmes portables doivent
       utiliser    sched_get_priority_min(2)    et   sched_get_priority_max(2)   pour   connaître
       l'intervalle des priorités gérées pour une politique particulière.

       Théoriquement, l'ordonnanceur  entretient  une  liste  de  tous  les  threads  prêts  pour
       l’exécution  pour  chaque  valeur  possible  de  sched_priority.  Afin  de déterminer quel
       processus doit s'exécuter ensuite, l'ordonnanceur recherche la  liste  non  vide  de  plus
       haute priorité statique et choisit le thread en tête de cette liste.

       La  politique  d'ordonnancement d'un thread détermine l'emplacement où il sera inséré dans
       la liste contenant les threads de même priorité statique et comment il se  déplacera  dans
       cette liste.

       Tout  ordonnancement  est  préemptif : si un thread avec une priorité statique plus élevée
       devient prêt, le thread actuellement en cours d'exécution est interrompu et retourne  dans
       la  liste  d'attente  avec  son niveau de priorité statique. La politique d'ordonnancement
       détermine l'ordre utilisé seulement dans la liste de  threads  prêts  avec  des  priorités
       statiques égales.

   SCHED_FIFO : Ordonnancement premier entré, premier sorti
       SCHED_FIFO  ne  peut être utilisée qu'avec des priorités statiques supérieures à 0, ce qui
       signifie que dès qu'un thread SCHED_FIFO devient prêt, il préempte n’importe  quel  thread
       SCHED_OTHER,   SCHED_BATCH   ou   SCHED_IDLE  en  cours  d'exécution.  SCHED_FIFO  est  un
       ordonnancement simple sans découpage temporel.  Pour  les  threads  ordonnancés  selon  la
       politique SCHED_FIFO, les règles suivantes sont appliquées :

       •  Un  thread  SCHED_FIFO  qui  a  été préempté par un autre thread de priorité supérieure
          restera en tête de liste pour sa priorité et reprendra son exécution dès que  tous  les
          threads de priorité supérieure seront à nouveau bloqués.

       •  Quand  un  thread SCHED_FIFO bloqué devient prêt, il est inséré en fin de liste pour sa
          priorité.

       •  Si   un   appel   à   sched_setscheduler(2),    sched_setparam(2),    sched_setattr(2),
          pthread_setschedparam(3)  ou  pthread_setschedprio(3)  modifie  la  priorité  du thread
          SCHED_FIFO prêt ou en cours d’exécution, identifié par pid, l’effet sur la position  du
          thread  dans  la  liste  dépend  de  la direction de la modification de la priorité des
          threads :

          (a)  Si la priorité du thread est relevée, il  est  placé  en  fin  de  liste  pour  sa
               nouvelle   priorité.  Par  conséquent,  il  peut  préempter  un  thread  en  cours
               d’exécution ayant la même priorité.

          (b)  Si la priorité du thread est inchangée, sa position dans la liste  des  exécutions
               est inchangée.

          (c)  Si  la  priorité  du  thread  est  abaissée, il est placé en tête de liste pour sa
               nouvelle priorité.

          Selon POSIX.1-2008, les modifications de priorité (ou politique) de thread en utilisant
          tout  autre  mécanisme que pthread_setschedprio(3) devraient aboutir à ce que le thread
          soit placé en fin de liste pour sa priorité.

       •  Un thread appelant sched_yield(2) sera placé en fin liste.

       Aucun autre événement ne déplacera un thread ordonnancé selon la politique SCHED_FIFO dans
       la liste d’attente des threads prêts de priorité statique équivalente.

       Un   thread   SCHED_FIFO   s'exécute   jusqu'à  ce  qu'il  soit  bloqué  par  une  requête
       d'entrée-sortie, qu'il soit préempté par un thread de priorité supérieure ou qu'il appelle
       sched_yield(2).

   SCHED_RR : ordonnancement tourniquet
       SCHED_RR est une amélioration simple de SCHED_FIFO. Tout ce qui est décrit pour SCHED_FIFO
       s'applique aussi à SCHED_RR, sauf que chaque thread ne dispose que d'un quantum  de  temps
       maximal pour son exécution. Si l’exécution d’un thread SCHED_RR est d’une durée supérieure
       ou égale au quantum de temps, il sera placé en fin de liste pour sa  priorité.  Un  thread
       SCHED_RR  qui  a  été  préempté par un thread de priorité supérieure et par conséquent qui
       reprend l’exécution en tant que thread en cours, terminera la part  non  utilisée  de  son
       quantum  de  temps  dans  le  tourniquet. La valeur du quantum de temps peut être lue avec
       sched_rr_get_interval(2).

   SCHED_DEADLINE: ordonnancement sur échéances selon le modèle des tâches sporadiques.
       Since Linux 3.14, Linux provides  a  deadline  scheduling  policy  (SCHED_DEADLINE).  This
       policy   is  currently  implemented  using  GEDF  (Global  Earliest  Deadline  First)   in
       conjunction with CBS (Constant Bandwidth  Server).  To  set  and  fetch  this  policy  and
       associated   attributes,   one   must   use   the   Linux-specific  sched_setattr(2)   and
       sched_getattr(2) system calls.

       Une tâche sporadique présente une séquence de sous-tâches qui  sont  chacune  activées  au
       moins  une  fois  par  période. Chaque sous-tâche a également une échéance relative, avant
       laquelle elle doit achever son exécution, et un temps d'exécution qui  est  le  temps  CPU
       nécessaire  pour  qu'elle  s'exécute.  Le moment auquel une tâche est activée parce qu'une
       sous-tâche doit être exécutée est  appelé  temps  d'activation  (également  désigné  temps
       d'appel  (« request  time »)  ou  temps  de  libération  (« release  time »)). Le temps de
       lancement est le moment auquel la tâche commence son exécution. L'échéance impérative  est
       obtenue en additionnant l'échéance relative et le temps d'activation.

       Le schéma suivant illustre ces termes :

           activation/réveil                    échéance impérative
                |    temps du lancement                   |
                |        |                                |
                v        v                                v
           -----x--------xoooooooooooooooooooooooo--------x--------x---
                         |<- temps d'exécution ->|
                |<---------- échéance relative ---------->|
                |<----------------- période ---------------------->|

       Lorsqu'une  politique  SCHED_DEADLINE  est  activée  au  moyen de sched_setattr(2), il est
       possible de préciser trois paramètres : Runtime, Deadline et  Period.  Ces  paramètres  ne
       correspondent  pas forcément aux termes décrits précédemment : il est d'usage d'affecter à
       Runtime une valeur supérieure au temps d'exécution moyen (ou  le  pire  temps  d'exécution
       possible,  pour  les  cas de temps réel extrêmes) ; Deadline prend la valeur de l'échéance
       relative ; enfin, Period reçoit la valeur de la  période  de  la  tâche.  Ainsi,  pour  un
       ordonnancement SCHED_DEADLINE, on obtient.

           activation/réveil                    échéance impérative
                |    temps du lancement                   |
                |        |                                |
                v        v                                v
           -----x--------xoooooooooooooooooooooooo--------x--------x---
                         |<------- Exécution ------->|
                |<----------------- Échéance ------------>|
                |<----------------- Période ---------------------->|

       Les  trois paramètres de configuration de l'ordonnancement sur échéances correspondent aux
       champs sched_runtime, sched_deadline et sched_period de la structure sched_attr (consultez
       sched_setattr(2)). Ces champs sont exprimés en nanosecondes. Si la valeur 0 est affectée à
       sched_period, ce paramètre prend la valeur de sched_deadline.

       Le noyau exige que :

           sched_runtime <= sched_deadline <= sched_period

       In addition, under the current implementation, all of the  parameter  values  must  be  at
       least   1024   (i.e.,   just  over  one  microsecond,  which  is  the  resolution  of  the
       implementation), and less than 2^63. If any of these checks fails, sched_setattr(2)  fails
       with the error EINVAL.

       Le  CBS  assure  que  les différentes tâches n'interfèrent pas en bloquant les threads qui
       tentent de dépasser leur temps d'exécution (Runtime).

       Pour que les conditions requises par l'ordonnancement sur échéances  soient  remplies,  le
       noyau  doit  empêcher des situations dans lesquelles l’ensemble des threads SCHED_DEADLINE
       n’est pas réalisable (ordonnancement  non  possible)  en  tenant  compte  des  contraintes
       données.  Le  noyau  doit  donc  exécuter  un  test  d'approbation  lorsque  la  politique
       SCHED_DEADLINE et ses attributs sont définis ou modifiés. Ce test d'approbation valide que
       le  changement demandé est réalisable ; si ce n'est pas le cas, sched_setattr(2) échoue et
       renvoie l'erreur EBUSY.

       Par exemple, il est nécessaire (et par  forcément  suffisant)  pour  l'utilisation  totale
       d'être  inférieure  ou égale au nombre total de CPU disponibles, où, puisque chaque thread
       peut s'exécuter au plus pour Runtime par Period, l'utilisation pour  ce  thread  vaut  son
       Runtime divisé par sa Period.

       Pour  assurer les conditions qui sont requises lorsqu'un thread est autorisé à utiliser la
       politique SCHED_DEADLINE, les threads SCHED_DEADLINE ont la priorité la plus élevée  parmi
       tous les threads (contrôlable par l'utilisateur) du système. Si un thread ordonnancé selon
       SCHED_DEADLINE est prêt, il aura la priorité sur tout  autre  thread  ordonnancé  par  une
       autre politique.

       Un  appel  à  fork(2)  effectué par un thread ordonnancé selon la politique SCHED_DEADLINE
       échouera en renvoyant l'erreur EAGAIN, sauf dans le cas ou l'attribut « reset-on-fork » du
       thread est activé (voir plus bas).

       Un  thread ordonnancé selon SCHED_DEADLINE qui appelle sched_yield(2) cédera la priorité à
       la sous-tâche en cours et attendra une nouvelle période pour débuter.

   SCHED_OTHER : ordonnancement temps partagé par défaut
       SCHED_OTHER peut être utilisé seulement pour la priorité statique 0 (c’est-à-dire que  les
       threads  sous  politique  temps  réel  ont  la  priorité  sur  les processus SCHED_OTHER).
       SCHED_OTHER est l’ordonnanceur temps partagé de Linux prévu pour tous les threads  n’ayant
       pas besoin des mécanismes temps réel spéciaux.

       Le  thread  à  exécuter  est  choisi  dans la liste des threads de priorité statique 0, en
       utilisant une priorité dynamique qui ne s'applique  que  dans  cette  liste.  La  priorité
       dynamique  est  basée sur la valeur de politesse (« nice ») du thread (voir ci-dessous) et
       est incrémentée à chaque quantum de temps où le thread est prêt, mais non sélectionné  par
       l'ordonnanceur. Cela garantit une progression équitable de tous les threads SCHED_OTHER.

       Dans  le  code  source  du  noyau  Linux,  la  politique  SCHED_OTHER  est en fait appelée
       SCHED_NORMAL.

   La valeur de politesse
       La valeur de politesse est un attribut pouvant être utilisé pour influencer l’ordonnanceur
       en  faveur  ou  défaveur  d’un  processus  dans  les  choix d’ordonnancement. Elle affecte
       l’ordonnancement des processus SCHED_OTHER et SCHED_BATCH (voir ci-dessous). La valeur  de
       politesse peut être modifiée avec nice(2), setpriority(2) ou sched_setattr(2).

       Selon  POSIX.1, la valeur de politesse est un attribut par processus, c’est-à-dire que les
       threads dans un processus devraient partager  la  valeur  de  politesse.  Cependant,  dans
       Linux,  cette  valeur  est  un  attribut  par  thread : des threads distincts dans le même
       processus peuvent avoir des valeurs de politesse différentes.

       The range of the nice value varies across UNIX systems. On modern Linux, the range is  -20
       (high  priority)  to +19 (low priority). On some other systems, the range is -20..20. Very
       early Linux kernels (before Linux 2.0) had the range -infinity..15.

       De même, le degré auquel la valeur de politesse  affecte  l’ordonnancement  respectif  des
       processus SCHED_OTHER varie selon les systèmes UNIX et selon les versions du noyau Linux.

       With  the  advent  of  the  CFS scheduler in Linux 2.6.23, Linux adopted an algorithm that
       causes relative differences in nice values to have a much stronger effect. In the  current
       implementation,  each  unit of difference in the nice values of two processes results in a
       factor of 1.25 in the degree to which the scheduler favors the  higher  priority  process.
       This  causes  very low nice values (+19) to truly provide little CPU to a process whenever
       there is any other higher priority load on the system, and makes high  nice  values  (-20)
       deliver most of the CPU to applications that require it (e.g., some audio applications).

       Dans Linux, la limite de ressources RLIMIT_NICE peut être utilisée pour définir une limite
       jusqu'à laquelle une valeur de politesse de processus non  privilégié  peut  être  élevée.
       Consultez setrlimit(2) pour les détails.

       Pour davantage d’explications à propos de la valeur de politesse, consultez ci-dessous les
       sous-sections sur la fonctionnalité d’autogroupe et sur l’ordonnancement de groupe.

   SCHED_BATCH : ordonnancement de processus par lots
       (Depuis Linux 2.6.16) SCHED_BATCH ne peut être  utilisée  qu'avec  une  priorité  statique
       de 0.  Cette  politique  est  similaire à SCHED_OTHER en ce qu'elle ordonnance les threads
       conformément à leur priorité dynamique (basée sur la valeur de politesse).  La  différence
       est que cette politique fera que l'ordonnanceur considérera toujours que ce thread demande
       beaucoup de ressources processeur. Par conséquent, il lui appliquera une  petite  pénalité
       d'ordonnancement  vis-à-vis  du  comportement  au  réveil, ainsi le thread sera légèrement
       désavantagé dans les décisions d'ordonnancement.

       Cette politique est utile pour les charges  de  travail  non  interactives,  mais  qui  ne
       souhaitent pas diminuer leur valeur de politesse, ou pour celles qui veulent une politique
       d'ordonnancement  déterministe  sans  que  l'interactivité   ne   cause   de   préemptions
       supplémentaires (entre les tâches des charges).

   SCHED_IDLE : ordonnancement de tâches de très faible priorité
       (Depuis  Linux  2.6.23.)  SCHED_IDLE  ne  peut être utilisée qu'avec une priorité statique
       de 0 ; la valeur de politesse n'a pas d'influence pour cette politique.

       Cette politique est conçue pour l'exécution de tâches de très faible priorité  (inférieure
       même à une valeur de politesse +19 avec les politiques SCHED_OTHER ou SCHED_BATCH).

   Réinitialiser la politique d'ordonnancement pour les processus enfant
       Chaque thread possède un attribut d'ordonnancement reset-on-fork. Lorsque cet attribut est
       défini,  les  enfants  créés  au  moyen  de  fork(2)   n'héritent   pas   des   politiques
       d'ordonnancement nécessitant des droits. L'attribut reset-on-fork peut être défini soit :

       •  en  appliquant un OU logique à l'attribut SCHED_RESET_ON_FORK dans l'argument policy au
          moment de l'appel à sched_setscheduler(2) (à partir de Linux 2.6.32) ;

       •  ou en ajoutant l'argument SCHED_FLAG_RESET_ON_FORK dans attr.sched_flags au  moment  de
          l'appel à sched_setattr(2).

       Notez  que  les  constantes  utilisées  dans  ces  deux  API  ont  des noms différents. La
       disposition de l'attribut reset-on-fork peut, de façon analogue, être obtenue au moyen  de
       sched_getscheduler(2) et de sched_getattr(2).

       La  fonctionnalité reset-on-fork est prévue pour des applications de lecture audiovisuelle
       et peut être utilisée pour  empêcher  les  applications  de  passer  outre  la  limite  de
       ressource RLIMIT_RTTIME (consultez getrlimit(2)) en créant de nombreux processus enfant.

       Plus  précisément,  si  l'attribut  reset-on-fork est utilisé, les règles suivantes seront
       appliquées lors de la création ultérieure des enfants :

       •  Si le thread appelant a une  politique  d'ordonnancement  SCHED_FIFO  ou  SCHED_RR,  la
          politique pour les processus enfant est réinitialisée à SCHED_OTHER.

       •  Si  le processus appelant a une valeur de politesse négative, elle est mise à zéro pour
          les processus enfant.

       Une fois que l'attribut reset-on-fork est activé, il ne peut  être  désactivé  que  si  le
       thread  possède  la  capacité  CAP_SYS_NICE. Cet attribut est désactivé pour les processus
       enfant créés avec fork(2).

   Privilèges et limites de ressources
       Before Linux 2.6.12, only privileged (CAP_SYS_NICE)  threads  can  set  a  nonzero  static
       priority  (i.e.,  set a real-time scheduling policy). The only change that an unprivileged
       thread can make is to set the SCHED_OTHER policy,  and  this  can  be  done  only  if  the
       effective user ID of the caller matches the real or effective user ID of the target thread
       (i.e., the thread specified by pid)  whose policy is being changed.

       Un thread doit avoir des  droits  spécifiques  (CAP_SYS_NICE)  pour  pouvoir  affecter  ou
       modifier la politique SCHED_DEADLINE.

       Depuis  Linux 2.6.12,  la  limite  de  ressources RLIMIT_RTPRIO définit un plafond pour la
       priorité statique d'un thread non privilégié pour les politiques SCHED_RR  et  SCHED_FIFO.
       Les règles pour modifier la politique d'ordonnancement et la priorité sont les suivantes :

       •  Si  un  thread  non  privilégié  a  une  limite souple RLIMIT_RTPRIO non nulle, il peut
          modifier sa politique et sa priorité d'ordonnancement,  à  condition  que  la  priorité
          reste   inférieure   au  maximum  de  sa  priorité  actuelle  et  à  sa  limite  souple
          RLIMIT_RTPRIO.

       •  Si la limite souple RLIMIT_RTPRIO est nulle, les seules modifications permises sont une
          diminution de la priorité ou bien un basculement vers une politique qui n'est pas temps
          réel.

       •  Soumis aux mêmes règles, un autre  thread  non  privilégié  peut  également  faire  ces
          modifications à partir du moment où l'UID effectif du thread effectuant la modification
          correspond à l'UID réel ou effectif du thread cible.

       •  Special rules apply for the SCHED_IDLE policy. Before  Linux  2.6.39,  an  unprivileged
          thread operating under this policy cannot change its policy, regardless of the value of
          its RLIMIT_RTPRIO resource limit. Since Linux 2.6.39, an unprivileged thread can switch
          to  either  the  SCHED_BATCH  or the SCHED_OTHER policy so long as its nice value falls
          within the range permitted by its RLIMIT_NICE resource limit (see getrlimit(2)).

       Les threads privilégiés (CAP_SYS_NICE)  ignorent  la  limite  RLIMIT_RTPRIO :  comme  avec
       d'anciens  noyaux, ils peuvent modifier arbitrairement la politique d'ordonnancement et la
       priorité. Consultez getrlimit(2) pour plus d'informations sur RLIMIT_RTPRIO.

   Limiter l'utilisation CPU des processus temps-réel et à échéances.
       A nonblocking infinite loop in a thread  scheduled  under  the  SCHED_FIFO,  SCHED_RR,  or
       SCHED_DEADLINE  policy  can  potentially  block  all  other threads from accessing the CPU
       forever. Before Linux 2.6.25, the only way of preventing a runaway real-time process  from
       freezing  the  system was to run (at the console)  a shell scheduled under a higher static
       priority than the tested application. This allows an emergency kill  of  tested  real-time
       applications that do not block or terminate as expected.

       Depuis Linux 2.6.25, il existe d'autres techniques pour traiter le cas des processus temps
       réel et à échéances qui sont hors de contrôle. L'une de ces techniques consiste à utiliser
       la  limite de ressources RLIMIT_RTTIME pour définir la limite du temps CPU qu'un processus
       temps réel a le droit de consommer. Consultez getrlimit(2) pour plus de détails.

       Since Linux 2.6.25, Linux also provides two /proc files that can  be  used  to  reserve  a
       certain  amount  of  CPU time to be used by non-real-time processes. Reserving CPU time in
       this fashion allows some CPU time to be allocated to (say) a root shell that can  be  used
       to kill a runaway process. Both of these files specify time values in microseconds:

       /proc/sys/kernel/sched_rt_period_us
              Ce  fichier  définit une période d'ordonnancement correspondant à 100 % de la bande
              passante du CPU. La valeur contenue dans ce fichier peut aller de 1 à INT_MAX, soit
              une  durée  allant  de  1 microseconde  à  environ 35 minutes. La valeur par défaut
              contenue dans ce fichier est 1 000 000 (1 seconde).

       /proc/sys/kernel/sched_rt_runtime_us
              The value in this file specifies how much of the "period" time can be used  by  all
              real-time  and  deadline  scheduled processes on the system. The value in this file
              can range from -1 to INT_MAX-1. Specifying -1 makes the run time the  same  as  the
              period;  that  is,  no CPU time is set aside for non-real-time processes (which was
              the behavior before Linux 2.6.25). The default value in this file is 950,000  (0.95
              seconds),  meaning that 5% of the CPU time is reserved for processes that don't run
              under a real-time or deadline scheduling policy.

   Temps de réponse
       Un thread de haute priorité bloqué en attente d'entrées-sorties est affecté  d'un  certain
       temps  de  réponse  avant d'être sélectionné à nouveau. Le concepteur d'un gestionnaire de
       périphérique peut réduire grandement ce temps de  réponse  en  utilisant  un  gestionnaire
       d'interruptions « lentes ».

   Divers
       Les  processus enfant héritent de la politique d'ordonnancement et des paramètres associés
       lors d'un fork(2). La politique et  les  paramètres  d'ordonnancement  sont  conservés  au
       travers d'un execve(2).

       Le  verrouillage  de pages en mémoire est généralement nécessaire pour les processus temps
       réel afin d'éviter les délais de pagination ; cela peut être  effectué  avec  mlock(2)  ou
       mlockall(2).

   Fonctionnalité d’autogroupage
       Depuis  Linux 2.6.38, le noyau fournit une fonctionnalité connue comme l’autogroupage pour
       améliorer les performances des bureaux interactifs confrontés à  des  charges  de  travail
       multiprocessus  utilisant énormément le CPU telles que la construction du noyau Linux avec
       un grand nombre de processus de construction en parallèle (c’est-à-dire l’indicateur -j de
       make(1)).

       Cette  fonction  opère  en  conjonction  avec  l’ordonnancement  CFS et nécessite un noyau
       configuré  avec  CONFIG_SCHED_AUTOGROUP.  Sur  un  système  en  cours  d’exécution,  cette
       fonctionnalité     est     activée     ou     désactivée     à     l’aide    du    fichier
       /proc/sys/kernel/sched_autogroup_enabled.  Une  valeur 0  désactive  cette  fonctionnalité
       tandis qu’une valeur 1 l’active. La valeur par défaut dans ce fichier est 1 à moins que le
       noyau ait été amorcé avec le paramètre noautogroup.

       Un nouvel autogroupe est créé quand une nouvelle session est créée à l’aide de  setsid(2).
       Cela  se  produit,  par  exemple,  quand une nouvelle fenêtre de terminal est démarrée. Un
       nouveau processus créé par fork(2) hérite de l’appartenance d’autogroupe  de  son  parent.
       Par  conséquent,  tous  les processus dans une session sont membres du même autogroupe. Un
       autogroupe est automatiquement détruit quand le dernier processus du groupe se termine.

       Lorsque l’autogroupage est activé, tous les membres d’un autogroupe sont  placés  dans  le
       même  ordonnanceur « groupe de tâches » du noyau. L’ordonnanceur CFS emploie un algorithme
       qui égalise la distribution des cycles du CPU entre les groupes de tâches. Le bénéfice qui
       en découle pour la performance de bureau interactif peut être décrit à l’aide de l’exemple
       qui suit.

       Suppose that there are two autogroups competing for the same CPU (i.e., presume  either  a
       single  CPU  system or the use of taskset(1)  to confine all the processes to the same CPU
       on an SMP system). The first group contains ten CPU-bound processes from  a  kernel  build
       started with make -j10. The other contains a single CPU-bound process: a video player. The
       effect of autogrouping is that the two groups will each receive half of  the  CPU  cycles.
       That  is,  the video player will receive 50% of the CPU cycles, rather than just 9% of the
       cycles, which would likely lead to degraded video playback. The situation on an SMP system
       is  more complex, but the general effect is the same: the scheduler distributes CPU cycles
       across task groups such that an autogroup  that  contains  a  large  number  of  CPU-bound
       processes  does  not  end  up  hogging  CPU cycles at the expense of the other jobs on the
       system.

       A  process's  autogroup  (task  group)   membership   can   be   viewed   via   the   file
       /proc/pid/autogroup:

           $ cat /proc/1/autogroup
           /autogroup-1 nice 0

       Ce  fichier  peut  aussi  être utilisé pour modifier la bande passante de CPU allouée à un
       autogroupe. Cela peut être réalisé en écrivant un nombre dans le champ « nice » du fichier
       pour  définir  la  valeur  de  politesse  de l’autogroupe. L’intervalle autorisé va de +19
       (priorité basse) à -20  (priorité  haute).  L’écriture  d’une  valeur  en  dehors  de  cet
       intervalle provoquera l’échec de write(2) avec l’erreur EINVAL.

       Le  réglage de la politesse de l’autogroupe a la même acception que la valeur de politesse
       du processus, mais s’applique à la répartition des cycles CPU à  un  autogroupe  dans  son
       ensemble,  basée  sur  les  valeurs relatives de politesse des autres autogroupes. Pour un
       processus dans un autogroupe, les cycles CPU qu’il reçoit sont déduits  de  la  valeur  de
       politesse  de  l’autogroupe (comparée aux autres autogroupes) et de la valeur de politesse
       du processus (comparée aux autres processus dans le même autogroupe).

       L’utilisation du contrôleur de CPU cgroups(7) pour placer les processus dans  des  cgroups
       autres que le cgroup racine du CPU contourne l’effet de l’autogroupage.

       La  fonctionnalité  d’autogroupage  groupe  seulement  les processus ordonnancés selon des
       politiques non temps réel (SCHED_OTHER, SCHED_BATCH et SCHED_IDLE). Elle ne groupe pas les
       processus  ordonnancés  selon  les  politiques  temps  réel  et  à échéances. Ceux-ci sont
       ordonnancés selon les règles décrites ci-dessus.

   Valeur de politesse et ordonnancement de groupe
       Lors de l’ordonnancement de processus non temps réel (c’est-à-dire ceux ordonnancés  selon
       les  politiques  SCHED_OTHER,  SCHED_BATCH  et SCHED_IDLE), L’ordonnanceur CFS emploie une
       technique connue comme « ordonnancement de groupe » (group scheduling) si le noyau  a  été
       configuré avec l’option CONFIG_FAIR_GROUP_SCHED (ce qui est typique).

       Avec  l’ordonnancement  de  groupe,  les  threads  sont  ordonnancés dans des « groupes de
       tâches ». Celles-ci ont une relation hiérarchique, avec comme racine le groupe  de  tâches
       initial  du système connu comme « groupe de tâches racine » (root task group). Les groupes
       de tâches sont constitués dans les circonstances suivantes :

       •  Tous les threads dans un cgroup du CPU forment un groupe de tâches.  Le  parent  de  ce
          groupe de tâches est le groupe de tâches du cgroup parent correspondant.

       •  Si  l’autogroupage  est  activé, alors tous les threads qui sont (implicitement) placés
          dans un autogroupe (c’est-à-dire la  même  session,  telle  que  créée  par  setsid(2))
          forment  un  groupe de tâches. Chaque nouvel autogroupe est par conséquent un groupe de
          tâches distinct. Le groupe de tâches racine est le parent de tous les autogroupes de ce
          type.

       •  Si  l’autogroupage  est activé, alors le groupe de tâches racine se compose de tous les
          processus dans  le  cgroup  racine  du  CPU  qui  n’étaient  pas  par  ailleurs  placés
          implicitement dans un nouvel autogroupe.

       •  Si l’autogroupage est désactivé, alors le groupe de tâches racine est constitué de tous
          les processus dans le cgroup racine du CPU.

       •  Si l’ordonnancement de groupe  a  été  désactivé  (c’est-à-dire  que  le  noyau  a  été
          configuré  sans  CONFIG_FAIR_GROUP_SCHED),  alors tous les processus du système sont en
          théorie placés dans un groupe de tâches unique.

       Avec l’ordonnancement de groupe, une valeur de politesse de thread  a  un  effet  sur  les
       décisions  d’ordonnancement  seulement relatives aux autres threads dans le même groupe de
       tâches. Cela a quelques conséquences surprenantes en terme de sémantique traditionnelle de
       la valeur de politesse sur les systèmes UNIX. En particulier, si l’autogroupage est activé
       (par défaut dans diverses distributions), alors l’emploi de setpriority(2) ou nice(1)  sur
       un  processus  a  un  effet seulement sur l’ordonnancement concernant les autres processus
       exécutés dans la même session (classiquement : la même fenêtre de terminal).

       Inversement, pour deux processus qui sont (par exemple) les seuls processus liés à un  CPU
       dans  différentes  sessions (par exemple, des fenêtres distinctes de terminal, chacune des
       tâches étant liée à un autogroupe distinct), modifier la valeur de politesse du  processus
       d’une  des  sessions  n’a  pas  d’effet  en terme de décision d’ordonnancement relative au
       processus dans l’autre session. Un contournement utile possible consiste  à  utiliser  une
       commande  telle  que la suivante pour modifier la valeur de politesse de l’autogroupe pour
       tous les processus dans une session de terminal :

           $ echo 10 > /proc/self/autogroup

   Fonctionnalités temps réel dans le noyau Linux principal
       Since Linux 2.6.18, Linux is gradually becoming equipped with real-time capabilities, most
       of  which  are  derived from the former realtime-preempt patch set. Until the patches have
       been completely merged into the mainline kernel, they must be  installed  to  achieve  the
       best real-time performance. These patches are named:

           patch-version-noyau-rtversion-greffon

       et  peuvent  être téléchargés à partir de ⟨http://www.kernel.org/pub/linux/kernel/projects
       /rt/⟩.

       Sans  les  greffons  et  avant  leur  complète  inclusion  dans  le  noyau  principal,  la
       configuration  du  noyau  n'offre  que  trois  classes  de préemption CONFIG_PREEMPT_NONE,
       CONFIG_PREEMPT_VOLUNTARY  et   CONFIG_PREEMPT_DESKTOP   qui   fournissent   respectivement
       « aucune »,   « quelque »   et   une   « considérable »   réduction  de  la  pire  latence
       d'ordonnancement.

       Avec les greffons appliqués ou après leur pleine inclusion dans  le  noyau  principal,  la
       configuration  supplémentaire  CONFIG_PREEMPT_RT  devient disponible. Si elle est choisie,
       Linux est transformé en un système d'exploitation temps  réel  ordinaire.  Les  politiques
       d'ordonnancement  FIFO  et  RR  sont  alors utilisées pour lancer un thread avec une vraie
       priorité temps réel et une latence minimale d'ordonnancement de pire cas.

NOTES

       Le contrôleur cgroups(7) de CPU peut être utilisé pour limiter la consommation de CPU  par
       les groupes de processus.

       Originally,  Standard  Linux was intended as a general-purpose operating system being able
       to handle background processes, interactive applications,  and  less  demanding  real-time
       applications (applications that need to usually meet timing deadlines). Although the Linux
       2.6 allowed for kernel preemption and the newly introduced O(1) scheduler ensures that the
       time  needed  to  schedule is fixed and deterministic irrespective of the number of active
       tasks, true real-time computing was not possible up to Linux 2.6.17.

VOIR AUSSI

       chcpu(1), chrt(1), lscpu(1), ps(1), taskset(1), top(1), getpriority(2), mlock(2),
       mlockall(2), munlock(2), munlockall(2), nice(2), sched_get_priority_max(2),
       sched_get_priority_min(2), sched_getaffinity(2), sched_getparam(2), sched_getscheduler(2),
       sched_rr_get_interval(2), sched_setaffinity(2), sched_setparam(2), sched_setscheduler(2),
       sched_yield(2), setpriority(2), pthread_getaffinity_np(3), pthread_getschedparam(3),
       pthread_setaffinity_np(3), sched_getcpu(3), capabilities(7), cpuset(7)

       Programming  for  the  real world  POSIX.4 de Bill O. Gallmeister, O'Reilly & Associates,
       Inc., ISBN 1-56592-074-0.

       The Linux kernel source files  Documentation/scheduler/sched-deadline.txt,  Documentation/
       scheduler/sched-rt-group.txt,       Documentation/scheduler/sched-design-CFS.txt,      and
       Documentation/scheduler/sched-nice-design.txt

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier   <barbier@debian.org>,   David   Prévot  <david@tilapin.org>,  Cédric  Boutillier
       <cedric.boutillier@gmail.com>,  Frédéric  Hantrais  <fhantrais@gmail.com>   et   Jean-Paul
       Guillonneau <guillonneau.jeanpaul@free.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.