Wymuszone podkręcanie w nocy

23

Mój pulpit jest cały czas włączony. Działa jako serwer, a także wykonuje inne prawie niezbędne zadania domowe. W ciągu dnia korzysta z ustawienia procesora OnDemand. Zasadniczo to po prostu skaluje częstotliwość procesora, gdy jej potrzebuje i działa to naprawdę dobrze dla mnie.

W nocy krąży wokół. Oczywiście przez większość czasu pracuje na biegu jałowym z małą mocą, ale od czasu do czasu przyspieszy, aby coś zrobić. Wolałbym, żeby pozostało w PowerSave, a zadania musiały trwać trochę dłużej.

Dodatkowo mam kartę Nvidia (GTX 580), która może zużywać mniej więcej tyle samo mocy, co mała afrykańska wioska zużywa w roku, kiedy chce (gniewnie w Minecraft). Z nieznanych przyczyn (niewątpliwie coś dzieje się na pulpicie), to się wzmaga, fani brzmią, jakby ładowali się, by wystrzelić lasery w kosmos. W nocy chciałbym podkręcić kartę tak daleko, jak to możliwe.

Zastanawiałem się nad prostym skryptem crona do uruchomienia przez root, ale moje godziny pracy są zmienne. W zeszłym tygodniu miałem prawie 70 godzin pracy, więc wstawałem bardzo wcześnie i wciąż bardzo późno każdego dnia. Gdyby system trąbił w trybie super-podkręcania, byłbym wściekły. Czy jest coś, co mogę powiedzieć, „podkręcenie, jeśli:

  • Jest między 22:00 a 9:00
  • Przez 10 minut nie było żadnej aktywności myszy / klawiatury
  • Nie ma odtwarzanego filmu

Jeśli jeden z tych warunków nie jest spełniony, podkręcenie musi zostać natychmiast przywrócone . Nie chcę czekać, aż pojawi się skrypt cron, aby obudzić komputer ze snu. Podobnie, gdy tylko wszystkie się spełnią, powinien wrócić do snu.

Jakie są moje opcje?

Oli
źródło
Której wersji używasz teraz? Dopóki nie będę mógł wrócić do domu na maszynę, wspomnę, że powinieneś być w stanie przechwytywać zdarzenia za pomocą zdarzeń acpi lub pakietu pm-tools.
hometoast

Odpowiedzi:

19

Oto program, który robi to, co chcesz:

#!/usr/bin/env python
# coding: utf8

import time
import sys
import commands


USER = commands.getoutput("cat /var/log/auth.log | grep " +
    sys.argv[0]).split("sudo:")[1].split()[0].strip()


def is_idle():
    return int(commands.getoutput("xprintidle")) >= 10 * 60 * 1000

