Unter Linux lautet der Systemaufruf zum Festlegen der CPU-Affinität für einen Prozess sched_setaffinity
. Dann gibt es das taskset
Tool , um es in der Kommandozeile zu tun.
Um dieses einzelne Programm nur auf einer CPU ausführen zu können, möchten Sie wahrscheinlich so etwas
taskset -c 1 ./myprogram
(Legen Sie eine beliebige CPU-Nummer als Argument für den -c
Switch fest.)
Das sollte nahe genug an einem Einzelprozessorsystem liegen, solange Ihre anderen Prozesse im Vergleich zu dem, den Sie messen möchten, nicht zu viel laufen oder für andere CPUs geplant werden. Wenn Sie nur diesem einzelnen Prozess eine CPU zuweisen und verhindern möchten , dass andere Prozesse auf dieser CPU ausgeführt werden, müssen Sie auch deren Affinität festlegen.
Das weiß ich nicht richtig. Sie müssen die Prozessoraffinität init
sehr früh im Startvorgang festlegen , um sicherzustellen, dass sie an alle Prozesse auf dem System vererbt wird. Um dieses Problem zu umgehen, können Sie taskset -c -p 0 $PID
alle anderen Prozesse verwenden, um zu erzwingen, dass sie nur auf CPU # 0 ausgeführt werden.
systemd hat auchCPUAffinity=
die Affinität in Unit - Dateien zu steuern , und es gibt ein paar von Fragen über die Einstellung der Standard - Affinität hier auf unix.SE, aber ich habe nicht eine gute Lösung finden.
Obwohl @Kamil Maciorowski eine andere Frage auf superuser.com kommentierte und beantwortete , sollte die Einstellung isolcpus=1
in der Kernel-Befehlszeile "diese CPU von den allgemeinen Planungsalgorithmen isolieren", was Sie vielleicht möchten.