Bagaimana cara mengatur gubernur penskalaan frekuensi CPU untuk semua core sekaligus?


37

Saya ingin mengatur pengatur skala frekuensi CPU untuk semua core sekaligus daripada melakukannya secara individual untuk setiap inti. Apakah ada cara untuk melakukan ini?

(Saya tahu akan mudah untuk menggemakan gubernur /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, tapi saya tidak mencari solusi khusus.)


2
Dengan "solusi khusus" yang Anda maksudkan bahwa skrip shell tidak dapat diterima, itu harus berupa tombol GUI bawaan?
jg-faustus

Saya hanya ingin tahu apakah sudah ada solusi dalam instalasi standar (tidak perlu memiliki GUI).
Htorque

Periksa halaman ini: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux di bawah "implementasi debian": Tampaknya mungkin untuk mengubah default boot, dan ada alat userspace yang disebut powernowd. (Ini adalah komentar daripada balasan karena postingannya dari 2008, dan saya belum menguji apakah masih berfungsi ...)
jg-faustus

Jawaban:


25

Saya masih seorang noob linux tetapi jangan Anda pikir cpufrequtils memungkinkan Anda melakukannya dengan menggunakan (tidak dibundel dalam OS Ubuntu tetapi ada di repositori)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • The -rflag digunakan untuk mengatur perubahan untuk semua ( "semua perangkat keras yang berhubungan") core

6
Opsi -r terkait tidak melakukannya untuk semua core. Kita harus menentukan nomor cpu dengan opsi -c <number> namun skrip ini akan melakukannya untuk semua CPU dalam sekali jalan: untuk ((i = 0; i <$ (nproc); i ++)); lakukan cpufreq-set -c $ i -r -g kinerja; selesai
Sri

6
Tepatnya, @Sri benar. cpufreq-setpada kenyataannya tidak memiliki fungsionalitas yang sederhana namun dibutuhkan. Banyak orang yang ditunjukkan oleh penghitung suara ini tidak menyadarinya karena deskripsinya hanya menyesatkan.
poige

2
Siapa yang memberi +1 ini tanpa pengujian ???? Ini tidak berfungsi sama sekali. Saya memposting solusi kerja paling sederhana yang bisa saya temukan.
switch87

20

Saya sering mencari Google dan saya pikir itu tidak mungkin, jadi saya menambahkan satu-baris berikut ini ke .bashrc:

function setgov ()
{
    echo "$1" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}

Sekarang saya dapat menjalankan sesuatu seperti setgov ondemanddan semua core akan beralih ke gubernur ondemand .


2
Ini tidak berfungsi karena file scaling_governor dimiliki oleh root dan memiliki izin terbatas. Mengubah izin tidak selalu disarankan.
Sri

Silakan lihat skrip alternatif dalam komentar saya untuk jawaban pengguna49449.
Sri

6

perintah terpendek untuk mengubah gubernur semua core adalah sebagai berikut:

sudo bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'

Anda bisa menambahkannya ke .bashrc seperti htorque yang disebutkan, Anda harus menjalankannya sebagai root sudo setgov performance:

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}

2

Mungkin juga menambahkan penyelesaian kode bash, sementara kami melakukannya:

function setgovernor () {
    echo "$1" | sudo tee 
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}
complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor

2

Cara saya mengatur ini untuk tetap sejak gubernur default kembali ke hemat setelah sekitar 30 detik sekarang pada Ubuntu 16,04 atau lebih baru (saya di Ubuntu Mate);

  1. Masukkan kode (satu baris) ini (terima kasih, milik switch87 pada jawaban sebelumnya)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. ke dalam file di direktori

    /etc/rc.local
    

Milik saya adalah baris di atas "keluar 0" dan tidak diomentari, di bawah yang berkomentar.

"rc.local" bagi mereka yang tidak tahu, ini menjalankan perintah sebagai sudo. Perintah apa pun yang tampaknya, untuk mengubah gubernur, perlu dijalankan sebagai sudo.

Ini memungkinkan gubernur mereset kembali ke hemat daya dan menjalankan kode sebagai sudo setelah 60 detik untuk mengubahnya kembali ke kinerja.

Ubah "60" (dalam kode yang Anda salin) ke waktu berapa pun (dalam detik. 60 = 60 detik = 1 menit) Anda perlu menunda perintah dan "kinerja" (di bagian perintah) ke gubernur yang Anda inginkan mengubah.

Dari waktu dan jam pencarian saya, saya belum menemukan perbaikan yang lebih permanen untuk ini daripada ini. Saya mencari tahu berapa menit yang ada di penghematan daya jika ini adalah perbaikan terbaik yang saya temukan, kan? Kanan.

Bukan perbaikan terbaik, tetapi membuatnya agak permanen setelah itu sedikit beralih ke hal yang hemat daya. Jika Anda ingin mem-boot langsung dan melompat ke permainan atau sesuatu Anda harus menunggu sebentar untuk kode yang baru saja Anda masukkan untuk mengubahnya kembali dari hemat daya atau menurunkan waktu di atasnya (tergantung pada berapa lama waktu yang dibutuhkan) semuanya untuk memulai sehingga akan kembali ke kinerja dengan benar).

Dan, seperti biasa, untuk mengembalikan kembali ke default (saya telah melihat beberapa masalah dengan PC orang yang terlalu panas itu sebabnya mereka mungkin default-nya untuk menyimpan di tempat pertama) hanya menghapus kode dari rc.local dan reboot atau beralih kembali secara manual dengan pengalih atau menjalankan indikator ikon cpu Anda;

 sudo /etc/init.d/cpufrequtils restart

di terminal dan atau reboot.


1

Anda dapat melakukan ini untuk semua core sekaligus dengan menjalankan

sudo cpupower frequency-set --governor performance

0

Mendasarkan pada jawaban switch87, saya membuat skrip sederhana cpufreq-set-all, yang akan memungkinkan untuk melakukan cpufreq-sethal - hal lain dengan semua CPU:

   #!/bin/bash
   MAX_CPU=$((`nproc --all` - 1))
   for i in $(seq 0 $MAX_CPU); do
       echo "Changing CPU " $i " with parameter "$@;
       cpufreq-set -c $i $@ ;
   done

Sekarang dapat dipanggil (setelah chmod +x, tentu saja) seperti ini:

cpufreq-set-all -g powersave

atau

cpufreq-set-all -f 800Mhz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.