Linux: Herunterfahren des CPU-Kerns anstelle des Ruhezustands


10

Unter Linux können Sie CPU-Kerne (oder physische CPUs) mit Echo 0> / sys / Geräte / System / CPU / CPU1 / Online herunterfahren. Angenommen, die Hardware schaltet die CPU vollständig aus und unterbricht die Stromversorgung, wäre es nicht besser, sie zu deaktivieren die Kerne ganz, anstatt sich auf die verschiedenen Ruhezustä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

Antworten:


6

Durch Festlegen des Online-Status des CPU-Kerns wird der Prozessplaner lediglich angewiesen, diesen Kern nicht für Prozesse zu verwenden. Auf Hardwareebene sitzt der Kern einfach im Leerlauf (macht NOPs), ist aber immer noch mit Strom versorgt. Dies spart zwar Strom, aber nicht annähernd so viel Strom wie das Einschalten 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 Strom verwendet, um Ihren RAM am Leben zu erhalten (in der Größenordnung von ein paar Watt).

Auch wenn ich damit einverstanden bin, wird Strom gespart, kann sogar das Ausschalten der Hälfte Ihrer CPU-Kerne den Stromverbrauch des Prozessors halbieren (obwohl Sie in Wirklichkeit 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 verbraucht. Selbst wenn Sie auf diese Weise 50 W sparen, verbraucht Ihr gesamter Computer im Ruhemodus immer noch viel mehr Strom als nur Watt.


Letzte Gedanken: Ich stimme zu, dass dies in der Praxis eine großartige Idee ist, aber aus diesem Grund bieten viele CPU-Hersteller auch eine dynamische Frequenzskalierung (Intels "Speed ​​Step") mit Unterstützung für Linux an. Sie können eine bessere Gesamtleistung und Energieeffizienz erzielen, indem Sie diese Frequenzen besser auf Ihre Bedürfnisse einstellen. Dies kann sowohl in der Hardware (BIOS-Einstellungen) als auch in der Software erfolgen (mit dem Linux-Kernel können Sie einige CPU-Parameter ändern, siehe den oben angegebenen Link oder diese Website für Details).

Dies funktioniert, da das Folgende die generische Gleichung für den Stromverbrauch einer CMOS-Schaltung ist:

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

Wenn Sie also die Frequenz durch 2 teilen, wird der ursprüngliche Stromverbrauch halbiert. Durch Teilen der Spannung durch 2 wird der Stromverbrauch auf 1/4 des Originals reduziert.


Zumindest auf x86 / amd64-kompatiblen Prozessoren würde ich davon ausgehen, dass ein HLT-Befehl für die CPU nach Möglichkeit einfacher ist als ein NOP. Ich bezog mich auch auf die verschiedenen Schlafzustände (oder korrekt Prozessorzustände C0-C3 (ACPI)). Außerdem habe ich mehr über Systeme nachgedacht, die immer dort ausgeführt werden, wo das gesamte System nicht in den Ruhezustand versetzt werden kann. In diesem Fall bin ich gespannt, ob die Hardware tatsächlich die Stromversorgung der CPU unterbricht und ob dies in einigen Konfigurationen überhaupt implementiert ist. Vielen Dank für Ihre Antwort, aber ich werde die Frage etwas länger offen lassen.
Waxhead

@Waxhead Sobald Sie die CPU ausgeschaltet haben, ist der gesamte Computer logisch "ausgeschaltet" (und kann nur über einen externen Interrupt wieder eingeschaltet werden), selbst wenn andere Hardware noch mit Strom versorgt wird. Möglicherweise haben Sie auch Recht, wenn Sie HLTanstelle von verwenden NOP, aber dies hängt mit der Verwendung von Interrupts zusammen (wodurch ein Prozessor aus dem angehaltenen Zustand gebracht wird). Anstatt die Leistung zu unterbrechen, ändern die meisten Prozessoren dynamisch Taktrate und Spannung (Gleichung zu meiner Antwort hinzugefügt).
Durchbruch

Ich habe mehr darüber recherchiert. Es stellt sich heraus, dass Linux tatsächlich den Hotplug einer CPU unterstützt. In diesem Fall können Sie, wenn das BIOS / Motherboard dies unterstützt, die CPU (s) tatsächlich herunterfahren und ersetzen, z. B. die CPU bei laufendem System aus dem Sockel ziehen und austauschen. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu Wenn ich mich nicht irre, würde dies die Stromversorgung einer CPU unterbrechen, wenn das BIOS / Motherboard dies unterstützt.
Waxhead

@ Durchbruch Danke für deinen schönen Beitrag. Können Sie einige Referenzdokumente zu Details darüber bereitstellen, wie wir die CPU in den
Energiesparmodus versetzen

@Breakthrough "Der Kern sitzt einfach im Leerlauf (macht NOPs)." Wenn wir auf einem bestimmten CPU-Kern offline arbeiten, verschwindet er aus "/ proc / interrupts". Wie können Sie sagen, dass der Core den NOP-Betrieb verarbeitet?
iDebD_gh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.