Comment exécuter un programme avec un seul cœur de processeur?

28

J'essaie d'exécuter un tas de scripts liés à un serveur de jeux dans Terminator. Le seul problème est que lorsque je fais cela, Terminator détecte tous mes cœurs de processeur et les retards du PC. Y a-t-il un moyen de le démarrer mais de le faire croire que je n'ai qu'un seul cœur de processeur?

user245115
la source
2
Salut, il semble que vous souffriez peut-être du problème xy ici, il vaut parfois la peine de regarder en arrière ce que vous voulez réaliser et non la solution que vous avez essayée car il semble que ce dont vous avez besoin est d'exécuter un programme sans ralentir votre PC, pas seulement pour exécuter quelque chose sur un seul cœur. Néanmoins, c'est une très bonne question. +1
Vality
en relation: unix.stackexchange.com/questions/23106/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

44

Ce n'est pas terminatorque l'on fait le "spreading" sur tout le CPU d'un processus donné. Linux lui-même (le noyau) fait cela. Une tâche (processus) est planifiée comme disponible pour s'exécuter sur tous les processeurs par défaut; s'il utilise des threads, il peut utiliser plus d'un processeur à la fois.

Pour restreindre un processus à un processeur spécifique, vous utilisez la commande taskset.

taskset --cpu-list 1,2 my_command 

Cette commande force my_command à s'exécuter uniquement sur les CPU # 1 ou # 2.

Pour en savoir plus, tapez man tasksetou recherchez «affinité CPU Linux» ( cliquez d' abord ici ).

Rmano
la source
2
Soit dit en passant, vous pouvez également essayer de simplement modifier les «mauvais» processus, en réduisant leur priorité de planification.
Matteo Italia
@MatteoItalia J'ai trouvé qu'Ubuntu 13.10 et 14.04 ignorent le bon niveau par défaut. Vous devez ajouter kernel.sched_autogroup_enabled = 0à /etc/sysctl.confpour le faire fonctionner. Cependant, j'ai également constaté que 13.10 paniquait fréquemment le noyau lors du démarrage, si l'autogroupe était désactivé.
kasperd
Qu'en est-il des processus enfants du processus parent? Héritent-ils de l'affinité centrale / CPU de leur processus parent?
yildizabdullah
5

Bien qu'une autre réponse ait déjà donné la réponse littérale, j'explorerais la possibilité que cela ne soit pas fait de la bonne façon. Au lieu de cela, vous devez exécuter un script que vous ne souhaitez pas ralentir l'ordinateur (tels que des scripts non interactifs) à l'aide de la nicecommande.

Pour ce faire, il suffit de préfixer la commande que vous souhaitez exécuter avec nice, par exemple: nice command_to_run Cela entraînera la priorité du programme par rapport aux autres tâches et ne ralentira pas votre machine. J'utilise souvent cette technique lors d'une longue compilation qui autrement ralentirait mon PC à une analyse, cela a l'avantage de permettre au programme d'utiliser tous les cœurs lorsque la machine n'est pas occupée mais arrêtera rapidement de les utiliser lorsque vous exécutez quelque chose autre.

Vality
la source
Si j'utilise une commande comme "nice open terminator", terminator fonctionnera-t-il avec tous les cœurs de processeur?
user245115
Oh, et au fait, si je déplace ma souris et que rien ne s'ouvre, est-ce qu'il utilisera tous les processeurs? Et combien de temps faut-il après que j'arrête de déplacer ma souris pour qu'elle utilise tous les CPU? Et puis-je l'utiliser avec l'ensemble de tâches? (Ouais, je suis un vrai noob avec Linux.)
user245115
@ user245115 Si vous utilisez l'utilitaire nice, il est possible que terminator utilise plusieurs cœurs de processeur, mais il cessera immédiatement d'utiliser ces cœurs si un autre programme (ne fonctionnant pas avec nice) souhaite les utiliser, vous ne subirez donc pas de ralentissement, mais il utilisez-les s'ils sont par ailleurs entièrement gratuits et inutilisés. Cela ne devrait pas être affecté par l'utilisation de la souris ou toute autre interaction avec le programme.
Vality
@ user245115 Il devrait également être possible de l'utiliser avec l'ensemble de tâches simplement en écrivant taskset nice open terminatorpour utiliser les deux. Cependant, cela sera exagéré car vous utiliserez deux programmes différents pour obtenir l'un et l'autre l'effet de réduire l'utilisation des ressources du programme.
Vality
@ user245115 Au moment où vous effectuez une autre action (comme déplacer la souris), le terminateur aura moins de temps CPU, c'est instantané et dès que vous arrêtez une autre activité, il le réutilisera (également instantanément)
Vality