晚上强制降频


23

我的桌面始终保持打开状态。它不仅充当服务器,还执行其他半基本的家庭任务。在白天,它使用OnDemand CPU设置。这实际上只是根据需要扩展CPU频率,对我来说确实很好。

到了晚上,它飞来飞去。当然,大多数情况下,它会以低功率空转,但是偶尔,它会加速工作。我希望它保留在PowerSave上,而任务被迫花费更长的时间才能完成。

另外,我有一张Nvidia卡(GTX 580),其消耗的电量与非洲小村庄一年想要使用的电量相同(对Minecraft感兴趣)。由于未知的原因(毫无疑问在桌面上发生了什么),这种情况逐渐增加,风扇发出的声音听起来就像是在充电,将激光发射到太空。在晚上的时候,我想尽量降低卡的频率。

我考虑过使用简单的root运行cron脚本来完成这些任务,但是我的工作时间是可变的。上周我每周工作近70个小时,所以我每天很早起床,但仍然很晚起床。如果系统在超级时钟模式下鸣叫,我会很生气。我有什么可以说的吗?

  • 晚上10点至9点之间
  • 10分钟没有任何鼠标/键盘活动
  • 没有电影在播放

如果这些条件之一不成立,则需要立即还原时钟。我不想等待cron脚本来将计算机从沉睡中唤醒。同样,一旦所有这些都成为现实,它就应该回到睡眠状态。

我有什么选择?


您现在在哪个版本上?在我回到计算机的家之前,我会提到您应该能够使用acpi事件或pm-tools程序包挂接事件。
hometoast 2011年

Answers:


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

您可以使用以下方法强制执行cpu缩放:

cpufreq-selector -f [frequency]

还有更多选项(例如,特定的cpu或选择管理方式而不是速度)。这确实是假设您的主板/ cpu允许Ubuntu手动控制缩放(显然并非总是如此)。

其余的可以使用脚本来应用,但是您对它的要求很高^ _ ^。如果您需要即时响应,我认为您必须定期轮询系统。根据我的有限知识,没有什么可以宣布您指定的条件。

屏幕保护程序是开始调查的地方。在设定的不活动时间(在晚上10点至上午9点也是如此)之后,此功能会打开,并且可以由电影播放器​​禁止。如果您创建了一个在初始化时按比例缩小CPU的屏幕保护程序,并在唤醒后将其还原,那么您将拥有所需的功能。

不幸的是,这是我能带给您的,对屏保及其工作原理一无所知。

祝好运。


4

通过使用事实上你可能还更省电节电调速器。

根据您的工作量,通过花费更多的功率来快速完成工作项目,然后返回到深度睡眠状态,而不是在降低功耗的情况下长时间工作,可能会带来更好的结果。

根据您的应用程序,还可能需要安装功率要求较低的专用服务器,并为该负载安装适当尺寸的电源,并在晚上简单地关闭台式机。


1
有时候,你只是想你的电脑保持安静,尤其是在夜间..
马克西姆R.

如果您想安静一点,最好不要运行系统。我的日常工作中有一台非常响亮的机器,扫帚壁橱中有一台服务器用于后台任务,后者具有较小的电源(=>废热少),CPU(=>废热少),图形卡(您得到的想法),并使用按需调速器。晚上我的卧室里的噪音为零,服务器的功耗大约是台式机闲置时所消耗的功率的三分之一,因此我仍然省了钱。
西蒙·里希特

当然可以,我同意,但是在这种特殊情况下,Oli使用的服务器和台式机使用的是同一台计算机。
Maxime R.

3

powernap是用于此类事情的便捷工具,它的好处是它可以查看进程表以查看系统是否忙碌,而不是您的键盘空闲时间。

您是否测量了每个调速器的节能量?像西蒙一样,我对此表示怀疑,这与进行更快的工作或尝试调整诸如怪兽视频卡之类的东西相比,会增加很多。

可以将powernap配置为仅执行调速器开关,或者如果您的硬件支持,可以使用Wake On Lan(WOL)功能在深夜进行小睡,直到需要时为止。


1

就CPU而言,您可以仅使用例如cpu频率缩放监视器小程序将调速器切换到节能模式。显卡是另一个故事。我知道我的ATI卡在/ sys中有一个旋钮,可以在低,中和高之间调整性能,但是摆弄它们似乎没有什么区别,并且经常导致视频变得不稳定。


1

cpufreqd是针对您遇到的特定问题而设计的,您可以创建白天和黑夜的配置文件并根据正在运行的程序设置规则。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.