Forzar el overclocking por la noche

23

Mi escritorio permanece encendido todo el tiempo. Actúa como un servidor y también realiza otras tareas domésticas semi-esenciales. Durante el día usa la configuración de CPU OnDemand. Básicamente, esto simplemente escala la frecuencia de la CPU, ya que la necesita y esto funciona muy bien para mí.

Por la noche, da vueltas. Por supuesto, la mayor parte del tiempo está inactivo a baja potencia, pero ocasionalmente, se acelerará para hacer algo. Preferiría que se quedara en PowerSave y las tareas se veían obligadas a tardar un poco más en completarse.

Además, tengo una tarjeta Nvidia (GTX 580) que puede consumir aproximadamente la misma cantidad de energía que una pequeña aldea africana usa en un año cuando lo desea (mira a Minecraft). Por razones desconocidas (sin duda algo que sucede en el escritorio), esto aumenta, los ventiladores suenan como si estuvieran cargando para disparar rayos láser al espacio. Por la noche, me gustaría reducir la velocidad de la tarjeta hasta el tope.

He considerado una secuencia de comandos cron simple ejecutada por la raíz para impulsarlos, pero mis horas de trabajo son variables. La semana pasada tuve una semana laboral de casi 70 horas, así que me levantaba muy temprano y aún muy tarde, todos los días. Si el sistema tocara la bocina en el modo súper subclock, habría estado furioso. ¿Hay algo que pueda hacer para decir: "Underclock si:

  • Es entre las 10 p.m. y las 9 a.m.
  • No ha habido actividad de mouse / teclado en 10 minutos
  • No hay una pelicula

Si una de esas condiciones no es cierta, el underclock necesita revertirse instantáneamente . No quiero esperar a que aparezca un script cron para despertar a la computadora de su sueño. Del mismo modo, tan pronto como todos se hagan realidad, debería volver a dormir.

¿Cuáles son mis opciones?

Oli
fuente
¿En qué versión estás ahora? Hasta que pueda llegar a casa con mi máquina, mencionaré que debería poder conectar eventos usando eventos acpi o paquete pm-tools.
Hometoast

Respuestas:

19

Aquí hay un programa que hace lo que quieres:

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

Tenga en cuenta sus preferencias:

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

Estoy usando pulseaudio para averiguar si se está reproduciendo una película. Esto también afecta a la música.

Stefano Palazzo
fuente
5

Puede forzar el escalado de su CPU utilizando:

cpufreq-selector -f [frequency]

Hay algunas opciones más (es decir, una CPU específica, o seleccionar una gobernanza en lugar de una velocidad). Esto supone que su placa base / CPU le permite a Ubuntu controlar manualmente la escala (aparentemente este no es siempre el caso).

El resto se puede aplicar usando un script, sin embargo, usted es bastante exigente con él ^ _ ^. Si necesita una respuesta instantánea, creo que debe tener algo que sondee periódicamente su sistema. Según mi conocimiento, algo limitado, no hay nada que anuncie las condiciones que ha especificado.

Sin embargo, un lugar para comenzar a investigar es un protector de pantalla. Esto se activa después de un período establecido de inactividad (que también sería cierto a las 10 pm-9am) y puede ser inhibido por los reproductores de películas. Si creó un protector de pantalla que redujo la CPU al inicializar y lo restauró al despertar, entonces tendría lo que desea.

Desafortunadamente, eso es lo más lejos que puedo llevarte, sin saber nada sobre los protectores de pantalla y cómo funcionan.

Buena suerte.

thomasmichaelwallace
fuente
4

El usuario no puede realmente ahorrar más energía utilizando el ahorro de energía gobernador.

Dependiendo de su carga de trabajo, terminar un elemento de trabajo rápidamente gastando un poco más de energía y luego volviendo a un estado de reposo profundo en lugar de trabajar durante períodos prolongados con un consumo de energía reducido puede dar mejores resultados.

Dependiendo de su aplicación, también puede valer la pena instalar un servidor dedicado con requisitos de energía más bajos y una fuente de alimentación dimensionada adecuadamente para esa carga, y simplemente apague el escritorio por la noche.

Simon Richter
fuente
1
A veces solo quieres que tu computadora permanezca en silencio, especialmente por la noche ...
Maxime R.
Si desea silencio, no tener el sistema funcionando es la mejor manera. Tengo una máquina bastante ruidosa para mi trabajo diario y un servidor en el armario de las escobas para tareas en segundo plano, este último tiene una fuente de alimentación más pequeña (=> menos calor residual), CPU (=> menos calor residual), tarjeta gráfica (obtienes la idea), ... y usa el gobernador bajo demanda . No tengo ruido en mi habitación por la noche, y el consumo de energía para el servidor es aproximadamente un tercio de lo que come el escritorio cuando está inactivo, por lo que sigo ahorrando dinero.
Simon Richter
Claro, estoy de acuerdo, pero en este caso particular, Oli usa la misma máquina que el servidor y el escritorio.
Maxime R.
3

powernap es una herramienta útil para cosas como esta, lo bueno es que mira su tabla de procesos para ver si su sistema está ocupado, no su tiempo de inactividad en el teclado.

¿Has medido el ahorro de energía para cada gobernador? Al igual que Simon, soy escéptico de que eso sumaría una cantidad significativa en comparación con hacer el trabajo más rápido o tratar de sintonizar algo como la tarjeta de video monstruo.

powernap se puede configurar para ejecutar simplemente el interruptor del gobernador o, si su hardware lo admite, use la función Wake On Lan (WOL) para tomar siestas reales en el medio de la noche hasta que sea necesario.

Jorge Castro
fuente
1

En lo que respecta a la CPU, puede cambiar el gobernador a ahorro de energía con, por ejemplo, el applet de monitor de escala de frecuencia de la CPU. La tarjeta de video es otra historia. Sé que mi tarjeta ATI tiene una perilla en / sys para ajustar el rendimiento entre bajo, medio y alto, pero jugar con ellas no parece hacer ninguna diferencia y, a menudo, hace que el video se vuelva inestable.

psusi
fuente
1

cpufreqd está diseñado para el problema específico que tiene, puede crear perfiles diurnos y nocturnos y establecer reglas basadas en programas en ejecución.

Lie Ryan
fuente