OVH Cloud OVH Cloud

Utilisation CPU

6 réponses
Avatar
fred
Bonjour,

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de la CPU
?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n% de la
CPU ?

Merci de vos réponses.

Fred.

6 réponses

Avatar
Bruno Bonfils
"fred" writes:

Bonjour,

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de la CPU
?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n% de la
CPU ?


http://asyd.net/docs/pam/ar01s05.html#d0e416

(attention cette doc PAM n'est pas encore finie)

--
http://asyd.net/home/ - Home Page
http://guses.org/home/ - French Speaking Solaris User Group

Avatar
Paul Gaborit
À (at) Tue, 7 Mar 2006 15:55:11 +0100,
"fred" écrivait (wrote):

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de
la CPU ? Est-il possible d'imposer à un processus de ne pas
utiliser plus de n% de la CPU ?


Poser en ces termes, vos questions n'ont pas de sens.

Pourquoi voulez-vous empêcher le processeur de faire son travail ? Que
va-t-il faire les (100-n)% du temps restant ?

Contrairement à l'espace disque (pour lequel on peut imposer des
quotas), lorsqu'un processus utilise 100% du CPU pendant un instant,
l'instant suivant il peut très bien n'en utiliser que 50% si d'autres
en ont besoin. D'ailleurs, si on descend à un niveau de granularité
suffisament bas, sur une machine mono-processeur, un processus occupe
toujours soit 100% de la CPU soit 0% ;-)

La bonne question serait plutôt :

- comment empêcher un processus ou un utilisateur de s'accaparer
toute la puissance de la CPU au détriment des autres ?

La réponse repose alors en partie sur l'usage des priorités et donc
des commandes 'nice' (ou 'renice').

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
fred
Est-il possible d'imposer à un user de ne pas utiliser plus de n% de
la CPU ? Est-il possible d'imposer à un processus de ne pas
utiliser plus de n% de la CPU ?


Poser en ces termes, vos questions n'ont pas de sens.
ok, préférez-vous la reformulation suivante:

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de la CPU
en moyenne pendant un intervalle de temps donné ?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n% de la
CPU en moyenne pendant un intervalle de temps donné ?

La réponse repose alors en partie sur l'usage des priorités et donc
des commandes 'nice' (ou 'renice').
Dans mon cas, la priorité est déjà fixée au minimum (19 sur Linux RedHat),

mais le traitement en question lance une centaine de processus (tous de
priorité minimale) qui au final empêchent aux autres utilisateurs de faire
quoi que ce soit, y a-t-il une solution à cela ?
Attention, je ne peux pas diminuer le nombre de processus exécutés
simultanément par le user en question, sinon son traitement échouera, par
contre ça ne me dérange pas si son traitement met 10 fois plus de temps.
Ce que je souhaiterais c'est que les autres users puissent travailler
pendant ce temps là, même si j'ai bien conscience qu'ils seront forcément un
peu ralentis.

Fred.


Avatar
Harpo
fred wrote:

Poser en ces termes, vos questions n'ont pas de sens.


ok, préférez-vous la reformulation suivante:
Est-il possible d'imposer à un user de ne pas utiliser plus de n% de
la CPU en moyenne pendant un intervalle de temps donné ?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n%
de la CPU en moyenne pendant un intervalle de temps donné ?


Je pense que la question est peut-être encore mal posée, je pense que
vous voudriez que le process n'occupe pas plus de n% quand le
processeur est utilisé à 100% par les autres.

La réponse repose alors en partie sur l'usage des priorités et donc
des commandes 'nice' (ou 'renice').
Dans mon cas, la priorité est déjà fixée au minimum (19 sur Linux

RedHat), mais le traitement en question lance une centaine de
processus (tous de priorité minimale) qui au final empêchent aux
autres utilisateurs de faire quoi que ce soit, y a-t-il une solution à
cela ? Attention, je ne peux pas diminuer le nombre de processus
exécutés simultanément par le user en question, sinon son traitement
échouera, par contre ça ne me dérange pas si son traitement met 10
fois plus de temps. Ce que je souhaiterais c'est que les autres users
puissent travailler pendant ce temps là, même si j'ai bien conscience
qu'ils seront forcément un peu ralentis.


