it-swarm.com.de

Nachts gewaltsam übertakten

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 geringer Leistung, aber gelegentlich wird es hochgefahren, 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 diese durchzudrücken, 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 zurückgesetzt werden sofort. 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?

23
Oli

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 __== '__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.

19
Stefano Palazzo

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

cpufreq-selector -f [frequency]

Es gibt ein paar weitere Optionen (d. H. Eine bestimmte CPU oder die Auswahl einer Governance anstelle einer Geschwindigkeit). Dies setzt voraus, dass Ubuntu auf Ihrem Motherboard/Ihrer CPU die Skalierung manuell steuern kann (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 jedoch 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.

Mit dem Regler powersave 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.

4
Simon Richter

powernap ist ein praktisches Tool für solche Dinge. Das Schöne ist, dass es in Ihrer Prozesstabelle nachschaut, ob Ihr System ausgelastet ist, und nicht nach Ihrer Leerlaufzeit auf der Tastatur.

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 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.

3
Jorge Castro

Was die CPU angeht, können Sie den Regler 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.

1
psusi

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.

1
Lie Ryan