Nachts gewaltsam übertakten

23

Mein Desktop bleibt die ganze Zeit eingeschaltet. Es fungiert als Server und führt auch andere wichtige Haushaltsaufgaben aus. Tagsüber wird die OnDemand-CPU-Einstellung verwendet. Dies skaliert im Wesentlichen nur die CPU-Frequenz, wie sie benötigt wird, und dies funktioniert wirklich gut für mich.

In der Nacht fliegt es herum. Natürlich läuft es die meiste Zeit im Leerlauf mit einer geringen Leistung, aber gelegentlich läuft es hoch, um etwas zu tun. Ich würde es vorziehen, wenn es auf PowerSave bleibt und die Aufgaben nur etwas länger dauern müssen.

Außerdem habe ich eine Nvidia-Karte (GTX 580), die ungefähr so ​​viel Strom verbraucht, wie ein kleines afrikanisches Dorf in einem Jahr verbraucht, wenn es möchte (blickt Minecraft an). Aus unbekannten Gründen (zweifellos passiert etwas auf dem Desktop) läuft dies an und die Fans scheinen aufzuladen, um Laser in den Weltraum abzufeuern. Nachts möchte ich die Karte so weit wie möglich übertakten.

Ich habe mir ein einfaches Cron-Skript überlegt, um dies durchzusetzen, aber meine Arbeitszeiten sind variabel. Letzte Woche hatte ich fast 70 Stunden Arbeitswoche, also war ich jeden Tag sehr früh auf und immer noch sehr spät auf. Wenn das System im Super-Underclock-Modus mitgehupt hätte, wäre ich wütend geworden. Gibt es etwas, das ich tun könnte, um zu sagen: "Unter Uhr, wenn:

  • Es ist zwischen 22 Uhr und 9 Uhr
  • 10 Minuten lang gab es keine Maus- / Tastaturaktivität
  • Es wird kein Film abgespielt

Wenn eine dieser Bedingungen nicht erfüllt ist, muss die Unteruhr sofort zurückgesetzt werden . Ich möchte nicht warten, bis ein Cron-Skript erscheint, um den Computer aus dem Schlaf zu erwecken. Ebenso sollte es wieder einschlafen, sobald all dies wahr wird.

Welche Möglichkeiten habe ich?

Oli
quelle
Auf welcher Version bist du gerade? Bis ich zu meiner Maschine nach Hause komme, erwähne ich, dass Sie Ereignisse mit acpi events oder dem pm-tools-Paket einbinden können sollten.
Hometoast

Antworten:

19

Hier ist ein Programm, das macht, was Sie wollen:

#!/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()

Notieren Sie Ihre Präferenzen:

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

Ich benutze pulseaudio, um herauszufinden, ob ein Film abgespielt wird. Dies betrifft auch die Musik.

Stefano Palazzo
quelle
5

Sie können die CPU-Skalierung erzwingen, indem Sie Folgendes verwenden:

cpufreq-selector -f [frequency]

Es gibt ein paar weitere Optionen (z. B. eine bestimmte CPU oder die Auswahl einer Governance anstelle einer Geschwindigkeit). Dies setzt voraus, dass Ihr Motherboard / Ihre CPU es Ubuntu ermöglicht, die Skalierung manuell zu steuern (anscheinend ist dies nicht immer der Fall).

Der Rest kann mithilfe eines Skripts angewendet werden, Sie stellen jedoch hohe Anforderungen an das Skript ^ _ ^. Wenn Sie eine sofortige Antwort benötigen, von der ich denke, dass Sie Ihr System regelmäßig abfragen müssen. Von meinem, zum Teil etwas eingeschränkten, Wissen gibt es nichts, was die von Ihnen angegebenen Bedingungen ankündigt.

