Принудительный разгон ночью

23

Мой рабочий стол постоянно включен. Он действует как сервер, а также выполняет другие второстепенные бытовые задачи. В течение дня он использует настройку процессора OnDemand. По сути, это просто масштабирует частоту процессора, как это необходимо, и это работает очень хорошо для меня.

В ночное время он летает вокруг. Конечно, большую часть времени он работает на малой мощности, но иногда он начинает что-то делать. Я бы предпочел, чтобы он оставался на PowerSave, а задачи просто заставляли выполнять немного дольше.

Кроме того, у меня есть карта Nvidia (GTX 580), которая может потреблять примерно столько же энергии, сколько потребляет небольшая африканская деревня в год, когда она этого хочет (бросает взгляд на Minecraft). По неизвестным причинам (несомненно, что-то происходит на рабочем столе), это нарастает, вентиляторы звучат так, будто они заряжаются, чтобы запустить лазеры в космос. В ночное время я бы хотел разогнать карту настолько, насколько это возможно.

Я рассмотрел простой скрипт cron для запуска рутов, но мои рабочие часы меняются. На прошлой неделе у меня была почти 70-часовая рабочая неделя, поэтому я вставал очень рано и все еще очень поздно, каждый день. Если бы система гудела в режиме супер-разгона, я был бы в ярости. Есть ли что-то, что я могу сделать, чтобы сказать: «Разгон, если:

  • Это между 10 вечера и 9 утра
  • 10 минут не было никакой активности мыши / клавиатуры
  • Там нет фильма, играющего

Если одно из этих условий не выполняется, разгон должен быть мгновенно восстановлен . Я не хочу ждать появления cron-скрипта, чтобы разбудить компьютер от его сна. Точно так же, как только все это станет правдой, оно должно снова заснуть.

Какие у меня варианты?

Оли
источник
На какой версии вы сейчас находитесь? Пока я не смогу вернуться домой к своей машине, я упомяну, что вы должны иметь возможность перехватывать события, используя события acpi или пакет pm-tools.
Hometoast

Ответы:

19

Вот программа, которая делает то, что вы хотите:

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

Обратите внимание на ваши предпочтения:

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

Я использую pulseaudio, чтобы узнать, играет ли фильм. Это также влияет на музыку.

Стефано Палаццо
источник
5

Вы можете форсировать масштабирование вашего процессора, используя:

cpufreq-selector -f [frequency]

Есть еще несколько опций (например, конкретный процессор или выбор управления, а не скорости). Это предполагает, что ваша материнская плата / процессор позволяет Ubuntu вручную управлять масштабированием (очевидно, это не всегда так).

Остальное можно применить с помощью скрипта, однако вы довольно требовательны к нему ^ _ ^. Если вам нужен мгновенный ответ, я думаю, вам нужно периодически что-то опрашивать вашу систему. Из моих, некоторых ограниченных, знаний нет ничего, что объявляло бы условия, которые вы указали.

Место, где можно начать расследование, это заставка. Это включается после определенного периода бездействия (что также будет верно в 22:00 - 9:00) и может быть заблокировано плеерами. Если вы сделали скринсейвер, который уменьшал процессор при инициализации, и восстановили его после пробуждения, то у вас будет то, что вы хотите.

К сожалению, это все, что я могу сказать, ничего не зная о заставках и о том, как они работают.

Удачи.

thomasmichaelwallace
источник
4

Вы не можете на самом деле сэкономить больше энергии с помощью регулятора powersave .

В зависимости от вашей рабочей нагрузки быстрое завершение рабочего элемента за счет небольшого увеличения мощности и последующего возврата в состояние глубокого сна, а не работы в течение продолжительного времени с уменьшенным потреблением энергии может дать лучшие результаты.

В зависимости от вашего приложения может также оказаться целесообразным установить выделенный сервер с более низкими требованиями к питанию и блоком питания с соответствующими размерами для этой нагрузки и просто выключить рабочий стол на ночь.

Саймон Рихтер
источник
1
Иногда вы просто хотите, чтобы ваш компьютер оставался тихим, особенно ночью ..
Максим Р.
Если вы хотите тишины, то лучше вообще не запускать систему. У меня довольно громкая машина для моей повседневной работы и сервер в шкафу для меток для фоновых задач, последний имеет меньший блок питания (=> меньше отработанного тепла), процессор (=> меньше отработанного тепла), видеокарту (вы получаете идея), ... и использует OnDemand губернатора. Ночью в моей спальне нет шума, а энергопотребление для сервера составляет около трети от того, что настольный компьютер ест в режиме ожидания, поэтому я все еще экономлю деньги.
Саймон Рихтер
Конечно, я согласен, но в данном конкретном случае Оли использует ту же машину, что и сервер и рабочий стол.
Максим Р.
3

Powernap - это удобный инструмент для таких вещей, что приятно: он смотрит на вашу таблицу процессов, чтобы увидеть, занята ли ваша система, а не на простое за клавиатурой.

Вы измерили энергосбережение для каждого губернатора? Как и Саймон, я скептически отношусь к тому, что это значительно увеличит затраты на выполнение работы быстрее или на попытку настроить что-то вроде видеокарты монстра.

powernap можно настроить так, чтобы он просто выполнял управляющий переключатель, или, возможно, если ваше оборудование его поддерживает, используйте функцию Wake On Lan (WOL) для того, чтобы вздремнуть по ночам, пока он не понадобится.

Хорхе Кастро
источник
1

Что касается процессора, вы можете просто переключить регулятор в режим энергосбережения, например, с помощью апплета монитора масштабирования частоты процессора. Видеокарта это другая история. Я знаю, что у моей карты ATI есть ручка in / sys для регулировки производительности между низким, средним и высоким, но игра с ними, кажется, не имеет никакого значения и часто приводит к нестабильности видео.

psusi
источник
1

cpufreqd предназначен для решения конкретной проблемы, вы можете создавать дневные и ночные профили и устанавливать правила на основе запущенных программ.

Ли Райан
источник