2010-11-02 4 views
2

Contextelimitant le nombre de processeurs utilisés par un processus

Je refactoring actuellement une application .NET héritée. L'application effectue des calculs mathématiques complexes sur des périodes relativement longues (jusqu'à quelques heures), au cours desquelles se produisent des périodes d'utilisation presque continue du processeur sur plusieurs threads.

Chaque utilisateur dispose d'une machine à 8 cœurs dédiée exclusivement à l'exécution d'une instance de l'application (ils utilisent d'autres machines pour exécuter toutes les autres applications). L'application est exécutée à l'aide d'un compte système partagé qui permet au personnel de support, le cas échéant, de se connecter à la machine via Remote Desktop et de surveiller l'application (cela arrive assez souvent). Lorsque le processus d'application démarre, il définit son propre affinité de processeur de telle sorte que le processus est autorisé à utiliser tous les processeurs, à l'exception d'un seul. Par exemple. sur une machine à 8 processeurs, l'affinité est fixée à 0x007F (01111111) ce qui limite l'application aux processeurs 1 à 7 et l'empêche d'exécuter des threads sur le processeur 8. Le processeur exclu est toujours celui représenté par le bit le plus haut dans l'affinité valeur. Cela s'explique par le fait que l'exclusion d'un processeur permet à la machine de rester plus réactive lors d'une session Remote Desktop et lors de l'utilisation de tout autre outil de surveillance ad hoc qui peut être nécessaire de temps en temps (Baretail, Process Explorer, etc.).

Question

Est-ce susceptible de donner beaucoup d'avantages compte tenu du coût des ressources de l'un CPU à l'application? Évidemment, je peux effectuer quelques tests afin de recueillir des preuves empiriques, mais la disponibilité de la machine d'essai est limitée et le comportement de l'application a de nombreuses dépendances externes, ce qui signifie que le temps d'utilisation intensive du processeur est très difficile à déterminer. Le temps et les ressources nécessaires pour l'évaluer correctement risquent d'être loin d'être négligeables. Pour cette raison, je cherche des raisons théoriques pour ou contre cela. Pour moi, cela semble être une mauvaise idée puisque l'application est empêchée d'utiliser les ressources d'un processeur entier, qui ne sont pas susceptibles d'être entièrement consommées par d'autres processus. Je voudrais supprimer la limitation du processeur et permettre à Windows de gérer l'allocation du processeur sans restrictions. Cependant, je dois être en mesure de présenter quelques arguments convaincants afin de vendre ce changement si, en effet, mes soupçons sont corrects.

+0

Mon expérience de cette situation est que vous ne devriez pas limiter votre application de calcul intensif. Votre système d'exploitation doit être parfaitement réactif même avec le processeur à 100% d'utilisation car le thread de premier plan est prioritaire. –

Répondre

3

Bien que je ne puisse pas vous donner beaucoup de faits concrets sur la façon dont vous le faites en ce moment, ma réaction immédiate est que vous avez raison, et l'approche actuelle que vous décrivez est erronée.

Ce que je conseillerais à la place serait de réduire la priorité d'exécution du processus long. Dans une situation typique, tout ce qui est en dessous de la normale fonctionnera à peu près aussi bien. Cela permet au processus d'utiliser toutes les ressources disponibles tant que rien d'autre n'en a besoin, mais consacre toutes les ressources nécessaires aux autres processus si/si nécessaire.

+1

+1 - l'idée de permettre à Windows de gérer les threads en fonction de la priorité m'était également venue à l'esprit - merci de sauvegarder mes réflexions sur cela –

+0

edit: changé 'hard facts' en 'arguments convaincants' ;-) –

Questions connexes