Forçosamente underclocking à noite

23

Meu desktop fica ligado o tempo todo. Atua como servidor e também realiza outras tarefas domésticas semi-essenciais. Durante o dia, ele usa a configuração da CPU do OnDemand. Isso essencialmente apenas dimensiona a frequência do processador conforme necessário e isso funciona muito bem para mim.

Durante a noite, ele voa ao redor. É claro que na maior parte do tempo ele fica em marcha lenta com um baixo consumo de energia, mas ocasionalmente, ele aumenta a velocidade para fazer alguma coisa. Eu preferiria que ele permanecesse no PowerSave e as tarefas fossem forçadas a demorar um pouco mais para serem concluídas.

Além disso, eu tenho uma placa Nvidia (GTX 580) que pode consumir aproximadamente a mesma quantidade de energia que uma pequena vila africana usa em um ano quando quer (olha para Minecraft). Por razões desconhecidas (sem dúvida algo acontecendo na área de trabalho), isso acelera, os fãs parecem estar carregando para disparar lasers no espaço. À noite, eu gostaria de fazer o underclock do cartão o máximo possível.

Eu considerei um simples script cron de execução de raiz, mas minhas horas de trabalho são variáveis. Na semana passada eu tive uma semana de trabalho de quase 70 horas, então eu estava acordada muito cedo e ainda acordava muito tarde, todos os dias. Se o sistema estivesse buzinando no modo super-underclock, eu ficaria furioso. Há algo que eu poderia fazer para dizer "Subclasse se:

  • Entre as 22h e as 9h
  • Não houve atividade de mouse / teclado por 10 minutos
  • Não há um filme sendo reproduzido

Se uma dessas condições não for verdadeira, o underclock precisa reverter instantaneamente . Eu não quero esperar por um cron-script para acordar o computador do seu sono. Da mesma forma, assim que todos se tornarem verdade, deve voltar a dormir.

Quais são minhas opções?

    
por Oli 06.06.2011 / 13:31

6 respostas

19

Aqui está um programa que faz o que você quer:

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

Observe suas preferências:

  • ... >= 10 * 60 * 1000
  • %código% e
  • ... tm_hour in (22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Estou usando pulseaudio para descobrir se um filme está sendo reproduzido. Isso também afeta a música.

    
por Stefano Palazzo 06.06.2011 / 15:57
5

Você pode forçar o seu escalonamento de cpu usando:

cpufreq-selector -f [frequency]

Existem mais algumas opções (isto é, cpu específica, ou selecionar uma governança em vez de uma velocidade) Isso supõe que sua placa-mãe / cpu permite que o Ubuntu controle manualmente o dimensionamento (aparentemente nem sempre é o caso).

O resto pode ser aplicado usando um script, mas você está exigindo muito dele ^ _ ^. Se você precisar de uma resposta instantânea, acho que você precisa ter algo periodicamente consultando seu sistema. Do meu, algum conhecimento limitado, não há nada que anuncie as condições que você especificou.

Um lugar para começar a investigar, no entanto, é um protetor de tela. Isso é ativado após um período de inatividade definido (o que também seria verdadeiro às 22h-9h) e pode ser inibido pelos reprodutores de filmes. Se você criasse um protetor de tela que reduzisse a CPU ao inicializar e o restaurasse ao acordar, teria o que você queria.

Infelizmente, isso é o máximo que posso levar, sem saber nada sobre os protetores de tela e como eles funcionam.

Boa sorte.

    
por thomasmichaelwallace 06.06.2011 / 14:11
4

Você pode não economizar mais energia usando o governador powersave .

Dependendo da carga de trabalho, o término de um item de trabalho rapidamente, gastando um pouco mais de energia e retornando a um estado de suspensão profunda, em vez de trabalhar por longos períodos com consumo reduzido de energia, pode dar melhores resultados.

Dependendo da sua aplicação, também pode valer a pena instalar um servidor dedicado com requisitos de energia mais baixos e uma fonte de alimentação devidamente dimensionada para essa carga, e simplesmente desligar a área de trabalho à noite.

    
por Simon Richter 06.06.2011 / 15:51
3

powernap é uma ferramenta útil para coisas como essa, o mais legal é ver sua tabela de processos para ver se o seu sistema está ocupado , não o seu tempo ocioso no teclado.

Você mediu a economia de energia para cada governador? Como Simon, eu sou cético de que isso significaria uma quantia significativa em comparação com o trabalho mais rápido ou com a tentativa de sintonizar algo como a placa de vídeo do monstro.

O

powernap pode ser configurado para apenas executar o switch governador ou, talvez, se o seu hardware suportar, use o recurso Wake On Lan (WOL) para tirar sonecas reais no meio da noite, até que seja necessário.

por Jorge Castro 06.06.2011 / 19:16
1

No que diz respeito à CPU, você pode simplesmente alternar o regulador para economia de energia com, por exemplo, o applet do monitor de escala de frequência da cpu. A placa de vídeo é outra história. Eu sei que a minha placa ATI tem um botão em / sys para ajustar o desempenho entre baixa, média e alta, mas mexer com eles não parece fazer nenhuma diferença e muitas vezes faz com que o vídeo se torne instável.

    
por psusi 06.06.2011 / 15:31
1

O cpufreqd foi projetado para o problema específico que você está tendo, você pode criar perfis de dia e de noite e definir regras com base em programas em execução.

    
por Lie Ryan 06.06.2011 / 18:20