Di notte sotto pressione forzatamente


23

Il mio desktop rimane sempre acceso. Funziona come un server e svolge anche altre attività domestiche semi-essenziali. Durante il giorno utilizza l'impostazione della CPU OnDemand. Questo essenzialmente ridimensiona la frequenza della CPU quando ne ha bisogno e questo funziona davvero bene per me.

Di notte, gira intorno. Ovviamente la maggior parte delle volte gira al minimo a bassa potenza, ma a volte accelera per fare qualcosa. Preferirei che rimanesse su PowerSave e che le attività fossero solo un po 'più lunghe per essere completate.

Inoltre, ho una scheda Nvidia (GTX 580) che può consumare all'incirca la stessa quantità di energia che un piccolo villaggio africano usa in un anno quando vuole (abbaglia a Minecraft). Per ragioni sconosciute (indubbiamente qualcosa che sta accadendo sul desktop), questo accelera, i fan suonano come se si stessero caricando per sparare laser nello spazio. Di notte, desidero sbloccare la carta fino in fondo.

Ho considerato un semplice script cron eseguito da root per farli passare, ma il mio orario di lavoro è variabile. La settimana scorsa ho trascorso una settimana lavorativa di quasi 70 ore, quindi mi sono alzato molto presto e ancora molto tardi, ogni giorno. Se il sistema suonasse il clacson in modalità super-underclock, sarei stato furioso. C'è qualcosa che potrei fare per dire "Underclock se:

  • Sono tra le 22 e le 9
  • Non c'è stata alcuna attività del mouse / tastiera per 10 minuti
  • Non c'è un film in riproduzione

Se una di queste condizioni non è vera, il underclock deve tornare all'istante . Non voglio aspettare che arrivi un cron-script per svegliare il computer dal suo sonno. Allo stesso modo, non appena tutti diventano realtà, dovrebbe tornare a dormire.

Quali sono le mie opzioni?


In quale versione sei ora? Fino a quando potrò tornare a casa con la mia macchina, menzionerò che dovresti essere in grado di agganciare gli eventi usando acpi events o il pacchetto pm-tools.
hometoast,

Risposte:


19

Ecco un programma che fa quello che vuoi:

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

Nota le tue preferenze:

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

Sto usando pulseaudio per scoprire se un film è in riproduzione. Questo influenza anche la musica.


5

È possibile forzare il ridimensionamento della CPU utilizzando:

cpufreq-selector -f [frequency]

Ci sono alcune altre opzioni (ad esempio CPU specifica o selezione di una governance piuttosto che una velocità) Ciò presuppone che la scheda madre / CPU consenta a Ubuntu di controllare manualmente il ridimensionamento (apparentemente non è sempre così).

Il resto può essere applicato usando uno script, tuttavia ne sei abbastanza esigente ^ _ ^. Se hai bisogno di una risposta istantanea, penso che devi fare periodicamente il polling del tuo sistema. Dalla mia conoscenza, in parte limitata, non c'è nulla che annuncia le condizioni che hai specificato.

Un punto di partenza per indagare, tuttavia, è uno screensaver. Questo si attiva dopo un determinato periodo di inattività (che sarebbe anche vero alle 10: 00-9: 00) e può essere inibito dai lettori di film. Se avessi creato uno screensaver che ridimensionava la CPU durante l'inizializzazione e l'hai ripristinato al risveglio, allora avresti ciò che desideri.

Purtroppo questo è quanto posso portarti, senza sapere nulla di salvaschermi e come funzionano.

In bocca al lupo.


4

Non puoi effettivamente risparmiare più potere usando il governatore di powersave .

A seconda del carico di lavoro, terminare rapidamente un elemento di lavoro consumando un po 'più di energia e poi tornare a uno stato di sonno profondo anziché lavorare per periodi prolungati con un consumo di energia ridotto può dare risultati migliori.

A seconda dell'applicazione, può anche essere utile installare un server dedicato con requisiti di alimentazione inferiori e un alimentatore adeguatamente dimensionato per quel carico e spegnere semplicemente il desktop di notte.


1
A volte vuoi solo che il tuo computer rimanga silenzioso, specialmente di notte ..
Maxime R.

Se vuoi essere silenzioso, non far funzionare affatto il sistema è il modo migliore. Ho una macchina piuttosto rumorosa per il mio lavoro quotidiano e un server nell'armadio della scopa per le attività in background, quest'ultimo ha un alimentatore più piccolo (=> meno calore residuo), CPU (=> meno calore residuo), scheda grafica (ottieni l'idea), ... e usa il governatore ondemand . Di notte non ho rumore nella mia camera da letto e il consumo di energia per il server è circa un terzo di quello che il desktop mangia quando è inattivo, quindi risparmio ancora denaro.
Simon Richter,

Certo, sono d'accordo, ma in questo caso particolare Oli utilizza la stessa macchina del server e del desktop.
Maxime R.

3

powernap è uno strumento utile per cose come questa, la cosa bella è che guarda la tua tabella dei processi per vedere se il tuo sistema è occupato, non il tuo tempo di inattività sulla tastiera.

Hai misurato il risparmio di energia per ciascun governatore? Come Simon, sono scettico sul fatto che ciò comporterebbe una quantità significativa rispetto al portare a termine il lavoro più velocemente o cercando di mettere a punto qualcosa come la scheda video mostro.

powernap può essere configurato per eseguire solo l'interruttore del regolatore o forse se il tuo hardware lo supporta usa la funzione Wake On Lan (WOL) per fare dei veri pisolini nel cuore della notte fino a quando non è necessario.


1

Per quanto riguarda la CPU, puoi semplicemente cambiare il regolatore in modalità risparmio energetico con, ad esempio, l'applet di monitoraggio del ridimensionamento della frequenza della CPU. La scheda video è un'altra storia. So che la mia scheda ATI ha una manopola in / sys per regolare le prestazioni tra basso, medio e alto, ma giocherellare con loro non sembra fare alcuna differenza e spesso rende il video instabile.


1

cpufreqd è progettato per il problema specifico che stai riscontrando, puoi creare profili diurni e notturni e impostare regole basate su programmi in esecuzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.