Linux: Herunterfahren des CPU-Kerns anstelle des Ruhezustands

7465
Waxhead

Unter Linux können Sie CPU-Kerne (oder physische CPUs) mit Echo 0> / sys / devices / system / cpu / cpu1 / online herunterfahren. Wenn Sie voraussetzen, dass die Hardware die CPU vollständig abschaltet und die Stromversorgung unterbricht, wäre es nicht besser, sie zu deaktivieren die Kerne ganz, anstatt sich auf die verschiedenen Schlafzustände eines Prozessors zu verlassen?

Um das Prinzip zu veranschaulichen, dachte ich etwas in diese Richtung (Pseudocode) für ein System mit vier CPUs:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online  if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online  if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online 
10

1 Antwort auf die Frage

6
Breakthrough

Wenn Sie den Online-Status des CPU-Kerns festlegen, wird der Prozess-Scheduler nur angewiesen, diesen Kern für keine Prozesse zu verwenden. Auf Hardwareebene befindet sich der Kern einfach im Leerlauf (macht NOPs), ist aber weiterhin mit Strom versorgt. Dies spart zwar Energie, aber nicht so viel Energie wie den Ruhezustand des Computers. Warum?

Nun, Ihr Motherboard, Ihre CPU und Ihre GPU laufen noch ! Wenn Sie den Computer in den Ruhezustand versetzen, werden alle diese Komponenten buchstäblich nicht mit Strom versorgt, und es wird gerade genug Energie verwendet, um den RAM-Speicher aufrechtzuerhalten (in der Größenordnung von ein paar Watt).

Auch wenn ich damit einverstanden bin, dass Energie gespart wird, kann der Stromverbrauch des Prozessors sogar halbiert werden, wenn Sie die Hälfte Ihrer CPU-Kerne abschalten (obwohl Sie in der Realität möglicherweise nur 30-40% sparen, da diese Kerne noch im Leerlauf sitzen müssen), aber Dies ist bei weitem nicht die einzige Komponente im System, die Strom verwendet. Selbst wenn Sie dadurch 50 Watt sparen, verbraucht der gesamte Computer im Schlafmodus immer noch viel mehr Strom als nur Watt.


Abschließende Gedanken: Ich stimme zu, dass dies eine großartige Idee in der Praxis ist, weshalb viele CPU-Hersteller auch dynamische Frequenzskalierung (Intels "Speed ​​Step") mit Unterstützung für Linux verwenden. Sie können sowohl die Gesamtleistung als auch die Energieeffizienz verbessern, indem Sie diese Frequenzen besser an Ihre Bedürfnisse anpassen. Dies kann sowohl in der Hardware (BIOS-Einstellungen) als auch in der Software erfolgen (der Linux-Kernel ermöglicht es Ihnen, einige CPU-Parameter zu ändern. Weitere Informationen finden Sie unter dem Link, den ich oben gepostet habe, oder auf dieser Website ).

Dies funktioniert, weil die generische Gleichung für den Energieverbrauch einer CMOS-Schaltung die folgende ist:

P = CV 2 f, wobei C = Kapazität (angenommen fest), V = Spannung und f = Frequenz.

Wenn Sie die Frequenz durch 2 teilen, wird die Hälfte des ursprünglichen Stromverbrauchs halbiert. Durch Teilen der Spannung durch 2 wird der Stromverbrauch auf 1/4 des Originals reduziert.

Zumindest bei x86 / amd64-kompatiblen Prozessoren würde ich davon ausgehen, dass ein HLT-Befehl nach Möglichkeit für die CPU einfacher ist als ein NOP. Ich bezog mich auch auf die verschiedenen Schlafzustände (oder richtig Prozessorzustände C0-C3 (ACPI)). Ich habe auch mehr über Systeme nachgedacht, die immer dort laufen, wo das gesamte System nicht in den Ruhezustand versetzt werden kann. In diesem Fall bin ich neugierig, ob die Hardware die CPU tatsächlich unterbricht und ob dies in einigen Konfigurationen überhaupt implementiert ist. Danke für Ihre Antwort, aber ich lasse die Frage noch ein bisschen offen bleiben. Waxhead vor 12 Jahren 0
@Waxhead Sobald Sie die CPU unterbrechen, ist der gesamte Computer logisch "ausgeschaltet" (und kann nur über einen externen Interrupt wieder eingeschaltet werden), auch wenn andere Hardware noch mit Strom versorgt wird. Möglicherweise haben Sie auch Recht, "HLT" anstelle von "NOP" zu verwenden, was jedoch auf die Verwendung von Interrupts zurückzuführen ist (wie ein Prozessor aus dem angehaltenen Zustand versetzt wird). Anstatt die Stromversorgung zu unterbrechen, ändern die meisten Prozessoren die Taktrate und die Spannung dynamisch (hinzugefügt zu meiner Antwort). Breakthrough vor 12 Jahren 0
Ich habe noch etwas recherchiert. Es stellt sich heraus, dass Linux Hotplug einer CPU tatsächlich unterstützt. Wenn das BIOS / Motherboard dies unterstützt, können Sie die CPU (s) tatsächlich herunterfahren und austauschen, z. B. die CPU aus dem Sockel ziehen, während das System läuft, und sie austauschen. Ref: http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/ Wenn ich mich nicht irre, würde dies den Stromverbrauch einer CPU reduzieren, wenn das BIOS / Motherboard dies unterstützt. Waxhead vor 11 Jahren 0
@Breakthrough Danke für deinen schönen Beitrag. Können Sie einige Referenzdokumente bereitstellen, in denen beschrieben wird, wie Sie die CPU in den Energiesparmodus versetzen können (ohne Neustart des Systems) und sie bei Bedarf zurückbekommen iDebD_gh vor 7 Jahren 0
@Breakthrough "der Kern ist einfach im Leerlauf (macht NOPs)", "Wenn wir einen bestimmten CPU-Kern offline betreiben, verschwindet er von" / proc / interrupts ". Wie können Sie sagen, dass der Kern eine NOP-Operation verarbeitet? iDebD_gh vor 7 Jahren 0