2010-01-27 4 views
3

Merci pour toutes les réponses à ce jour!Affinité du processeur sous Linux

Je dispose d'un processeur Dual Core et j'aimerais que tous les processus exécutent sur core1 mais un. Je sais maintenant que je peux utiliser taskset pour définir tous les en cours d'exécution pour être lié au processeur 1 par exemple. Maintenant, je voudrais que mon propre application est prévue pour l'exécution sur le processeur 2 instantanément après le lancement de l'application. En d'autres termes, est-il possible de dire au système d'exploitation de mon application que j'aimerais que ce programme particulier soit exécuté sur le processeur numéro 2?

Merci beaucoup, Mareika

+0

Est-ce une question de programmation? Je ne peux pas tout à fait le dire. Sinon, c'est vraiment une bonne question pour SU. –

Répondre

2
+1

Merci pour vos conseils. Cependant, y a-t-il aussi un moyen de spécifier dans mon application qu'il devrait fonctionner sur le second noyau? Alors qu'il est automatiquement lancé sur le deuxième noyau et je n'ai pas besoin d'attendre après qu'il a commencé à l'exécution? – Mareika

2

Vous pouvez utiliser:

taskset -c 1 -p 123 

à laisser processus d'exécution 123 sur le noyau 2.

+2

Vous devrez également faire 'taskset -c 0 -p ' pour chaque autre PID en cours d'exécution afin de réaliser pleinement ce que l'OP voulait. – caf

1

je chercherais un moyen pour limiter le processus 'init' à l'exécution sur cpu 1. * Comme l'affinité du processeur est héritée, tous les autres processus du système doivent donc exécutez sur cpu 1, jusqu'à ce que vous démarrez votre processus spécial spécifique avec cpu affinité définie pour cpu 2.

* Sinon, après le démarrage du système, vous pouvez réaffecter l'affinité de tous les processus en cours d'exécution, mais cela semble moins élégant.

2

Jetez un oeil à cet article:

http://www.linuxjournal.com/article/6799

qui couvre le sujet en détail.

En bref, assurez-vous INIT est de commencer avec une affinité pour un proc (il des enfants hériteront), alors vous aurez envie d'utiliser:

// (Declaration got via 'man sched_setaffinity') 
int sched_setaffinity(pid_t pid, size_t cpusetsize, 
         cpu_set_t *mask); 

Pour définir votre affinité processus juste après votre le programme démarre.

Questions connexes