Man page - ioprio_get(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

ioprio_set

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
Choisir un ordonnanceur d’E/S
L’ordonnanceur d’E/S « Completely Fair Queuing » (CFQ)
Permissions nĂ©cessaires pour dĂ©finir les prioritĂ©s d’E/S
BOGUES
VOIR AUSSI
TRADUCTION

NOM

ioprio_get, ioprio_set - Lire et Ă©crire la classe et la prioritĂ© d’ordonnancement des E/S

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <linux/ioprio.h> /* Definition des constantes IOPRIO_* */
#include <sys/syscall.h>
/* Definition des constantes SYS_* */
#include <unistd.h>

int syscall(SYS_ioprio_get, int which , int who );
int syscall(SYS_ioprio_set, int
which , int who , int ioprio );

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

DESCRIPTION

Les appels systĂšme ioprio_get () et ioprio_set () lisent et Ă©crivent la classe et la prioritĂ© d’ordonnancement des entrĂ©es et sorties pour un ou plusieurs processus.

Les arguments which et who identifient le(s) thread(s) sur lesquels les appels systĂšme agissent. L’argument which dĂ©termine comment who est interprĂ©tĂ©, et prend l’une des valeurs suivantes :
IOPRIO_WHO_PROCESS

who est l’identifiant d’un processus ou d’un thread. Si who vaut 0, alors l’action s’applique au thread appelant.

IOPRIO_WHO_PGRP

who est l’identifiant d’un groupe de processus et se rĂ©fĂšre Ă  tous les membres de ce groupe. Si who vaut 0, alors l’action s’applique au groupe de processus auquel l’appelant appartient.

IOPRIO_WHO_USER

who est un UID identifiant tous les processus dont l’UID rĂ©el correspond.

Si which vaut IOPRIO_WHO_PGRP ou IOPRIO_WHO_USER Ă  l’appel de ioprio_get (), et si plus d’un processus correspond Ă  who , la prioritĂ© renvoyĂ©e sera la plus grande des prioritĂ©s des processus correspondants. Une prioritĂ© est dite plus grande qu’une autre si elle appartient Ă  une classe de prioritĂ© supĂ©rieure ( IOPRIO_CLASS_RT est la classe la plus haute ; IOPRIO_CLASS_IDLE est la plus basse) ou si elle appartient Ă  la mĂȘme classe mais a un niveau de prioritĂ© plus Ă©levĂ© (donc un numĂ©ro de prioritĂ© plus faible).

L’argument ioprio donnĂ© Ă  ioprio_set () est un masque de bits indiquant la classe et la prioritĂ© Ă  donner au(x) processus cible(s). Les macros suivantes servent Ă  crĂ©er et Ă  tester les valeurs ioprio :
IOPRIO_PRIO_VALUE(
class , data )

Étant donnĂ©es une classe d’ordonnancement ( class ) et une prioritĂ© ( data ), cette macro combine les deux valeurs pour crĂ©er une valeur ioprio , qui est renvoyĂ©e comme rĂ©sultat.

IOPRIO_PRIO_CLASS( mask )

À partir de mask (une valeur ioprio ) cette macro renvoie sa classe d’E/S, c’est-à-dire une valeur parmi IOPRIO_CLASS_RT , IOPRIO_CLASS_BE et IOPRIO_CLASS_IDLE .

IOPRIO_PRIO_DATA( mask )

Étant donnĂ© mask (une valeur ioprio ), renvoie la prioritĂ© ( data ) correspondante.

Consultez la section NOTES pour plus d’informations sur les classes et prioritĂ©s d’ordonnancement ainsi que sur le sens de positionner ioprio Ă  0 .

Les prioritĂ©s d’E/S sont gĂ©rĂ©es pour les lectures et pour les Ă©critures synchrones ( O_DIRECT , O_SYNC ). Les prioritĂ©s d’E/S ne sont pas gĂ©rĂ©es pour les Ă©critures asynchrones parce qu’elles sont lancĂ©es hors du contexte du programme touchant la mĂ©moire, ce qui fait que les prioritĂ©s spĂ©cifiques Ă  chaque programme ne s’appliquent pas.

VALEUR RENVOYÉE

Lorsqu’il rĂ©ussit, ioprio_get () renvoie la valeur ioprio du processus dont la prioritĂ© d’E/S est la plus grande parmi les processus correspondant aux critĂšres indiquĂ©s par which et who . En cas d’erreur, -1 est renvoyĂ©, et errno contient le code d’erreur.

S’il rĂ©ussit, ioprio_set () renvoie zĂ©ro. En cas d’erreur, il renvoie -1 et remplit errno avec la valeur d’erreur.

ERREURS

EINVAL

which ou ioprio est invalide. Consultez la section NOTES pour les classes et prioritĂ©s d’ordonnancement disponibles pour ioprio .

EPERM

Le processus appelant n’a pas les privilĂšges nĂ©cessaires pour attribuer cette prioritĂ© ioprio au(x) processus indiquĂ©(s). Consultez la section NOTES pour plus d’informations sur les privilĂšges nĂ©cessaires pour ioprio_set ().

ESRCH

Aucun processus ne correspond aux critÚres indiqués par which et who .

STANDARDS

Linux.

HISTORIQUE

Linux 2.6.13.

NOTES

Plusieurs processus ou threads peuvent partager un contexte d’entrĂ©es-sorties. Cela est le cas lorsque clone (2) a Ă©tĂ© appelĂ© avec l’attribut CLONE_IO . Cependant, par dĂ©faut, les threads distincts d’un processus ne partagent pas le mĂȘme contexte d’entrĂ©es-sorties. Cela signifie que si vous voulez changer la prioritĂ© d’entrĂ©es-sortie de tous les threads d’un processus, il peut ĂȘtre nĂ©cessaire d’appeler ioprio_set () sur chacun de ces threads. L’identifiant du thread nĂ©cessaire pour cette opĂ©ration est renvoyĂ© par gettid (2) ou clone (2).

Ces appels systĂšme n’ont d’effet que lorsqu’ils sont utilisĂ©s avec un ordonnanceur d’E/S qui gĂšre les prioritĂ©s d’E/S. Sous Linux 2.6.17, l’ordonnanceur « Completely Fair Queuing » (CFQ) est le seul ordonnanceur d’E/S de ce type.

Si aucun ordonnanceur d’E/S n’a Ă©tĂ© dĂ©fini pour un thread, la prioritĂ© par dĂ©faut suivra la valeur de politesse du processeur (( setpriority (2)). Dans les noyaux Linux antĂ©rieurs Ă  la version 2.6.24, une fois qu’une prioritĂ© d’E/S avait Ă©tĂ© positionnĂ©e ioprio_set (), il n’y avait aucun moyen de rĂ©initialiser le comportement de l’ordonnancement E/S Ă  celui par dĂ©faut. Depuis Linux 2.6.24, on peut positionner ioprio sur 0 pour rĂ©initialiser le comportement d’ordonnancement des E/S Ă  celui par dĂ©faut.

Choisir un ordonnanceur d’E/S

Les ordonnanceurs d’E/S sont sĂ©lectionnĂ©s pour chaque pĂ©riphĂ©rique par le fichier spĂ©cial /sys/block/ device /queue/scheduler .

On peut voir quel ordonnanceur d’E/S est actuellement sĂ©lectionnĂ© via le systĂšme de fichiers /sys . Par exemple, la commande suivante affiche la liste des ordonnanceurs chargĂ©s dans le noyau :

$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

L’ordonnanceur entre crochets est celui qui est utilisĂ© pour le pĂ©riphĂ©rique ( sda dans l’exemple). Pour choisir un autre ordonnanceur, on Ă©crit son nom dans ce fichier. Par exemple, la commande suivante dĂ©finit l’ordonnanceur pour le pĂ©riphĂ©rique sda Ă  cfq :

$ su
Password:
# echo cfq > /sys/block/sda/queue/scheduler

L’ordonnanceur d’E/S « Completely Fair Queuing » (CFQ)

Depuis la version 3 (« CFQ Time Sliced »), CFQ implĂ©mente des niveaux de politesse d’E/S similaires Ă  ceux de l’ordonnancement CPU. Ces niveaux de politesse sont groupĂ©s en trois classes d’ordonnancement, chacune de ces classes contenant un ou plusieurs niveaux de priorité :
IOPRIO_CLASS_RT
(1)

Il s’agit de la classe d’E/S temps rĂ©el. Cette classe d’ordonnancement a une prioritĂ© plus grande que toutes les autres classes : les processus de cette classe ont toujours accĂšs au disque en premier. Cette classe d’E/S doit donc ĂȘtre utilisĂ©e avec parcimonie : un seul processus avec des E/S temps rĂ©el peut bloquer tout le systĂšme. Au sein de la classe temps rĂ©el, il y a 8 niveaux de prioritĂ© qui dĂ©terminent exactement pendant combien de temps ce processus aura besoin du disque Ă  chaque service. La plus haute prioritĂ© temps rĂ©el est 0 ; la plus basse est 7 . Dans le futur, ceci pourra changer afin d’ĂȘtre plus directement corrĂ©lĂ© Ă  la performance, en passant le dĂ©bit de donnĂ©es souhaitĂ© Ă  la place de la prioritĂ©.

IOPRIO_CLASS_BE (2)

Classe d’ordonnancement « best-effort », qui est utilisĂ©e par dĂ©faut pour les processus qui n’ont pas indiquĂ© de prioritĂ© d’E/S particuliĂšre. La prioritĂ© de classe dĂ©termine combien de bande passante d’E/S le processus obtiendra. Les niveaux de prioritĂ© best-effort sont similaires aux valeurs de politesse CPU (consultez getpriority (2)). Le niveau de prioritĂ© dĂ©termine une prioritĂ© par rapport aux autres processus dans la classe d’ordonnancement best-effort. Les niveaux de prioritĂ© vont de 0 (plus prioritaire) Ă  7 (moins prioritaire).

IOPRIO_CLASS_IDLE (3)

Classe d’ordonnancement « idle ». Les processus s’exĂ©cutant Ă  ce niveau n’obtiennent du temps d’E/S que lorsque personne d’autre n’a besoin du disque. La classe idle n’a pas de donnĂ©e (prioritĂ©) de classe. Il faut faire attention lorsque l’on met un processus dans cette classe de prioritĂ©, car il peut ĂȘtre bloquĂ© si des processus de plus haute prioritĂ© accĂšdent constamment au disque.

Consultez Documentation/block/ioprio.txt pour plus d’informations sur l’ordonnanceur d’E/S CFQ et un exemple de programme.

Permissions nĂ©cessaires pour dĂ©finir les prioritĂ©s d’E/S

La permission de modifier la prioritĂ© d’un processus est accordĂ©e ou refusĂ©e en fonction de deux critĂšres :
Propriétaire du processus

Un processus non privilĂ©giĂ© ne peut dĂ©finir la prioritĂ© d’E/S que des processus dont l’UID rĂ©el est Ă©gal Ă  l’UID rĂ©el ou effectif du processus appelant. Un processus ayant la capacitĂ© CAP_SYS_NICE peut modifier la prioritĂ© de n’importe quel processus.

Priorité désirée

Pour pouvoir dĂ©finir une prioritĂ© trĂšs haute (( IOPRIO_CLASS_RT ), il faut avoir la capacitĂ© CAP_SYS_ADMIN . Les noyaux antĂ©rieurs Ă  2.6.24 (compris) nĂ©cessitent Ă©galement CAP_SYS_ADMIN pour dĂ©finir une prioritĂ© trĂšs faible (( IOPRIO_CLASS_IDLE ), mais depuis 2.6.25, ce n’est plus le cas.

Un appel Ă  ioprio_set () doit suivre ces deux rĂšgles, sans quoi il Ă©choue avec l’erreur EPERM .

BOGUES

La glibc ne fournit pas encore de fichier d’en-tĂȘte dĂ©finissant les prototypes de fonctions et les macros dĂ©crits dans cette page. Les dĂ©finitions se trouvent dans linux/ioprio.h .

VOIR AUSSI

ionice (1), getpriority (2), open (2), capabilities (7), cgroups (7)

Documentation/block/ioprio.txt dans les sources du noyau Linux

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