Ich muss Leistungstests für mein gleichzeitiges Programm ausführen und meine Anforderung ist, dass es nur auf einem CPU-Kern ausgeführt werden soll. (Ich möchte keine kooperativen Threads - ich möchte immer einen Kontextwechsel haben).
Ich habe also zwei Fragen:
Die beste Lösung - So signieren und reservieren Sie nur einen CPU-Kern nur für mein Programm (um das Betriebssystem zu zwingen, diesen CPU-Kern nicht zu verwenden). Ich denke es ist nicht möglich, aber vielleicht irre ich mich ...
Wie stelle ich Linux (Fedora 24) so ein, dass nur ein CPU-Kern verwendet wird?
linux
cpu
parallelism
peter55555
quelle
quelle
Antworten:
Unter Linux lautet der Systemaufruf zum Festlegen der CPU-Affinität für einen Prozess
sched_setaffinity
. Dann gibt es dastaskset
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
(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 Sietaskset -c -p 0 $PID
alle anderen Prozesse verwenden, um zu erzwingen, dass sie nur auf CPU # 0 ausgeführt werden.systemd hat auch
CPUAffinity=
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.quelle