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.