dwww Home | Manual pages | Find package

sched_setattr(2)              System Calls Manual             sched_setattr(2)

NOM
       sched_setattr,  sched_getattr  - Lire/écrire la politique d'ordonnance-
       ment et ses attributs

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

SYNOPSIS
       #include <sched.h>            /* Définition des constantes SCHED_* */
       #include <sys/syscall.h>      /* Définition des constantes SYS_* */
       #include <unistd.h>

       int syscall(SYS_sched_setattr, pid_t pid, struct sched_attr *attr,
                   unsigned int flags);
       int syscall(SYS_sched_getattr, pid_t pid, struct sched_attr *attr,
                   unsigned int size, unsigned int flags);

       Note : la glibc ne fournit pas de fonction autour de cet appel système,
       l'utilisation de syscall(2) est requise.

DESCRIPTION
   sched_setattr()
       L'appel système sched_setattr() affecte à la fois la politique d'ordon-
       nancement et les paramètres associés pour le thread identifié par  pid.
       Si  pid  vaut  zéro,  la politique et les paramètres seront affectés au
       thread appelant.

       Actuellement, Linux accepte les politiques d'ordonnancement considérées
       « normales »  (c'est à dire non « temps réel ») suivantes comme valeurs
       pouvant être passées dans policy :

       SCHED_OTHER   politique standard de temps partagé « round-robin » ;

       SCHED_BATCH   pour une exécution de style traitement par lot  des  pro-
                     cessus ; et

       SCHED_IDLE    pour l'exécution de tâches de très faible priorité en ar-
                     rière-plan.

       Les politiques « temps réel » suivantes sont également gérées pour  des
       applications  particulières  sensibles  au  temps et qui nécessitent un
       contrôle précis de la façon dont sont choisis les threads  qui  doivent
       être  exécutés.  Pour  en  savoir  plus  sur  les  règles  s'appliquant
       lorsqu'un processus doit utiliser ces politiques,  consultez  sched(7).
       Les politiques « temps réel » qui sont acceptées dans policy sont :

       SCHED_FIFO    une politique de « premier entré, premier sorti » ; et

       SCHED_RR      une politique « round-robin ».

       Linux fournit également les règles suivantes :

       SCHED_DEADLINE
                     une  politique  d'échéance  d'ordonnancement ;  pour plus
                     d'informations, consultez sched(7).

       L'argument attr est un pointeur vers une structure qui définit la  nou-
       velle  politique  d'ordonnancement  et les attributs du thread indiqué.
       Cette structure a la forme suivante :

           struct sched_attr {
               u32 size;              /* Taille de la structure */
               u32 sched_policy;      /* Politique (SCHED_*) */
               u64 sched_flags;       /* Attributs */
               s32 sched_nice;        /* Valeur de courtoisie (SCHED_OTHER,
                                         SCHED_BATCH) */
               u32 sched_priority;    /* Priorité statique (SCHED_FIFO,
                                         SCHED_RR) */
               /* les champs restants sont pour SCHED_DEADLINE */
               u64 sched_runtime;
               u64 sched_deadline;
               u64 sched_period;
           };

       Les champs de la structure sched_attr sont les suivants :

       size   Ce champ doit être défini en prenant pour valeur la taille de la
              structure  en  octets, telle que dans sizeof(struct sched_attr).
              Si la structure fournie est plus  petite  que  la  structure  du
              noyau,  tous les champs additionnels seront considérés comme va-
              lant « 0 ». Si la structure  fournie  est  plus  grande  que  la
              structure du noyau, le noyau vérifiera que ces valeurs addition-
              nelles valent bien « 0 » ; si ce n'est  pas  le  cas,  sched_se-
              tattr()  échouera  en renvoyant l'erreur E2BIG et modifiera size
              en lui affectant la taille de la structure du noyau.

              Le comportement décrit précédemment pour les cas où la taille de
              la structure d'espace utilisateur sched_attr ne correspond pas à
              la taille de la structure du noyau laisse la porte ouverte à  de
              futures  évolutions de l'interface. Des applications incorrectes
              qui transmettent des structures  trop  grandes  continueront  de
              s'exécuter  si  plus tard la taille de la structure du noyau de-
              vait augmenter. Il est également envisageable qu'un jour,  l'in-
              terface permette aux applications qui transmettent une structure
              d'espace utilisateur sched_attr de grande taille  de  savoir  si
              elles  s'exécutent  sur un noyau plus ancien qui ne gère pas une
              structure de cette taille.

       sched_policy
              Ce champ précise la politique d'ordonnancement sous la forme  de
              l'une des valeurs SCHED_* suivantes :

       sched_flags
              Ce  champ  contient zéro ou plusieurs des attributs suivants re-
              liés par un Ou logique pour contrôler le comportement  de  l'or-
              donnancement :

              SCHED_FLAG_RESET_ON_FORK
                     Les  enfants  créés  par fork(2) n'héritent pas des poli-
                     tiques  d'échéance  d'ordonnancement  privilégiée.   Voir
                     sched(7) pour des détails.

              SCHED_FLAG_RECLAIM (depuis Linux 4.13)
                     Cet  attribut  permet  à  un thread SCHED_DEADLINE de re-
                     prendre de la  bande  passante  inutilisée  par  d'autres
                     threads en temps réel.

              SCHED_FLAG_DL_OVERRUN (depuis Linux 4.16)
                     Cet attribut permet à une application d'être informée des
                     dépassements  des  temps  d'exécution  dans  les  threads
                     SCHED_DEADLINE.  De tels dépassements peuvent être provo-
                     qués (par exemple) par la prise en compte grossière  d'un
                     temps  d'exécution ou par une mauvaise affectation de pa-
                     ramètre. La  notification  prend  la  forme  d'un  signal
                     SIGXCPU généré à chaque dépassement.

                     Ce  signal  SIGXCPU est dirigé par le processus (voir si-
                     gnal(7)) et non par le  thread.  Il  s'agit  probablement
                     d'un  bogue.  D'un côté, sched_setattr() est utilisé pour
                     positionner un attribut par thread. De l'autre, si un si-
                     gnal dirigé par un processus est envoyé à un thread situé
                     dans un processus en dehors de celui rencontrant  un  dé-
                     bordement  en  cours d'exécution, l'application n'a aucun
                     moyen de savoir quel thread a débordé.

       sched_nice
              Ce champ précise la valeur de courtoisie devant  être  appliquée
              lorsque  sched_policy  a reçu la valeur SCHED_OTHER ou la valeur
              SCHED_BATCH. La valeur de courtoisie est un nombre compris entre
              -20  (priorité la plus élevée) et +19 (priorité la plus basse) ;
              voir sched(7).

       sched_priority
              Ce  champ  précise  la  priorité  statique   appliquée   lorsque
              sched_policy  a reçu la valeur SCHED_FIFO ou la valeur SCHED_RR.
              L'intervalle autorisé pour ces priorités peut être déterminé  au
              moyen   de   sched_get_priority_min(2)   et  de  sched_get_prio-
              rity_max(2). Pour les autres politiques, ce champ doit valoir 0.

       sched_runtime
              Ce champ précise le paramètre d'exécution (runtime)  pour  l'or-
              donnanceur  sur  échéances.  La  valeur  est exprimée en nanose-
              condes. Ce champ, ainsi  que  les  deux  suivants,  est  utilisé
              seulement  pour  l'ordonnancement  SCHED_DEADLINE ; pour plus de
              détails, consultez sched(7).

       sched_deadline
              Ce champs précise le paramètre « échéance »  pour  l'ordonnance-
              ment sur échéances. Cette valeur est exprimée en nanosecondes.

       sched_period
              Ce  champ précise le paramètre « période » pour l'ordonnancement
              sur échéances. Cette valeur est exprimée en nanosecondes.

       L'attribut flags est fourni afin de permettre de futures évolutions  de
       l'interface ; dans l'implémentation actuelle, il doit valoir 0.

   sched_getattr()
       L'appel  système sched_getattr() récupère la politique d'ordonnancement
       et ses paramètres associés pour le thread identifié  par  pid.  Si  pid
       vaut  zéro,  la  politique  et les paramètres du thread appelant seront
       renvoyés.

       L'argument size doit contenir la  taille  de  la  structure  sched_attr
       telle  qu'elle  est connue dans l'espace utilisateur. Cette valeur doit
       être au moins égale à la taille de la structure sched_attr initialement
       publiée ;  si  ce  n'est pas le cas, l'appel échoue et renvoie l'erreur
       EINVAL.

       Les attributs d'ordonnancement récupérés sont placés dans les champs de
       la  structure  sched_attr vers laquelle pointe attr. Le noyau affecte à
       attr.size la taille de sa structure sched_attr.

       Si le tampon attr fourni par l'appelant est plus grand que la structure
       sched_attr  du  noyau,  les  octets  supplémentaires de la structure de
       l'espace utilisateur ne sont pas modifiés. Si la structure fournie  par
       l'appelant  est  plus  petite  que la structure sched_attr du noyau, le
       noyau ne renverra aucune valeur qui serait stockée au-delà de  l'espace
       fourni.  De  même  que pour sched_setattr(), cette sémantique laisse la
       porte ouverte à de nouvelles évolutions de l'interface.

       L'attribut flags est fourni afin de permettre de futures évolutions  de
       l'interface ; dans l'implémentation actuelle, il doit valoir 0.

VALEUR RENVOYÉE
       sched_setattr()  et  sched_getattr()  renvoient 0 s'ils réussissent. En
       cas d'échec, -1 est renvoyé et errno est positionné pour indiquer l'er-
       reur.

ERREURS
       sched_getattr()  et  sched_setattr() peuvent l'un comme l'autre échouer
       pour les raisons suivantes :

       EINVAL attr est NULL, ou pid est négatif, ou  flags  est  différent  de
              zéro.

       ESRCH  Le thread numéro pid n'existe pas.

       De plus, sched_getattr() peut échouer pour les raisons suivantes :

       E2BIG  Le tampon défini par size et attr est trop petit.

       EINVAL size  est  n’est  pas valable, c'est à dire qu'il est plus petit
              que la structure sched_attr définie initialement (48 octets)  ou
              plus grand que la taille d'une page du système.

       En outre, sched_setattr() peut échouer pour les raisons suivantes :

       E2BIG  Le  tampon  défini par size et attr est plus grand que la struc-
              ture du noyau et au moins l'un des  octets  qui  déborde  de  la
              structure n'est pas nul.

       EBUSY  Échec  du  contrôle  d'admission  de  SCHED_DEADLINE,  consultez
              sched(7).

       EINVAL attr.sched_policy ne fait pas partie des politiques  acceptées ;
              attr.sched_flags  contient  un attribut autre que SCHED_FLAG_RE-
              SET_ON_FORK, ou attr.sched_priority n’est pas valable ou  encore
              attr.sched_policy  est SCHED_DEADLINE et les paramètres d'ordon-
              nancement sur échéances dans attr ne sont pas valables.

       EPERM  L'appelant ne possède pas les privilèges nécessaires.

       EPERM  Le masque d'affinité de processeur du thread indiqué par pid  ne
              comprend   pas   tous  les  processeurs  du  système  (consultez
              sched_setaffinity(2)).

VERSIONS
       Ces appels système ont fait leur apparition dans la version 3.14 de Li-
       nux.

STANDARDS
       Ces appels système sont des extensions spécifiques à Linux.

NOTES
       La  glibc  ne  fournit pas d'enveloppes pour ces appels système ; appe-
       lez-les avec syscall(2).

       sched_setattr()  fournit  un  sur-ensemble   des   fonctionnalités   de
       sched_setscheduler(2),  sched_setparam(2), nice(2), et (hormis la capa-
       cité de définir la priorité de tous les processus appartenant à un uti-
       lisateur  ou de tous les processus d'un groupe)  setpriority(2). De fa-
       çon analogue, sched_getattr() fournit un sur-ensemble des fonctionnali-
       tés  de sched_getscheduler(2), sched_getparam(2) et (en partie) de get-
       priority(2).

BOGUES
       Dans les versions de Linux jusqu'à 3.15, sched_settattr() échouait avec
       l'erreur EFAULT et non pas E2BIG dans les cas décrits dans ERREURS.

       Jusqu'à Linux  5.3, sched_settattr() échouait avec l'erreur EFBIG si la
       structure sched_attr interne au noyau était plus  grande  que  la  size
       fournie par l'espace utilisateur.

VOIR AUSSI
       chrt(1), 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_getschedparam(3), pthread_setschedparam(3),
       pthread_setschedprio(3), capabilities(7), cpuset(7), sched(7)

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-Philippe  MENGUAL
       <jpmengual@debian.org>

       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⟩.

Pages du manuel de Linux 6.03   5 février 2023                sched_setattr(2)

Generated by dwww version 1.15 on Sat Jun 29 01:48:23 CEST 2024.