Underclocking secara paksa di malam hari

23

Desktop saya tetap menyala sepanjang waktu. Ini bertindak sebagai server dan juga melakukan tugas rumah tangga semi-esensial lainnya. Siang hari menggunakan pengaturan CPU OnDemand. Ini pada dasarnya hanya skala frekuensi CPU seperti yang dibutuhkan dan ini berfungsi dengan baik bagi saya.

Di malam hari, ia terbang. Tentu saja sebagian besar waktu berjalan dengan daya rendah tetapi kadang-kadang, itu akan meningkat untuk melakukan sesuatu. Saya lebih suka itu tetap di PowerSave dan tugas-tugas hanya perlu sedikit lebih lama untuk diselesaikan.

Selain itu, saya memiliki kartu Nvidia (GTX 580) yang dapat mengkonsumsi daya dengan jumlah yang sama dengan yang digunakan oleh sebuah desa kecil di Afrika dalam satu tahun ketika ia menginginkannya (menatap Minecraft). Untuk alasan yang tidak diketahui (tidak diragukan lagi sesuatu terjadi pada desktop), ini meningkat, para penggemar terdengar seperti mereka sedang mengisi hingga menembakkan laser ke ruang angkasa. Pada malam hari, saya ingin melakukan underclock kartu sejauh mungkin.

Saya telah mempertimbangkan script cron root-run sederhana untuk mendorong ini melalui tetapi jam kerja saya variabel. Minggu lalu saya memiliki hampir 70 jam seminggu kerja sehingga saya bangun sangat pagi dan masih sangat larut, setiap hari. Jika sistem membunyikan klakson pada mode super-underclock, saya akan sangat marah. Apakah ada sesuatu yang bisa saya lakukan untuk mengatakan, "Underclock jika:

  • Ini antara jam 10 malam dan 9 pagi
  • Belum ada aktivitas mouse / keyboard selama 10 menit
  • Tidak ada pemutaran film

Jika salah satu dari kondisi itu tidak benar, underclock perlu dikembalikan secara instan . Saya tidak ingin menunggu skrip cron datang untuk membangunkan komputer dari tidurnya. Demikian pula, begitu semua itu menjadi kenyataan, ia harus kembali tidur.

Apa saja pilihan saya?

Oli
sumber
Kamu versi apa sekarang? Sampai saya bisa pulang ke komputer saya, saya akan menyebutkan Anda harus dapat mengaitkan acara menggunakan acara acpi atau paket pm-tools.
hometoast

Jawaban:

19

Inilah program yang melakukan apa yang Anda inginkan:

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

Perhatikan preferensi Anda:

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

Saya menggunakan pulseaudio untuk mencari tahu apakah film diputar. Ini juga memengaruhi musik.

Stefano Palazzo
sumber
5

Anda dapat memaksa penskalaan cpu Anda menggunakan:

cpufreq-selector -f [frequency]

Ada beberapa opsi lagi (yaitu cpu spesifik, atau memilih tata kelola daripada kecepatan) Ini mengasumsikan bahwa motherboard / cpu Anda memungkinkan Ubuntu untuk mengontrol penskalaan secara manual (tampaknya ini tidak selalu terjadi.)

Sisanya dapat diterapkan menggunakan skrip, namun Anda cukup menuntutnya ^ _ ^. Jika Anda memerlukan respons instan yang saya pikir Anda harus memiliki sesuatu yang secara berkala polling sistem Anda. Dari saya, beberapa yang terbatas, pengetahuan tidak ada yang mengumumkan kondisi yang Anda tentukan.

Namun, tempat untuk mulai menyelidiki adalah screensaver. Ini menyala setelah periode tidak aktif yang ditetapkan (yang juga berlaku pada jam 10 malam - 9 pagi) dan dapat dihambat oleh pemain film. Jika Anda membuat screensaver yang mengurangi CPU saat inisialisasi, dan mengembalikannya saat bangun, maka Anda akan mendapatkan yang Anda inginkan.

Sayangnya itu sejauh yang bisa saya bawa, tidak tahu apa-apa tentang screensaver dan bagaimana cara kerjanya.

Semoga berhasil.

thomasmichaelwallace
sumber
4

Anda mungkin tidak benar-benar menghemat daya lebih dengan menggunakan powersave gubernur.

Bergantung pada beban kerja Anda, menyelesaikan item pekerjaan dengan cepat dengan mengeluarkan sedikit lebih banyak daya dan kemudian kembali ke kondisi tidur nyenyak alih-alih bekerja untuk waktu yang lama dengan konsumsi daya yang berkurang dapat memberikan hasil yang lebih baik.

Tergantung pada aplikasi Anda, mungkin juga bermanfaat untuk menginstal server khusus dengan kebutuhan daya yang lebih rendah dan catu daya berdimensi dengan baik untuk beban itu, dan cukup matikan desktop di malam hari.

Simon Richter
sumber
1
Kadang-kadang Anda hanya ingin komputer Anda tetap diam, terutama di malam hari ..
Maxime R.
Jika Anda ingin tenang, tidak menjalankan sistem sama sekali adalah cara terbaik. Saya memiliki mesin yang cukup keras untuk pekerjaan sehari-hari saya dan server di lemari sapu untuk tugas-tugas latar belakang, yang terakhir memiliki catu daya yang lebih kecil (=> lebih sedikit limbah panas), CPU (=> lebih sedikit limbah panas), kartu grafis (Anda mendapatkan ide), ... dan menggunakan ondemand gubernur. Saya tidak memiliki noise di kamar saya di malam hari, dan konsumsi daya untuk server sekitar sepertiga dari apa yang dimakan desktop saat idle, jadi saya masih menghemat uang.
Simon Richter
Tentu, saya setuju, tetapi dalam kasus ini Oli menggunakan mesin yang sama seperti server dan desktop.
Maxime R.
3

powernap adalah alat yang berguna untuk hal-hal seperti ini, yang menyenangkan adalah ia melihat tabel proses Anda untuk melihat apakah sistem Anda sibuk, bukan waktu idle Anda di keyboard.

Sudahkah Anda mengukur penghematan listrik untuk setiap gubernur? Seperti Simon, saya skeptis bahwa itu akan menambah jumlah yang signifikan vs. menyelesaikan pekerjaan lebih cepat atau mencoba menyelaraskan sesuatu seperti kartu video monster.

powernap dapat dikonfigurasikan untuk hanya menjalankan saklar gubernur atau mungkin jika perangkat keras Anda mendukungnya menggunakan fitur Wake On Lan (WOL) untuk mengambil tidur nyenyak di tengah malam sampai dibutuhkan.

Jorge Castro
sumber
1

Sejauh CPU berjalan, Anda hanya dapat beralih gubernur ke powersave dengan, misalnya, applet monitor frekuensi cpu. Kartu video adalah cerita lain. Saya tahu kartu ATI saya memiliki tombol di / sys untuk menyesuaikan kinerja antara rendah, sedang, dan tinggi, tetapi mengutak-atiknya tampaknya tidak membuat perbedaan dan sering menyebabkan video menjadi tidak stabil.

psusi
sumber
1

cpufreqd dirancang untuk masalah spesifik yang Anda alami, Anda dapat membuat profil siang dan malam dan menetapkan aturan berdasarkan pada program yang sedang berjalan.

Lie Ryan
sumber