Duplication possible:
comment définir l’affinité du processeur d’un pthread particulier?
Existe-t-il un moyen sous Linux de désactiver un cœur pour tous les processus, sauf un processus? Je voudrais avoir un kernel réservé uniquement et uniquement pour mon processus.
Le comportement attendu est le suivant:
Oui il y a. Vous voulez créer deux cpusets, l’un avec votre CPU isolé et l’autre avec tous les autres processeurs. Assignez votre processus spécial au cpuset isolé et tous les autres processus à l’autre cpuset.
Voici un exemple de script simple qui le fera:
mkdir /cpuset mount -t cpuset none /cpuset/ cd /cpuset mkdir sys # create sub-cpuset for system processes /bin/echo 0-2 > sys/cpuset.cpus # assign cpus (cores) 0-2 to this set # adjust if you have more/less cores /bin/echo 1 > sys/cpuset.cpu_exclusive /bin/echo 0 > sys/cpuset.mems mkdir rt # create sub-cpuset for my process /bin/echo 3 > rt/cpuset.cpus # assign cpu (core) 3 to this cpuset # adjust this to number of cores-1 /bin/echo 1 > rt/cpuset.cpu_exclusive /bin/echo 0 > rt/cpuset.mems /bin/echo 0 > rt/cpuset.sched_load_balance /bin/echo 1 > rt/cpuset.mem_hardwall # move all processes from the default cpuset to the sys-cpuset for T in `cat tasks`; do echo "Moving " $T; /bin/echo $T > sys/tasks; done
Commencez maintenant votre processus et découvrez son PID et allez:
/bin/echo $PID > /cpuset/rt/tasks
Si vous souhaitez annuler ces modifications, redémarrez simplement votre système ou procédez comme suit:
# move tasks back from sys-cpuset to root cpuset for T in `cat /cpuset/sys/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done # remove sys-cpuset rmdir /cpuset/sys # move tasks back from rt-cpuset to root cpuset for T in `cat /cpuset/rt/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done # remove rt-cpuset rmdir /cpuset/rt # unmount and remove /cpuset umount /cpuset rmdir /cpuset
Voici la page de manuel: http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html
Il existe également des wrappers de shell plus complexes qui peuvent vous aider à automatiser cela, comme cset. Voir: http://web.archive.org/web/20120428093126/http://www.suse.com/documentation/slerte_11/slerte_tutorial/data/slerte_tutorial.html
Vous pouvez consulter cet article pour une discussion sur la solution du kernel à ce problème.