夜間の強制アンダークロック


23

デスクトップは常にオンのままです。サーバーとして機能し、他の半必須の家庭用タスクも実行します。日中はOnDemand CPU設定を使用します。これは基本的に、必要に応じてCPU周波数をスケーリングするだけで、これは私にとって非常にうまく機能します。

夜になると、飛び交います。もちろん、ほとんどの場合、低電力でアイドリングしますが、時々、何かをするためにランプアップします。私はむしろPowerSaveにとどまり、タスクは完了するのに少し時間がかかりました。

さらに、私はNvidiaカード(GTX 580)を持っています。これは、アフリカの小さな村が1年で使用するのとほぼ同じ量の電力を消費できます(Minecraftでグレアします)。未知の理由(間違いなくデスクトップで何かが起こっている)のために、これは増加し、ファンはレーザーを宇宙に発射するために充電しているように聞こえます。夜になると、カードを可能な限りアンダークロックします。

これらをプッシュする単純なルート実行cronスクリプトを検討しましたが、勤務時間は可変です。先週、私は週に70時間近く働いていたので、毎日非常に早く起きていて、まだ非常に遅く起きていました。システムがスーパーアンダークロックモードで警honを鳴らしていたら、私は怒り狂っていたでしょう。「次の場合はアンダークロック:

  • 午後10時から午前9時
  • 10分間マウス/キーボード操作がありませんでした
  • 映画の再生はありません

これらの条件のいずれかが当てはまらない場合、アンダークロックを即座に元戻す必要があります。コンピューターが眠りから覚めるためにcronスクリプトが来るのを待ちたくありません。同様に、それらのすべてが真になるとすぐに、スリープ状態に戻ります。

私のオプションは何ですか?


現在どのバージョンを使用していますか?マシンに戻るまでは、acpiイベントまたはpm-toolsパッケージを使用してイベントをフックできるはずです。
ホームトースト

回答:


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
時々、特に夜はコンピューターを静かにしたいだけです。
Maxime R.

静かにしたい場合は、システムをまったく実行しないことが最善の方法です。私は毎日の仕事のためにかなり大きなマシンとバックグラウンドタスクのためのほうきクローゼットにサーバーを持っています。アイデア)、...、オンデマンドガバナーを使用します。夜は寝室の騒音がゼロになり、サーバーの電力消費はデスクトップがアイドル状態のときの約3分の1であるため、お金を節約できます。
サイモンリヒター

確かに、私は同意しますが、この特定のケースでは、Oliはサーバーおよびデスクトップと同じマシンを使用します。
マキシムR.

3

powernapはこのようなものの便利なツールです。良い点は、キーボードでのアイドル時間ではなく、システムがビジーかどうかを確認するためにプロセステーブルを調べることです。

各知事の節電を測定しましたか?サイモンのように、作業をより速く終わらせたり、モンスターのビデオカードのようなものを調整しようとするよりも、それがかなりの量になるということには懐疑的です。

powernapは、ガバナースイッチを実行するように構成できます。または、ハードウェアがそれをサポートしている場合は、Wake On Lan(WOL)機能を使用して、必要になるまで真夜中に実際の昼寝を行うことができます。


1

CPUに関する限り、たとえばCPU周波数スケーリングモニターアプレットを使用して、ガバナーを省電力に切り替えることができます。ビデオカードは別の話です。ATIカードには/ sysに低、中、高の間でパフォーマンスを調整するノブがありますが、それらをいじっても違いはないようで、多くの場合ビデオが不安定になります。


1

cpufreqdは、特定の問題に対応するように設計されています。昼夜プロファイルを作成し、実行中のプログラムに基づいてルールを設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.