Définir la priorité du processus sur Élevé: dangereux?

8

J'ai lu que régler quelque chose en temps réel est un gros non, donc je ne vais pas le faire. Mais j'ai une application dont je dois m'assurer qu'elle a toujours la priorité la plus élevée sur mon système car elle est essentielle pour le reste des applications que j'exécute. Y a-t-il un danger à définir une priorité élevée, qui est un niveau en dessous du temps réel?

De plus, comment pourrais-je le faire en modifiant la cible de raccourci? Quelle est la commande?

eek
la source
Le paramètre "Au-dessus de la normale" (Windows 7) est plus sûr. Une discussion ici ... stackoverflow.com/questions/1663993/…
Moab
1
C'est très dangereux. Le problème majeur est l'inversion de priorité qui se traduit par le fait que le processus de priorité élevée obtient effectivement une priorité effectivement inférieure car il peut être bloqué indéfiniment par un processus de priorité inférieure .
David Schwartz
Comme mentionné, "Realtime" n'est pas nécessairement mauvais tant que votre processus se comporte bien et ne s'exécute que lorsqu'il en a besoin et s'endort lorsqu'il ne le fait pas, sinon il peut (et empêchera) l'exécution d'autres tâches.
Mokubai
2
@David Schwartz, Cutler a conçu le planificateur Windows pour éviter les blocages dus à l'inversion de priorité. À partir de support.microsoft.com/kb/96418 , «Le planificateur Windows NT résout ce problème en augmentant de façon aléatoire la priorité des threads qui sont prêts à s'exécuter (dans ce cas, les verrous de priorité faible). Les threads de faible priorité s'exécutent suffisamment longtemps pour lâcher leur verrou (quitter la section critique), et le thread de haute priorité récupère le verrou. Si le thread de faible priorité ne dispose pas de suffisamment de temps CPU pour libérer son verrou la première fois, il aura une autre chance lors du prochain cycle de programmation. "
Nicole Hamilton
@NicoleHamilton C'est pourquoi parfois un programme ouvrira plusieurs instances à la fois s'il ne s'est pas ouvert au premier clic (et vous avez cliqué plusieurs fois), à cause d'une charge élevée?
Simon Verbeke

Réponses:

6

Le temps réel n'est pas nécessairement un «non-non». Cela pourrait juste affamer d'autres processus des cycles CPU. Certaines applications ne peuvent pas gérer cela. C'est quelque chose que vous auriez à expérimenter.

Élevé devrait être moins un problème. Cependant, vous devez toujours surveiller votre système pour voir si toutes les applications se comportent bien.

Voici comment changer le processus via la ligne de commande, que vous pouvez mettre dans un raccourci:

http://support.microsoft.com/kb/191771

Keltari
la source
1
Sous Windows, il fait mourir de faim d' autres processus très facilement (y compris le Gestionnaire des tâches lui - même).
user1686
3
Tout dépend de votre système. Selon l'intensité d'utilisation du processeur par le processus, une affinité en temps réel convient. Je lance un processus en temps réel sans problème. En outre, cela peut aider à définir une affinité pour un processeur tout en définissant la priorité sur le temps réel.
Keltari
Si un processus est défini sur temps réel, aura-t-il la priorité absolue sur tous les autres processus sur le cœur sur lequel il s'exécute? J'ai essayé de trouver des moyens de dédier un de mes cœurs à Dwarf Fortress pendant qu'il fonctionne.
SaintWacko
3

Je dirais que ça dépend. Si vous n'avez qu'un seul cœur / CPU sur votre ordinateur et que c'est une tâche gourmande en CPU, je ne le définirais pas en temps réel. Élevé pourrait être correct, mais cela nécessite des expérimentations.

Si vous avez plusieurs cœurs et que le processus est à un seul thread: allez-y, définissez-le comme vous le souhaitez. Vos autres cœurs seront toujours gratuits, même si un cœur est chargé à 100% tout le temps.

Si vous avez plusieurs cœurs et que le processus est multi-thread: cela dépendra si tous les threads auront une charge de 100%. Certains programmes ont un thread «gestionnaire» qui répartit le travail sur d'autres threads mais ne fait pas beaucoup de traitement lui-même. Cela laisserait un noyau presque libre et permettrait ainsi une priorité élevée ou en temps réel.

D'autres programmes essaieront de prendre en charge tous les cœurs. Dans ce cas, un niveau élevé peut être correct, mais il doit être expérimenté.

Même d'autres ne prendront qu'un nombre particulier de cœurs et pourraient ne pas utiliser tous les cœurs disponibles. Dans ce cas, une priorité élevée ou en temps réel devrait convenir.

À moins que vous ne soyez sur un seul cœur, allez-y, expérimentez. La plupart du temps, cela ne fera pas de mal de le régler sur élevé ou même en temps réel. Vous pouvez également définir l'affinité d'un processus (combien de cœurs il peut utiliser) dans le gestionnaire de tâches. De cette façon, vous pouvez mieux équilibrer la charge de votre CPU. Il peut également aider à réduire les températures et la consommation d'énergie, etc.

Simon Verbeke
la source
+1 Bon point qu'une application monothread ne pose aucun problème sur une machine multicœur, quelle que soit la façon dont elle est liée au calcul.
Nicole Hamilton
N'oubliez pas cependant que, comme averti, [principalement] les processus à priorité élevée à un seul thread - même s'ils n'affectent qu'un seul cœur - peuvent maintenir les verrous de synchronisation du système global pendant une durée anormale.
dyasta
1

Que cela fonctionne pour vous dépend entièrement de ce que fait votre application. S'il s'agit d'un long, long calcul qui n'a jamais besoin d'attendre les E / S, attendez-vous à ce que l'exécution à une priorité élevée puisse mettre votre machine à genoux. Mais si le problème est la latence et que votre application a juste besoin de se réveiller très rapidement en réponse à un achèvement des E / S ou à un événement similaire, effectuez un petit traitement rapide, puis recommencez à vous endormir, tout ira bien.

Nicole Hamilton
la source