Comment puis-je définir l'affinité processeur d'un processus sous Linux?

29

Comment puis-je définir l'affinité processeur d'un processus sous Linux?

chillitom
la source

Réponses:

24

J'ai utilisé le jeu de tâches pour cela. Si vous avez installé un ensemble de tâches, quelque chose comme:

taskset -c 1,3 -p 45678

définirait le processus avec l'ID 45678 pour avoir une affinité avec les processeurs 1 et 3.

kbyrd
la source
1
Une modification anonyme a suggéré que la commande doit être taskset -p -c 1,3 45678plutôt que taskset -c 1,3 -p 45678; c'est-à-dire que le -c 1,3est une spécification de masque et, en tant que tel, doit être placé entre le -pet le pid.
G-Man dit `` Réintègre Monica ''
7

À l'intérieur du processus, l'appel serait sched_setaffinity(), ou pour les trucs pthreads,pthread_setaffinity_np()

Sur une note connexe, si vous vous inquiétez de l'affinité CPU de votre programme, il peut être utile de faire attention à la façon dont il fait l'allocation de mémoire. Les systèmes plus grands avec une mémoire connectée à plusieurs contrôleurs (c'est-à-dire plusieurs sockets CPU, chacun avec leur propre) auront une latence et une bande passante variables entre différentes paires CPU-mémoire. Vous voudrez également examiner l'affinité NUMA, en utilisant la numactlcommande ou les appels système avec lesquels elle fonctionne. Un programme sur lequel j'ai travaillé a obtenu une amélioration de 10% de ses performances.

Phil Miller
la source
3

Vous devez installer schedutils(utilitaires du planificateur Linux). Je l'ai utilisé sur mon bureau Ubuntu.

Lien SF

Hemant
la source
1
taskset -c 1-3 ./a.out arg1 arg2

lance le a.outprocessus avec des arguments donnés et une affinité définie pour les processeurs 1, 2 ou 3 (basés sur zéro).

Voici un programme de test C minimal qui peut être utilisé pour le voir en action: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source