it-swarm.com.de

Wie bekomme ich Isolcpus-Kernel-Parameter mit Precise 12.04 AMD64 zum Laufen?

Ich habe dieses Zeug getestet, um einige CPUs in einem Host mit zwei Intel E5645 zu reservieren, aber ich kann es aus irgendeinem Grund nicht zum Laufen bringen. Schritte, denen ich gefolgt bin:

  1. Bearbeiten Sie/etc/default/grub und fügen Sie isolcpus = 0,1 zu GRUB_CMDLINE_LINUX_DEFAULT hinzu

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=0,1"

  2. Führen Sie update-grub aus

  3. Starten Sie neu

Danach enthüllt cat/proc/cmdline:

BOOT_IMAGE=/boot/vmlinuz-3.2.0-26-generic root=UUID=52cfedad-40be-41b9-9f88-c282a7ae3f24 ro quiet splash isolcpus=0,1 vt.handoff=7

Getestet mit Stress:

apt-get install stress && stress -c 24

Überwacht mit top und Drücken von 1, um die einzelnen CPU-Statistiken anzuzeigen. Bisher sind keine CPUs vom Scheduler isoliert und alle von Stress betroffen.

Cpu0  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu8  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu9  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu10 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu11 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu12 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu13 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu14 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu15 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu16 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu17 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu18 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu19 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu20 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu21 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu22 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu23 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa

Getestet das gleiche Zeug in CentOS 6 x86_64 und es funktioniert wie erwartet.

Suchte in der Ubuntu- und Linux-Bugs-Datenbank im Launchpad, fand aber bisher nichts.

Bin ich dumm oder vermisse ich etwas? Hinweise?

Vielen Dank!

Refs:

http://www.kernel.org/doc/Documentation/kernel-parameters.txt

5
rubiojr

SMT (Hyper-Threading) im BIOS deaktiviert, aus- und wieder eingeschaltet, erneut mit deaktiviertem HT getestet und Isolcpus funktioniert wie erwartet.

SMT im BIOS wieder aktiviert, aus- und wieder eingeschaltet, funktioniert weiterhin wie erwartet.

Auf jeden Fall nicht die beste Antwort, die man erwarten kann, aber es hat trotzdem bei mir funktioniert.

4
rubiojr

isolcpus isloate nur von der Aktivität ceratin user-space und isoliert die CPU nicht von der Kernelaktivität (Watchdogs, kworkers, linux stack ...). Darüber hinaus sollten Sie CPU 0 nicht isolieren (mit zahlreichen dedizierten Aktivitäten wie USB-Erkennung, ACPI-Timer-Einrichtung, WRMSR/RDMSR-Versand)

Sie können überprüfen, welche Prozesse auf welchen Kernen ausgeführt werden, indem Sie alle Threads sortiert nach Kernnummer anzeigen.

ps -aFeL | cut -c 48- | sort -n

Sie müssen auch die Affinitäten in/proc/irq/* überprüfen und ändern, um zu versuchen, die Interrupt-Affinitäten zu ändern.

Sie könnten dynamisch CPU sparen und "den größten Teil" der Linux-Kernel-Aufgabe mit dem cpuset-Tool entfernen.

anstatt von

taskset -c 3-7,11-15 program args

versuche dies

Sudo apt install cpuset
cset set --list
cset shield -c 3-7,11-15
cset set --list
cset shield -e program -- args  

Und dann können Sie den Unterschied erkennen

ps -aFeL | cut -c 48- | sort -n

Beim Ausführen dieser 2 Befehle

cset shield -e stress -- -c 16
stress -c 16
1
Pierre

Tatsächlich scheint sich isolcpus (nach meinen Tests) auf AMD- und Intel-CPUs anders zu verhalten.

Kernel: 4.10.0-38-generic x86_64 (64 bit) auf beiden

/etc/default/grub hat isolcpus=2 zum GRUB_CMDLINE_LINUX_DEFAULT= line hinzugefügt, ähnlich wie beim OP. Dann Sudo update-grub und neu starten.

  • Auf Intel Core i7 Dual Core mit Hyperthreading zeigt ps -eF | grep " 2 ", dass auf Hyperthread 2 nur sehr wenige Root-Prozesse gestartet werden (und alle scheinen/2 nach dem CMD zu haben).

  • Auf AMD-Quad-Core-Systemen ohne Hyperthreading werden viele Root-Prozesse auf Core 2 gestartet (und die meisten haben nach dem CMD nicht/2).

Ist dies ein Fehler, der wahrscheinlich behoben wird, oder eine Funktion?

0
Graham