J'ai besoin d'exécuter des tests de performances pour mon programme simultané et mon exigence est qu'il ne doit être exécuté que sur un seul cœur de processeur. (Je ne veux pas de threads coopératifs - je veux toujours avoir un changement de contexte).
J'ai donc deux questions:
La meilleure solution - Comment signer et réserver un seul cœur de processeur uniquement pour mon programme (pour forcer le système d'exploitation à ne pas utiliser ce cœur de processeur). Je suppose que ce n'est pas possible mais peut-être que je me trompe ...
Comment configurer Linux (Fedora 24) pour utiliser un seul cœur de processeur?
linux
cpu
parallelism
peter55555
la source
la source
Réponses:
Sous Linux, l'appel système pour définir l'affinité CPU pour un processus est
sched_setaffinity
. Ensuite, il y a l'taskset
outil pour le faire sur la ligne de commande.Pour que ce programme unique s'exécute sur un seul processeur, je pense que vous voudriez quelque chose comme
(définissez n'importe quel numéro de CPU comme argument du
-c
commutateur.)Cela devrait être assez proche d'un système à processeur unique, tant que vos autres processus ne s'exécutent pas trop par rapport à celui que vous souhaitez mesurer, ou qu'ils sont planifiés sur d'autres processeurs. Si vous voulez consacrer un CPU à ce processus unique seulement , et empêcher d' autres processus en cours d' exécution de ce CPU, vous aurez besoin de définir leur affinité aussi.
Ça, je ne sais pas comment faire correctement. Vous devez définir l'affinité du processeur
init
très tôt dans le processus de démarrage pour vous assurer qu'il est hérité de tous les processus du système. Comme solution de contournement, vous pouvez utilisertaskset -c -p 0 $PID
tous les autres processus pour les forcer à s'exécuter uniquement sur le CPU # 0.systemd a également
CPUAffinity=
pour contrôler l'affinité dans les fichiers de l' unité et il y a deux ou trois de la question sur la définition de l'affinité par défaut ici sur unix.SE, mais je ne ai trouvé aucun avec une bonne solution.Bien que @Kamil Maciorowski ait commenté et répondu à une autre question sur superuser.com , la configuration
isolcpus=1
sur la ligne de commande du noyau devrait "isoler ce CPU des algorithmes de planification généraux", ce que vous voudrez peut-être.la source