def is_night():
    return time.localtime().tm_hour in (22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

def is_stumm():
    return "RUNNING" not in commands.getoutput(("sudo -u %s pacmd " +
        "list-sinks | grep RUNNING") % USER)


def main():
    powersave = False
    while 1:
        if is_idle() and is_night() and is_stumm():
            if not powersave:
                print "going into powersave mode"
                commands.getoutput("echo powersave > " +
                    "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor")
                powersave = True
        else:
            if powersave:
                print "going into ondemand mode"
                commands.getoutput("echo ondemand > " +
                    "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor")
                powersave = False
        time.sleep(0.5)

if __name__ == '__main__':
    assert commands.getstatusoutput("xprintidle")[0] == 0, (
        "you need to `sudo apt-get install xprintidle`")
    assert commands.getoutput("whoami") == "root", (
        "you need to be root to run this program")
    main()

Zwróć uwagę na swoje preferencje:

  • ... >= 10 * 60 * 1000
  • ... tm_hour in (22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9) i
  • "RUNNING" not in ...

Korzystam z pulseaudio, aby dowiedzieć się, czy film jest odtwarzany. Wpływa to również na muzykę.

Stefano Palazzo
źródło
5

Możesz wymusić skalowanie procesora za pomocą:

cpufreq-selector -f [frequency]

Istnieje kilka dodatkowych opcji (tj. Konkretna jednostka centralna lub wybranie zarządzania zamiast szybkości). Zakłada się, że Twoja płyta główna / jednostka centralna pozwala Ubuntu na ręczne kontrolowanie skalowania (najwyraźniej nie zawsze tak jest).

Resztę można zastosować za pomocą skryptu, jednak wymaga się od niego ^ _ ^. Jeśli potrzebujesz natychmiastowej odpowiedzi, myślę, że musisz okresowo sprawdzać system. Z mojej, choć ograniczonej, wiedzy nie ma nic, co oznajmiłoby warunki, które określiłeś.

Jednak miejscem do rozpoczęcia badań jest wygaszacz ekranu. Włącza się po określonym czasie bezczynności (co byłoby również prawdą o 22.00-9.00) i może zostać zahamowany przez graczy filmowych. Jeśli stworzyłeś wygaszacz ekranu, który zmniejszał procesor podczas inicjowania i przywracałeś go po przebudzeniu, to masz to, czego chcesz.

Niestety to tyle, o ile mogę cię zabrać, nie wiedząc nic o wygaszaczach ekranu i ich działaniu.

Powodzenia.

thomasmichaelwallace
źródło
4

W rzeczywistości nie możesz zaoszczędzić więcej mocy, korzystając z gubernatora powerave .

W zależności od obciążenia, szybkie ukończenie elementu pracy przez zużywanie nieco większej mocy, a następnie powrót do głębokiego snu zamiast pracy przez dłuższy czas przy zmniejszonym zużyciu energii może dać lepsze wyniki.

W zależności od aplikacji warto również zainstalować dedykowany serwer o niższych wymaganiach energetycznych i odpowiednio dobranym zasilaczu do tego obciążenia, a po prostu wyłączyć pulpit w nocy.

Simon Richter
źródło
1
Czasami po prostu chcesz, aby komputer był cichy, szczególnie w nocy ...
Maxime R.
Jeśli chcesz być cicho, najlepiej nie uruchamiać systemu. Mam dość głośną maszynę do codziennej pracy i serwer w szafie miotły do ​​zadań w tle, ten drugi ma mniejszy zasilacz (=> mniej ciepła odpadowego), procesor (=> mniej ciepła odpadowego), kartę graficzną (dostajesz pomysł), ... i używa gubernatora na żądanie . W nocy nie ma hałasu w mojej sypialni, a zużycie energii przez serwer wynosi około jednej trzeciej tego, co zjada pulpit w stanie bezczynności, więc nadal oszczędzam pieniądze.
Simon Richter,
Jasne, zgadzam się, ale w tym konkretnym przypadku Oli używa tej samej maszyny co serwer i komputer stacjonarny.
Maxime R.,
3

powernap jest przydatnym narzędziem do takich rzeczy. Miłą rzeczą jest to, że patrzy na tabelę procesów, aby sprawdzić, czy system jest zajęty, a nie na bezczynności przy klawiaturze.

Czy zmierzyłeś oszczędność energii dla każdego gubernatora? Podobnie jak Simon jestem sceptyczny, że suma ta byłaby znaczna w porównaniu z szybszym wykonaniem pracy lub próbą dostrojenia czegoś takiego jak karta graficzna potwora.

Powernap można skonfigurować tak, aby po prostu uruchamiał przełącznik gubernatora, a jeśli Twój sprzęt go obsługuje, użyj funkcji Wake On Lan (WOL), aby zrobić drzemkę w środku nocy, dopóki nie będzie potrzebna.

Jorge Castro
źródło
1

Jeśli chodzi o procesor, możesz po prostu przełączyć regulator na powerave za pomocą, na przykład, apletu monitorującego skalowanie częstotliwości procesora. Karta graficzna to inna historia. Wiem, że moja karta ATI ma pokrętło w / sys do regulacji wydajności między niskim, średnim i wysokim, ale manipulowanie nimi nie wydaje się mieć żadnej różnicy i często powoduje niestabilność wideo.

psusi
źródło
1

cpufreqd został zaprojektowany z myślą o konkretnym problemie, który masz, możesz tworzyć profile dzienne i nocne oraz ustawiać reguły w oparciu o uruchomione programy.

Lie Ryan
źródło