[gull] [SPAM] Re: Truc et astuces: nice et ionice (rappel)]
Daniel Cordey
dc at pxcluster.com
Sat Mar 4 17:52:05 CET 2023
Le 04.03.23 à 13:38, Marc SCHAEFER via gull a écrit :
> Attention, je parle bien d'ionice, et non pas de nice.
Oui, juste, mais je ne vois pas de grande différence. Si un process
effectue une opération I/O, il va se trouver bloqué et ne sera de toute
façon pas "élligible". Dès que l'opération I/O descend dans le kernel,
cette notion de priorité disparaît. On peut au mieux "dégrader" sa
priorité, mais pas l'améliorer. C'est particulièrement vrai dans le cas
de "Idle".
> Il ne me semble pas que sur Linux le fonctionnement de nice (et des
> priorités de processus UNIX) ait changé.
Les différents schedulers développés ces dernières années, dans le but
d'améliorer certaines situations, font donc joujou avec la priorité des
process. Certains de ces codes privilégient certains I/O au détriment
d'autres et cela a bien plus d'effets que la priorité d'un process; de
même ionice aura peu de poids dans ce cas.
Les différentes tentatives d'améliorer les schedulers poursuivent un but
qu'il est difficile d'atteindre. Il y a un antagonisme entre une station
de travail et un serveur. Le premier à besoin de "raw" performance sur
des applications verticales, alors qu'un serveur à besoin de throughput.
C'est assez irréconciliable :-) En gros, favoriser l'un se fait au
détriment de l'autre. Les nouveaux schedulers essaient de détecter une
situation où la nécessité d'interactivité ne sera pas impacté par les
exigences d'un serveur. Tout ceci est assez complexe (et hors sujet) et
*nice ont un effet extrêmement limité sur ce que va vraiment faire le
scheduler.
> C'est juste, mais ici tu parles de la différence entre scheduling UNIX
> classique (sans famine, avec même des processus de priorité inférieure
> qui ont de temps en temps des cycles, donc pas de risque de priority
> inversion [1]), contre scheduling temps réel (RT) qui peut créer des
> famines et des bugs d'inversion de priorité.
Oui, exactement. Le temps réel est quelque chose de spécial, mais qui
permet d'atteindre un certain niveau de déterminisme, ou de vraiment
prioriser un process plutôt que d'autres; en évitant le swap et en le
favorisant dans le scheduler (en agissant au niveau des priorités dans
les profondeurs du kernel).
> Tu as raison, mais moi je parlais véritablement d'I/O scheduling, une
> extension spécifique à Linux, configurable avec la commande ionice, dans
> la mesure où le backend le support, par exemple bfq. Pas de temps réel.
Oui, effectivement. Même sur un système idle (mon PC), on a un peu plus
de 1'000 interruptions par seconde et quasi 7'000 context switch par
seconde. Autant d'occasion de recalculer le process le plus éligible. Il
y a donc beaucoup de candidats qui vont entrer en compétition avec noter
process dont on a changé la priorité I/O. Or, avec ionice, on dit "on
aimerait bien que...", sauf que le scheduler va dire "Oui, mais j'ai la
cache, le DMA, les drivers... ah oui, toi... un moment". Contrairement à
ce que l'on pourrait croire, on n'a que peu d'influence avec *nice, sauf
dans des cas particuliers, mais je dirais certainement pas en mode
interractif.
> Il n'y a à mon sens aucune raison d'utiliser du RT scheduling, sauf
> applications spéciales à latence garantie (p.ex. traitement audio ou
> autre), et là on va alors séparer entre applications RT spécifiquement
> écrites et laisser nos applications (processus) UNIX en priorité
> classique, car elles ne sont pas forcément prêtes à tous les problèmes
> qui peuvent se poser dans un système RT.
Exact.
> [1] https://fr.wikipedia.org/wiki/Inversion_de_priorit%C3%A9
La première version du kernel HP-UX pour les processeurs PA-RISC était
"temp réel". A l'arrivé des système multi-processeurs, il a été question
de récrire la gestion du temps réel en utilisant des sémaphores pour les
structures du kernel. C'est tombé à l'eau à l'époque. Je ne sais pas
quelle base est utilisée par Ubuntu pour son kernel temps réel, mais il
y a toujours eu une base de développement temps réel pour les kernel *X,
mais c'est plutôt une branche qui évolue en parallèle du kernel standard
de Linux.
dc
More information about the gull
mailing list