C'est une excellente question et un problème très intéressant...
Regardez toujours 'man sched_setscheduler', mais je ne suis pas certain
que cela puisse aider dans ce cas.
Est-il nécessaire que les process du user en question s'exécutent tous
simultanément ? Y aurait-il un moyen de les sérialiser un peu ? Est-ce
une application de type batch qui pourrait s'exécuter quand les autres
users sont au lit ?

Je ne sais pas si, tel quel, Unix offre une solution builtin à ce
problème. J'aimerais aussi savoir s'il y en a.


Avatar
Paul Gaborit
À (at) Wed, 8 Mar 2006 16:17:49 +0100,
"fred" écrivait (wrote):
Est-il possible d'imposer à un user de ne pas utiliser plus de n% de
la CPU ? Est-il possible d'imposer à un processus de ne pas
utiliser plus de n% de la CPU ?


Poser en ces termes, vos questions n'ont pas de sens.
ok, préférez-vous la reformulation suivante:

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de la CPU
en moyenne pendant un intervalle de temps donné ?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n% de la
CPU en moyenne pendant un intervalle de temps donné ?


Ça n'a pas plus de sens qu'avant puisque si la machine n'a rien
d'autre à faire, il vaut bien mieux qu'elle se consacre à 100% à cette
tâche.

La réponse repose alors en partie sur l'usage des priorités et donc
des commandes 'nice' (ou 'renice').
Dans mon cas, la priorité est déjà fixée au minimum (19 sur Linux RedHat),

mais le traitement en question lance une centaine de processus (tous de
priorité minimale) qui au final empêchent aux autres utilisateurs de faire
quoi que ce soit, y a-t-il une solution à cela ?
Attention, je ne peux pas diminuer le nombre de processus exécutés
simultanément par le user en question, sinon son traitement échouera, par
contre ça ne me dérange pas si son traitement met 10 fois plus de temps.
Ce que je souhaiterais c'est que les autres users puissent travailler
pendant ce temps là, même si j'ai bien conscience qu'ils seront forcément un
peu ralentis.


A priori, sur Linux (je ne sais pas pour RedHat en particulier) comme
sur beaucoup d'Unix, les niveaux de priorité s'étale de -20 à 20. Par
défaut les processus des utilisateurs 'normaux' sont au niveau
zéro. Les pages de man décrivent le niveau 20 comme "the affected
processes will run only when nothing else in the system wants
to". C'est généralement le cas.

Mais cela n'empêche pas le symptôme suivant : si il n'y a rien d'autre
à faire le processeur et surtout le mémoire sont entièrement occupés
par les processus de pirorité 20 et lorsque un autre processus de
priorité normal démarre, il faut un temps tout à fait perceptible pour
libérer la mémoire (la libération du processeur prend un temps
négligeable).

Mis à part augmenter la mémoire physique ou limiter arbitrairement la
taille mémoire disponible pour les processus incriminés, je ne connais
pas de solution miracle à ce problème.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>



Avatar
Jean-Louis Liagre
fred wrote:
Bonjour,

Est-il possible d'imposer à un user de ne pas utiliser plus de n% de la CPU
?
Est-il possible d'imposer à un processus de ne pas utiliser plus de n% de la
CPU ?

Merci de vos réponses.

Fred.


Sous Solaris, les deux sont possibles, il suffit d'utiliser le "fair share
scheduler" (ordonnanceur équitable), en opposition aux "time sharing schedulers"
habituels.

Bien entendu, cette limitation à un pourcentage de la CPU n'intervient que s'il
y a une demande d'autres utilisateurs/processus pour la CPU.

Si l'utilisateur ou le processus est le seul actif, il disposera de 100% du CPU.