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?
linux-kernel
cpu
benchmark
Lajos Nagy
quelle
quelle
Antworten:
Sie können einige CPU-Kerne mithilfe von
isolcpus
Parametern von der Kernel-Planung isolieren . Fügen Sie diesen Parameter Ihrer grub.conf hinzu und starten Sie ihn neu, damit er wirksam wird.quelle
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 installierenxen-linux-system-amd64
,xen-hypervisor-amd64
,xen-utils
etc. (Ich verwende auf Debian / Sidxen-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
,top
diese 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 (mitbatch
oderat
zum 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).quelle
at
oderbatch
) ausführen, während Sie nicht angemeldet sind (führen Sie also keine aufwendige Sitzung aus).