Weisen Sie den Linux-Kernel an, bestimmte CPUs nicht zu verwenden

8

Ich versuche, einige Benchmarks auf einem Multicore-Computer auszuführen, und ich möchte den Linux-Kernel anweisen, bestimmte Kerne einfach zu vermeiden, es sei denn, er wird ausdrücklich aufgefordert, sie zu verwenden.

Die Idee ist, dass ich eine Handvoll Kerne (die Maschine hat 6 physische Kerne) für das Benchmarking beiseite legen und eine CPU-Maske verwenden könnte, um nur Benchmark-Prozesse für die angegebenen Kerne zuzulassen.

Ist das machbar?

Lajos Nagy
quelle
Was sind die tatsächlichen Benchmarks, die Sie ausführen möchten?
Basile Starynkevitch
Verwandte: Verwenden nur eines CPU-Kerns
ilkkachu

Antworten:

5

Sie können einige CPU-Kerne mithilfe von isolcpusParametern von der Kernel-Planung isolieren . Fügen Sie diesen Parameter Ihrer grub.conf hinzu und starten Sie ihn neu, damit er wirksam wird.

VenkatC
quelle
2
Der Link ist tot. Am besten fügen Sie ein Beispiel direkt in die Antwort ein.
pchaigno
4

Sie möchten eine gewisse Prozessoraffinität (oder CPU-Affinität ).

Der relevante Systemaufruf ist sched_setaffinity (2) , aber Sie sollten ihn über pthread_set_affinity_np (3) verwenden, wenn Sie Ihre Benchmarks dafür codieren möchten.

Der zugehörige Befehl ist Task-Set (1) und kann für die Befehle verwendet werden, die Sie vergleichen möchten (oder für Ihre Shell).

Achten Sie nach Möglichkeit darauf, dass die Maschine durch andere Aufgaben, die nicht mit dem Benchmark zusammenhängen, nicht stark belastet wird.

Verwenden Sie alternativ einen Hypervisor wie Xen und starten Sie Ihr Linux als Gastbetriebssystem für diesen Hypervisor. Konfigurieren Sie dann xen, dass nur einige eingeschränkte CPU-Kerne verwendet werden (ich kenne die genauen Details nicht, die Sie herausfinden müssen). Auf Debian (und verwandte) Distributionen, können Sie Pakete wie installieren xen-linux-system-amd64, xen-hypervisor-amd64, xen-utilsetc. (Ich verwende auf Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, xen-utils-4.5 etc ...).

Möglicherweise gibt es eine Möglichkeit, Ihren Linux-Kernel zu konfigurieren (möglicherweise zum Zeitpunkt der Kernel-Kompilierung oder durch Übergabe bestimmter Argumente an den Kernel über den Grub-Loader), um die Anzahl der verwendbaren Kerne zu beschränken.

Natürlich ist es besser, wenn irgendein Programm -zB auf einem Desktop - Linux - PC, Benchmarking darauf zu achten, die viele außerhalb laufenden Prozessen (Verwendung zu vermeiden ps auxw, pstree -p, topdiese zu finden). Schließen und beenden Sie zumindest die meisten interaktiven Anwendungen (Browser wie Firefox, E-Mail, Editor, IDEs wie Eclipse) und behalten Sie nur eine kleine Anzahl von Terminals zum Benchmarking bei. Sie können sogar im Batch-Modus ein Benchmarking durchführen (mit batchoder atzum Ausführen der Benchmarks), während Sie noch nicht einmal angemeldet sind (es werden also keine GUI-Sitzungen à la Gnome oder KDE oder Xfce usw. ausgeführt).

Basile Starynkevitch
quelle
Es reicht nicht aus, die Affinität der Aufgaben zum Benchmark festzulegen. Sie müssen auch andere Aufgaben fernhalten. Was Ihr Hypervisor-Vorschlag tut, aber auf sehr hartnäckige Weise.
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Warum müssen andere Aufgaben für Benchmarking-Zwecke ferngehalten werden? In der Praxis ist der PC beim Benchmarking oft ziemlich untätig ... Bei einem teuren Server sieht das anders aus!
Basile Starynkevitch
Zum Beispiel, weil Sie auf Ihrem Desktop-PC ein Benchmarking durchführen, das auch Ressourcen für Firefox, Eclipse und andere sehr anspruchsvolle Aufgaben ausgibt.
Gilles 'SO - hör auf böse zu sein'
Auf Ihrem eigenen Desktop-PC können Sie die aufwändigsten Aufgaben (z. B. Schließen und Beenden von Firefox und Eclipse) beim Benchmarking ganz einfach stoppen. Sie können die Benchmarks sogar im Batch-Modus (mit atoder batch) ausführen, während Sie nicht angemeldet sind (führen Sie also keine aufwendige Sitzung aus).
Basile Starynkevitch