Ein Ort, um Nachforschungen anzustellen, ist ein Bildschirmschoner. Dies wird nach einer festgelegten Zeit der Inaktivität (die auch zwischen 22:00 und 09:00 Uhr zutreffen würde) aktiviert und kann von Movie-Playern gesperrt werden. Wenn Sie einen Bildschirmschoner erstellt haben, der die CPU beim Initialisieren verkleinert und beim Wecken wiederherstellt, haben Sie das, was Sie wollen.

Leider kann ich Sie so weit bringen, dass ich nichts über Bildschirmschoner und deren Funktionsweise weiß.

Viel Glück.

thomasmichaelwallace
quelle
4

Mit dem Powersave- Regler können Sie möglicherweise nicht mehr Strom sparen .

Abhängig von Ihrer Arbeitsbelastung können Sie bessere Ergebnisse erzielen, wenn Sie ein Arbeitselement schnell beenden, indem Sie etwas mehr Energie verbrauchen und dann in den Tiefschlafzustand zurückkehren, anstatt längere Zeit mit verringertem Energieverbrauch zu arbeiten.

Je nach Ihrer Anwendung kann es sich auch lohnen, einen dedizierten Server mit geringerem Stromverbrauch und einem entsprechend dimensionierten Netzteil für diese Last zu installieren und den Desktop nachts einfach auszuschalten.

Simon Richter
quelle
1
Manchmal möchten Sie einfach, dass Ihr Computer leise bleibt, besonders nachts.
Maxime R.
Wenn Sie Ruhe wünschen, ist es am besten, das System überhaupt nicht laufen zu lassen. Ich habe eine ziemlich laute Maschine für meine tägliche Arbeit und einen Server im Besenschrank für Hintergrundaufgaben, letzterer hat ein kleineres Netzteil (=> weniger Abwärme), CPU (=> weniger Abwärme), Grafikkarte (Sie bekommen die Idee), ... und nutzt den On-Demand- Gouverneur. In meinem Schlafzimmer ist nachts kein Lärm zu hören, und der Stromverbrauch für den Server beträgt ungefähr ein Drittel des Stromverbrauchs des Desktops im Leerlauf, sodass ich immer noch Geld spare.
Simon Richter
Klar, ich stimme zu, aber in diesem speziellen Fall verwendet Oli den gleichen Computer wie Server und Desktop.
Maxime R.
3

Powernap ist ein praktisches Tool für solche Dinge. Das Schöne daran ist, dass Sie in Ihrer Prozesstabelle nachsehen, ob Ihr System ausgelastet ist, und nicht, ob Sie die Tastatur in Anspruch nehmen.

Haben Sie die Stromersparnis für jeden Gouverneur gemessen? Wie bei Simon bin ich skeptisch, dass sich das zu einem erheblichen Betrag summiert, anstatt die Arbeit schneller zu erledigen oder zu versuchen, so etwas wie die Monstervideokarte zu optimieren.

Powernap kann so konfiguriert werden, dass nur der Governor-Switch ausgeführt wird. Wenn Ihre Hardware dies unterstützt, können Sie mithilfe der Wake-On-Lan-Funktion (WOL) mitten in der Nacht ein Nickerchen machen, bis es benötigt wird.

Jorge Castro
quelle
1

Was die CPU betrifft, können Sie den Governor einfach auf Powersave schalten, beispielsweise mit dem CPU-Frequenzskalierungs-Monitor-Applet. Die Grafikkarte ist eine andere Geschichte. Ich weiß, dass meine ATI-Karte einen Regler in / sys hat, mit dem die Leistung zwischen niedrig, mittel und hoch eingestellt werden kann, aber das Herumspielen mit ihnen scheint keinen Unterschied zu machen und führt häufig dazu, dass das Video instabil wird.

Psusi
quelle
1

cpufreqd wurde für das jeweilige Problem entwickelt. Sie können Tag- und Nachtprofile erstellen und Regeln festlegen, die auf der Ausführung von Programmen basieren.

Lüge Ryan
quelle