On Mon, 23 Sep 2002, Jean-Claude Schopfer wrote:

> Comment puis-je limiter la consommation CPU d'un processus ? 

J'ai répondu à cette question car je me souvenais vaguement d'avoir vu
quelque chose (un job scheduler, avec des classes). Mais je n'ai plus
retrouvé. Alors je réponds plus généralement.

C'est le scheduler du kernel Linux qui choisit les candidats à être
exécutés sur un processeur donné. Le scheduler standard de UNIX est un
time-sharing scheduler, qui s'arrange pour qu'il n'y ait jamais de famine
(un processus sera toujours finalement exécuté, ce qui a des avantages
pratiques, notamment éviter le danger de la `priority inversion' [1] qui
peut mener des systèmes embarqués à l'interblocage complet (deadlock) [2])
et pour qu'il y a une répartition juste du temps CPU. La valeur de
`niceness' influence ce choix de processus à exécuter.

A ma connaissance, il n'est pas possible d'implémenter une politique,
genre limiter un processus à 25% du CPU dans tous les cas. On peut lui
donner une valeur de `niceness' plus élevée afin d'approximer ce
comportement. Sauf erreur la valeur de niceness 19 est spéciale sous
Linux, elle n'est exécutée que si aucune autre processus ne doit
s'exécuter (pas sûr de ça, ni si cela existe encore avec les différentes
classes de scheduling actuelles). 

A cela s'ajoute les différentes classes de priorité de Linux, notamment
REALTIME, mais cela sort de ce que l'on veut faire [3].

Il existe un moyen de modifier le comportement du scheduler pour le rendre
moins UNIX, via des modules chargeables. Notamment apparemment HP a écrit
un tel module [4].

Il devrait être relativement facile d'implémenter une nouvelle classe de
processus limités à un pourcentage du total. Cela pourrait être un projet
de laboratoire en systèmes d'exploitation p.ex.

Peut-être qu'un tel patch existe déjà. En attendant, sauf si cela vous
intéresse, `nice' sera probablement la solution la plus efficace, voire
l'excellente proposition kill -STOP/CONT précédente.

[1] http://research.microsoft.com/~mbj/Mars_Pathfinder/Priority_Inversion.html
[2] http://catless.ncl.ac.uk/Risks/19.49.html#subj1
    http://www.time-rover.com/Priority.html (un peu de la pub)
[3] sched_setscheduler(2)
[4] http://resourcemanagement.unixsolutions.hp.com/WaRM/docs/loadable_sched.html

(c'est le premier document intéressant que je trouve chez Microsoft
 de ma vie, donc je le signale). 


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.

Répondre à