2012-03-07 3 views
1

Sous Linux (notre système est CentOS5), est-il possible d'allouer des ressources CPU aux processus? Par exemple, j'ai une application tomcat, je veux que tous les processus et threads invoqués par tomcat aient p% de tous les cycles CPU, quel que soit le nombre d'autres applications en cours d'exécution. Et je veux ajuster le p% dynamiquement (par exemple, à ce créneau horaire, tomcat a des cycles de cpu de 40%, et à l'intervalle de temps suivant, il a des cycles de cpu de 70%).Comment puis-je allouer dynamiquement des ressources de l'unité centrale aux processus sous Linux?

Si ce qui précède est possible, est-il possible de le faire de façon conservatrice? Je veux dire, même si Tomcat a 40% de cycles CPU, mais si sa charge de travail actuelle ne consomme que 10%, d'autres applications peuvent utiliser les 30% de cycles CPU restants.

Merci.

+0

Cela pourrait se faire par l'intermédiaire des groupes témoins. – ninjalj

Répondre

2

Êtes-vous familier avec les niveaux de gentillesse et de gentillesse de l'outil? Plutôt que d'essayer de dicter des pourcentages exacts, vous voudrez peut-être vérifier les niveaux de gentillesse et comment les définir dans CentOs. Vos applications fonctionneront comme prévu, les processus les plus prioritaires pouvant réclamer plus de ressources, tandis que les processus de priorité inférieure ne souffriront pas d'un manque de ressources, même lorsqu'un processus de priorité supérieure est inactif.

+0

Salut, merci pour votre réponse. Je ne suis pas familier avec gentil. J'ai cherché un peu de temps, je pense que vous voulez dire la commande renice (dans ma situation). Mais, il semble que l'effet des niveaux de gentillesse dépend fortement de l'ordonnanceur. Savez-vous comment le niveau de convivialité affecte la planification dans CentOS? Si je mets à n le niveau de gentillesse d'un processus, quelle proportion de cycles de processeur recevra ce processus? Merci! – Geni

+0

Le nombre de cycles de CPU n'est pas forcément garanti avec nice - ce que cela signifie, c'est de dire au planificateur ce qui est prioritaire. -20 est la priorité la plus élevée, 0 est la priorité "normale" et 20 est la priorité la plus basse. AFAIK, en réglant n'importe quelle valeur plus haute ou plus basse, la valeur par défaut est 20/-20. Vous ne voulez pas forcément passer à -20 immédiatement, mais vérifiez plutôt que -5 ou -10 fonctionne comme vous le souhaitez. Vous pouvez voir le niveau de gentillesse de votre et d'autres processus en haut et ps pour mieux adapter à vos besoins. – tamarintech

1

Si vous avez vraiment vraiment envie de le faire (et la suggestion de esnyder de donner la priorité à l'aide des niveaux Nice est certainement une meilleure solution pour tout ce que vous êtes vraiment essayer d'atteindre) ET vous êtes heureux de le faire à la granularité de 1/nombre de CPU (par exemple sur un système 8 cœurs, spécifiez l'utilisation comme multiple de 12,5% de la ressource CPU totale) alors vous pouvez utiliser sched_setaffinity pour définir le masque d'affinité CPU pour le processus que vous voulez contrôler (vous pouvez le faire d'un autre processus). (En fait, je pense que vous devriez identifier tous les threads de ce processus et les invoquer sur chacun d'entre eux).

Sinon, cpusets peut être intéressant, mais je n'ai aucune idée de ce qu'il faut pour les activer ou comment ils peuvent être dynamiques.

+0

Salut @timday, merci pour votre réponse. Nous considérons actuellement un cas de CPU unique. Ainsi, la granularité 1/nombre de CPU peut être trop grossière pour nous. Mais, merci tout de même. – Geni

Questions connexes