Ich versuche, Multithread-Benchmarks auf einer Reihe isolierter CPUs auszuführen. Um es kurz zu machen, ich habe es zunächst mit isolcpus
und versucht, bin taskset
aber auf Probleme gestoßen . Jetzt spiele ich mit cgroups / csets.
Ich denke, der "einfache" cset shield
Anwendungsfall sollte gut funktionieren. Ich habe 4 Kerne, daher möchte ich die Kerne 1-3 für das Benchmarking verwenden (ich habe diese Kerne auch so konfiguriert, dass sie sich im adaptiven Ticks-Modus befinden), dann kann Kern 0 für alles andere verwendet werden.
Nach dem Tutorial hier sollte es so einfach sein wie:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Jetzt haben wir also ein "Schild", das isoliert ist (das Benutzer-Cset) und Kern 0 ist für alles andere (das System-Cset).
Okay, sieht soweit gut aus. Nun schauen wir uns an htop
. Die Prozesse sollten alle auf CPU 0 migriert worden sein:
Huh? Einige der Prozesse laufen auf den abgeschirmten Kernen. Um den Fall auszuschließen, dass htop einen Fehler aufweist, habe ich auch versucht taskset
, die Affinitätsmaske eines Prozesses zu untersuchen, der sich im Schild befindet.
Vielleicht waren diese Aufgaben unbeweglich? Lassen Sie uns einen beliebigen Prozess zupfen, der auf CPU3 ausgeführt wird (der sich im Schild befinden sollte), htop
und prüfen, ob er in der System-C-Gruppe wie folgt angezeigt wird cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Ja, das läuft auf der Systemgruppe nach cset
. Also htop
und nicht cset
einverstanden.
Also, was ist hier los? Wem vertraue ich: CPU-Affinitäten ( htop
/ taskset
) oder cset
?
Ich vermute, dass Sie nicht cset
und Affinitäten zusammen verwenden sollen. Vielleicht funktioniert der Schild gut, und ich sollte die Affinitätsmasken und die htop
Ausgabe ignorieren . In jedem Fall finde ich das verwirrend. Kann jemand etwas Licht ins Dunkel bringen?
numactl
und das cgconfig
und cgrules
/ oder um cgred
zu rationalisieren, was Sie tun. Diese können für Debian mit einigen Arbeiten verfügbar sein .