Linux: zamknięcie rdzenia procesora zamiast stanu uśpienia

10

W systemie Linux można zamknąć rdzenie procesora (lub procesory fizyczne) za pomocą echa 0> / sys / devices / system / cpu / cpu1 / online Zakładając, że sprzęt całkowicie wyłącza procesor i odcina zasilanie, czy nie lepiej byłoby go wyłączyć rdzenie całkowicie zamiast polegać na różnych stanach uśpienia procesora?

Aby zilustrować tę zasadę, pomyślałem o czymś podobnym (pseudokod) dla systemu z czterema procesorami:

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
Waxhead
źródło

Odpowiedzi:

6

Ustawienie statusu online rdzenia procesora informuje program planujący proces, aby nie używał tego rdzenia do żadnych procesów. Na poziomie sprzętowym rdzeń po prostu siedzi bezczynnie (robi NOP), ale nadal jest zasilany. Oszczędza to energię, ale nie oszczędza prawie tyle samo energii, co uśpienie komputera. Dlaczego?

Cóż, Twoja płyta główna, procesor i GPU nadal działają ! Po uśpieniu komputera wszystkie te komponenty są dosłownie pozbawione zasilania i zużywana jest wystarczająca moc, aby utrzymać pamięć RAM przy życiu (rzędu kilku watów).

Ponownie, choć zgadzam się, że pozwoli to zaoszczędzić energię, nawet wyłączenie połowy rdzeni procesora może zmniejszyć zużycie energii przez procesor o połowę (chociaż w rzeczywistości możesz zaoszczędzić tylko 30-40%, ponieważ rdzenie te nadal muszą pozostać bezczynne), ale jest to dalekie od jedynego elementu w systemie wykorzystującego energię. Nawet jeśli zaoszczędzisz w ten sposób 50 W, cały komputer nadal pobiera znacznie więcej mocy niż zwykłe waty w trybie uśpienia.


Ostatnie przemyślenia: choć zgadzam się, że jest to świetny pomysł w praktyce, dlatego też wielu producentów procesorów stosuje dynamiczne skalowanie częstotliwości („krok prędkości” Intela) z obsługą Linuksa. Możesz uzyskać lepszą ogólną wydajność, a także wydajność energetyczną, ustawiając te częstotliwości bardziej odpowiednio do swoich potrzeb. Można to zrobić zarówno sprzętowo (ustawienia BIOS), jak i oprogramowanie (jądro Linuksa pozwala modyfikować niektóre parametry procesora, zobacz link, który zamieściłem powyżej lub tę stronę, aby uzyskać szczegółowe informacje).

Działa to, ponieważ poniżej przedstawiono ogólne równanie zużycia energii przez obwód CMOS:

P = CV 2 f, gdzie C = pojemność (przy założeniu stałej), V = napięcie, a f = częstotliwość.

Zatem podzielenie częstotliwości przez 2 spowoduje zmniejszenie o połowę pierwotnego zużycia energii. Dzielenie napięcia przez 2 spowoduje zmniejszenie zużycia energii do 1/4 oryginału.

Przełom
źródło
Przynajmniej na procesorach kompatybilnych z x86 / amd64 założyłem, że jeśli to możliwe, instrukcja HLT byłaby łatwiejsza na CPU niż NOP. Odniosłem się również do różnych stanów uśpienia (lub poprawnie stanów procesora C0-C3 (ACPI)). Zastanawiałem się także nad systemami, które działają zawsze tam, gdzie nie można uśpić całego systemu. W takim przypadku jestem ciekawy, czy sprzęt rzeczywiście odcina moc procesora i czy jest to w ogóle zaimplementowane w niektórych konfiguracjach. Dziękuję za odpowiedź, ale pozwolę, by pytanie pozostało otwarte dłużej.
Waxhead
@Waxhead po odcięciu zasilania procesora cały komputer jest logicznie „wyłączony” (i można go ponownie włączyć tylko za pomocą zewnętrznego przerwania), nawet jeśli inny sprzęt jest nadal zasilany. Być może masz rację, używając HLTzamiast NOP, ale wiąże się to z użyciem przerwań (czyli jak wyprowadzić procesor ze stanu zatrzymania). Zamiast odcięcia zasilania większość procesorów dynamicznie zmienia prędkość zegara i napięcie (dodane równanie do mojej odpowiedzi).
Przełom
Zrobiłem trochę więcej badań na ten temat. Okazuje się, że Linux faktycznie obsługuje hotplug procesora. W takim przypadku JEŻELI BIOS / płyta główna go obsługuje, możesz faktycznie zamknąć procesor (y) i wymienić je, np. Zgrać procesor z gniazda podczas działania systemu i go wymienić. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu, jeśli się nie mylę, to zmniejszy moc procesora, JEŚLI BIOS / płyta główna go obsługują.
Waxhead,
@Breakthrough Dziękujemy za fajny post. Czy możesz podać dokumenty referencyjne na temat tego, w jaki sposób możemy ustawić procesor w stanie niskiego poboru mocy (bez systemu ponownego uruchamiania) i możemy go odzyskać, gdy jest to wymagane
iDebD_gh
@Breakthrough „rdzeń po prostu siedzi bezczynnie (wykonując NOP),„ Kiedy robimy offline na konkretnym rdzeniu procesora, znika on z „/ proc / interrupts”. Jak możesz powiedzieć, że rdzeń przetwarza operację NOP?
iDebD_gh