Underclocking à força à noite


23

Minha área de trabalho permanece ativa o tempo todo. Ele atua como servidor e também executa outras tarefas domésticas semi-essenciais. Durante o dia, ele usa a configuração da CPU OnDemand. Isso basicamente apenas escala a frequência da CPU conforme ela precisa e isso funciona muito bem para mim.

À noite, ele voa por aí. É claro que na maioria das vezes ele está ocioso a uma potência baixa, mas ocasionalmente, ele aumenta a velocidade para fazer alguma coisa. Prefiro que ele permaneça no PowerSave e as tarefas sejam obrigadas a demorar um pouco mais para serem concluídas.

Além disso, 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 deseja (olha para o Minecraft). Por razões desconhecidas (sem dúvida, algo acontecendo na área de trabalho), isso aumenta, os fãs parecem estar carregando o laser para o espaço. À noite, eu gostaria de fazer o underclock do cartão o máximo possível.

Eu considerei um script cron de execução raiz simples para fazer isso, mas meu horário de trabalho é variável. Na semana passada, tive uma semana de trabalho de quase 70 horas, por isso acordava muito cedo e ainda acordava muito tarde, todos os dias. Se o sistema estivesse buzinando no modo super-underclock, eu ficaria furioso. Existe algo que eu possa fazer para dizer "Underclock se:

  • É entre 22:00 e 09:00
  • 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 . Não quero esperar que um script cron apareça para acordar o computador do seu sono. Da mesma forma, assim que tudo isso se tornar realidade, ele deverá voltar a dormir.

Quais são as minhas opções?


Em qual versão você está agora? Até que eu possa chegar em casa na minha máquina, mencionarei que você deve conseguir conectar eventos usando eventos acpi ou pacote pm-tools.
hometoast

Respostas:


19

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

#!/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
  • ... tm_hour in (22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9) e
  • "RUNNING" not in ...

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


5

Você pode forçar o dimensionamento da sua CPU usando:

cpufreq-selector -f [frequency]

Existem mais algumas opções (por exemplo, CPU específica ou seleção de uma governança em vez de uma velocidade) Isso pressupõe que sua placa-mãe / CPU permita que o Ubuntu controle manualmente o dimensionamento (aparentemente nem sempre é esse o caso).

O restante pode ser aplicado usando um script, no entanto, você está exigindo muito disso ^ _ ^. Se você precisar de uma resposta instantânea, acho que precisa ter algo pesquisando periodicamente seu sistema. Do meu conhecimento, que 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 definido de inatividade (o que também seria verdadeiro às 22:00 - 09:00) e pode ser inibido pelos players de filme. Se você criou um protetor de tela que reduziu a CPU durante a inicialização e a restaurou na esteira, você terá o que deseja.

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

Boa sorte.


4

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

Dependendo da sua carga de trabalho, concluir 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 períodos prolongados com consumo reduzido de energia, pode gerar melhores resultados.

Dependendo do seu aplicativo, também pode valer a pena instalar um servidor dedicado com menos requisitos de energia e uma fonte de alimentação adequadamente dimensionada para essa carga e simplesmente desligar a área de trabalho à noite.


1
Às vezes você apenas quer que seu computador para permanecer em silêncio, especialmente à noite ..
Maxime R.

Se você deseja tranquilidade, não ter o sistema funcionando é a melhor maneira. Eu tenho uma máquina muito alta para o meu trabalho diário e um servidor no armário de vassouras para tarefas em segundo plano; este último possui uma fonte de alimentação menor (=> menos calor residual), CPU (=> menos calor residual), placa de vídeo (você recebe a idéia), ... e usa o governador ondemand . Não tenho ruído no meu quarto à noite e o consumo de energia do servidor é cerca de um terço do que a área de trabalho consome quando ociosa, então ainda economizo dinheiro.
Simon Richter

Claro, concordo, mas neste caso em particular, o Oli usa a mesma máquina que servidor e desktop.
Maxime R.

3

O powernap é uma ferramenta útil para coisas como essa, o bom é que ele olha para a sua tabela de processos para verificar se o seu sistema está ocupado, e não o seu tempo ocioso no teclado.

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

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


1

No que diz respeito à CPU, você pode simplesmente mudar o governador para economia de energia com, por exemplo, o applet de monitor de escala de frequência da CPU. A placa de vídeo é outra história. Sei que minha placa ATI possui um botão / sys para ajustar o desempenho entre baixa, média e alta, mas mexer com elas não parece fazer nenhuma diferença e geralmente faz com que o vídeo se torne instável.


1

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.