Underclocking forcé la nuit

23

Mon bureau reste allumé tout le temps. Il agit comme un serveur et effectue également d'autres tâches ménagères semi-essentielles. Pendant la journée, il utilise le paramètre CPU OnDemand. Cela fait essentiellement évoluer la fréquence du processeur selon ses besoins et cela fonctionne très bien pour moi.

La nuit, il flotte. Bien sûr, la plupart du temps, il tourne au ralenti à faible puissance, mais parfois, il accélère pour faire quelque chose. Je préférerais que cela reste sur PowerSave et que les tâches soient juste obligées de prendre un peu plus de temps.

De plus, j'ai une carte Nvidia (GTX 580) qui peut consommer à peu près la même quantité d'énergie qu'un petit village africain utilise dans l'année où il le souhaite (regarde Minecraft). Pour des raisons inconnues (sans aucun doute quelque chose se passe sur le bureau), cela augmente, les fans sonnent comme s'ils se chargeaient pour tirer des lasers dans l'espace. La nuit, j'aimerais cadencer la carte aussi loin que possible.

J'ai envisagé un simple script cron root pour les pousser à travers, mais mes heures de travail sont variables. La semaine dernière, j'ai eu une semaine de travail de près de 70 heures, donc je me levais très tôt et toujours très tard, tous les jours. Si le système klaxonnait en mode super-underclock, j'aurais été furieux. Y a-t-il quelque chose que je pourrais faire pour dire "Underclock si:

  • C'est entre 22h et 9h
  • Il n'y a pas eu d'activité souris / clavier depuis 10 minutes
  • Il n'y a pas de film en cours de lecture

Si l'une de ces conditions n'est pas vraie, l'overclock doit revenir instantanément . Je ne veux pas attendre qu'un cron-script arrive pour réveiller l'ordinateur de son sommeil. De même, dès que tout cela devient vrai, il devrait se rendormir.

Quelles sont mes options?

Oli
la source
Sur quelle version êtes-vous maintenant? Jusqu'à ce que je puisse rentrer chez moi sur ma machine, je mentionnerai que vous devriez pouvoir accrocher des événements en utilisant des événements acpi ou un package pm-tools.
hometoast

Réponses:

19

Voici un programme qui fait ce que vous voulez:

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

Notez vos préférences:

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

J'utilise pulseaudio pour savoir si un film est en cours de lecture. Cela affecte également la musique.

Stefano Palazzo
la source
5

Vous pouvez forcer la mise à l'échelle de votre processeur en utilisant:

cpufreq-selector -f [frequency]

Il y a quelques autres options (c.-à-d. Un processeur spécifique, ou la sélection d'une gouvernance plutôt qu'une vitesse). Cela suppose que votre carte mère / processeur permet à Ubuntu de contrôler manuellement la mise à l'échelle (apparemment, ce n'est pas toujours le cas.)

Le reste peut être appliqué à l'aide d'un script, mais vous en êtes assez exigeant ^ _ ^. Si vous avez besoin d'une réponse instantanée, je pense que vous devez avoir quelque chose qui interroge périodiquement votre système. D'après mes connaissances limitées, il n'y a rien qui annonce les conditions que vous avez spécifiées.

Un point de départ pour enquêter, cependant, est un économiseur d'écran. Cela s'allume après une période d'inactivité définie (ce qui serait également vrai à 22 heures-9 heures) et peut être inhibé par les lecteurs de films. Si vous avez créé un économiseur d'écran qui a réduit le processeur lors de l'initialisation et l'a restauré au réveil, vous auriez ce que vous vouliez.

Malheureusement, c'est aussi loin que je peux vous emmener, sans rien savoir des économiseurs d'écran et de leur fonctionnement.

Bonne chance.

thomasmichaelwallace
la source
4

Vous ne pouvez pas réellement économiser plus d'énergie en utilisant le gouverneur PowerSave .

En fonction de votre charge de travail, terminer rapidement un élément de travail en dépensant un peu plus d'énergie, puis en revenant à un état de sommeil profond plutôt que de travailler pendant des périodes prolongées avec une consommation électrique réduite, peut donner de meilleurs résultats.

Selon votre application, il peut également être utile d'installer un serveur dédié avec des besoins en énergie inférieurs et une alimentation correctement dimensionnée pour cette charge, et éteignez simplement le bureau la nuit.

Simon Richter
la source
1
Parfois, vous voulez simplement que votre ordinateur reste silencieux, surtout la nuit ..
Maxime R.
Si vous voulez être silencieux, ne pas faire fonctionner le système est la meilleure façon. J'ai une machine assez bruyante pour mon travail quotidien et un serveur dans le placard à balais pour les tâches en arrière-plan, ce dernier a une alimentation plus petite (=> moins de chaleur perdue), un processeur (=> moins de chaleur perdue), une carte graphique (vous obtenez l'idée), ... et utilise le gouverneur à la demande . La nuit, je n'ai aucun bruit dans ma chambre et la consommation électrique du serveur représente environ un tiers de ce que le bureau mange lorsqu'il est inactif, donc j'économise toujours de l'argent.
Simon Richter
Bien sûr, je suis d'accord, mais dans ce cas particulier, Oli utilise la même machine que le serveur et le bureau.
Maxime R.
3

powernap est un outil pratique pour des choses comme ça, la bonne chose est qu'il regarde votre table de processus pour voir si votre système est occupé, pas votre temps d'inactivité au clavier.

Avez-vous mesuré l'économie d'énergie pour chaque gouverneur? Comme Simon, je suis sceptique quant au fait que cela représenterait une somme importante par rapport à un travail plus rapide ou à essayer de régler quelque chose comme la carte vidéo monstre.

powernap peut être configuré pour exécuter simplement le commutateur du gouverneur ou peut-être que si votre matériel le prend en charge, utilisez la fonction Wake On Lan (WOL) pour prendre de vraies siestes au milieu de la nuit jusqu'à ce que cela soit nécessaire.

Jorge Castro
la source
1

En ce qui concerne le CPU, vous pouvez simplement basculer le gouverneur en mode d'économie d'énergie avec, par exemple, l'applet du moniteur de mise à l'échelle de la fréquence du processeur. La carte vidéo est une autre histoire. Je sais que ma carte ATI possède un bouton in / sys pour régler les performances entre faible, moyen et élevé, mais les manipuler ne semble pas faire de différence et fait souvent que la vidéo devienne instable.

psusi
la source
1

cpufreqd est conçu pour le problème spécifique que vous rencontrez, vous pouvez créer des profils jour et nuit et définir des règles en fonction des programmes en cours d'exécution.

Lie Ryan
la source