web-dev-qa-db-fra.com

Utilisation d'un seul noyau CPU

Je dois exécuter des tests de performance pour mon programme concomitant et mes besoins sont qu'il devrait être exécuté n seul CPU Core. (Je ne veux pas de threads coopératifs - je veux toujours avoir une commutation de contexte).

Donc j'ai deux questions:

  1. La meilleure solution - Comment signer et réserver un seul noyau de la CPU uniquement pour mon programme (pour forcer le système d'exploitation à ne pas utiliser ce noyau de la CPU). Je suppose que ce n'est pas possible mais peut-être que je me trompe ...

  2. Comment définir Linux (Fedora 24) pour utiliser un seul noyau CPU?

9
peter55555

Sur Linux, l'appel du système pour définir l'affinité de la CPU pour un processus est sched_setaffinity . Ensuite, il y a le taskset outil Pour le faire sur la ligne de commande.

Pour que ce programme unique ne fonctionne sur un seul processeur, je pense que vous voudriez quelque chose comme

taskset -c 1 ./myprogram

(Définissez tout numéro de la CPU comme argument sur le -c changer.)

Cela devrait être suffisamment proche d'un système à processeur unique, tant que vos autres processus ne fonctionnent pas trop par rapport à celui que vous souhaitez mesurer, ou ils sont programmés à d'autres CPU. Si vous souhaitez dédier un processeur à ce processus unique uniquement et prévenir Autre processus de fonctionnement sur cette CPU, vous devez également définir leur affinité aussi .

Que, i non Savoir faire correctement. Vous auriez besoin de définir l'affinité du processeur de init très tôt dans le processus de démarrage afin de vous assurer qu'il est hérité de tous les processus du système. En tant que contournement, vous pouvez utiliser taskset -c -p 0 $PID Pour tous les autres processus pour les forcer à courir sur la CPU # 0 uniquement.

SystemD a aussi CPUAffinity= Pour contrôler l'affinité dans les fichiers unitaires et il y a n couple de questions sur définir l'affinité par défaut ici sur UNIX.SE, mais je n'ai pas trouvé tout avec une bonne solution.

Bien que comme @ kamil maciorowski a commenté et répondit à une autre question sur SuperUserSer.com , réglage isolcpus=1 sur la ( ligne de commande du noya devrait "isoler cette CPU des algorithmes de planification générale", ce qui est quelque chose que vous voudrez peut-être.

26
ilkkachu