CPU frekansı ölçeklendirme valisini tüm çekirdekler için bir kerede nasıl ayarlarım?


37

Her çekirdek için ayrı ayrı yapmak yerine, tüm çekirdeğe yönelik CPU frekansı ölçeklendirme valisini bir kerede ayarlamak istiyorum. Bunu yapmanın bir yolu var mı?

(Valinin yankılanmasının kolay olacağını biliyorum /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, ancak özel bir çözüm aramıyorum.)


2
"Özel çözüm" ile, bir kabuk betiğinin kabul edilemez olduğunu kastediyorsunuz, yerleşik bir GUI düğmesi mi olması gerekiyor?
jg-faustus

Sadece standart bir kurulumda bir çözüm olup olmadığını merak ediyorum (bir GUI'ye sahip olması gerekmiyor).
htorque

Bu sayfayı kontrol edin: "debian uygulaması" altında idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux : Önyükleme varsayılanını değiştirmek mümkündür ve powernowd adlı bir kullanıcı alanı aracı vardır. (Bu mesaj
cevaptan

Yanıtlar:


25

Hala bir linux noob'um ama cpufrequtils kullanarak bunu yapmanıza izin verdiğini düşünmüyor musunuz (Ubuntu işletim sisteminde paketlenmemiş ancak depoda var)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • -rBayrak tüm değişiklik ( "tüm donanım ile ilgili") çekirdek ayarlamak için kullanılır

6
-R ile ilgili seçenek tüm çekirdekler için yapmaz. Cpu numarasını -c <sayı> seçeneğiyle belirtmeliyiz, ancak bu script bir seferde tüm cpus için yapacaktır: for ((i = 0; i <$ (nproc); i ++)); cpufreq-set -c $ i -r -g performansı yapın; bitti
Sri

6
Kesinlikle, @Sri haklı. cpufreq-setAslında sonuçta basit ama ihtiyaç duyulan işlevsellikten yoksundur. Bu oy sayımlarının açıkça gösterdiği gibi pek çok insan bunun farkında değil, çünkü tanımı basitçe yanıltıcıdır.
poige

2
Bu + 1'leri test etmeden kim veriyor ???? Bu hiç işe yaramıyor. Bulabildiğim en basit çalışma çözümünü gönderdim.
switch87 12

20

Çok fazla googledim ve bunun mümkün olmadığını düşünüyorum, bu yüzden aşağıdaki tek astarı ekledim .bashrc:

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

Şimdi böyle bir şey çalıştırabilirim setgov ondemandve tüm çekirdekler ondemand valisine geçecek .


2
Scaling_governor dosyası root aittir ve sınırlı izinlere sahip olduğundan bu işlem çalışmaz. İzinlerin değiştirilmesi her zaman önerilmez.
Sri

Lütfen user49449'un cevabına yorumumdaki alternatif betiğe bakın.
Sri

6

Tüm çekirdeğin valisini değiştirmek için en kısa komut şudur:

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

Bahsedilen htorque gibi .bashrc dosyasına ekleyebilirsiniz, root olarak çalıştırmanız gerekir sudo setgov performance:

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

2

Belki de bash kodu tamamlamayı ekleyebiliriz:

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

Vali'nin varsayılan olarak 30 saniye sonra Ubuntu 16.04 veya daha yeni sürümlerde yeniden güçlenmeye başladığından beri bunu yapıştırma biçimim (Ubuntu Mate'deyim);

  1. Bu (bir satır) kodunu giriniz (önceki cevabınızdaki switch87’nin izniyle)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. dizindeki dosyaya

    /etc/rc.local
    

Mine, "çıkış 0" 'ın üstündeki bir çizgi ve yorumsuzların altında yorumlanmamış.

"rc.local" bilmeyenler için, komutu sudo olarak çalıştırır. Valiyi değiştirmek için görünen her komutun sudo olarak çalıştırılması gerekiyor.

Valinin güç tasarrufuna geri dönmesini sağlar ve 60 saniye sonra kodu performansa döndürmek için sudo olarak çalıştırır.

"60" 'ı (kopyaladığınız kodda) istediğiniz zaman (saniye cinsinden. 60 = 60 saniye = 1 dakika) değiştirin ve komutu "geciktirmek" istediğiniz komutu yerine getirin (komut kısmında) değişmek.

Aradığım saatler ve saatler dışında bunun için daha kalıcı bir çözüm bulamadım. Bulduğum en iyi çözüm bu ise, birkaç dakika ne yapabileceğini biliyorum. Sağ.

En iyi düzeltme değil, ancak güç tasarrufu işine küçük bir geçiş yaptıktan sonra biraz kalıcı olmasını sağlar. Hemen önyüklemek ve bir oyuna ya da bir şeye atlamak ya da bir şeye atlamak istediğinizde, bir dakika beklemeniz gerekecek, sadece güç kaynağından geri almak ya da üzerindeki zamanlamayı azaltmak için (ne kadar sürdüğüne bağlı olarak) başlamak için her şey, bu nedenle performansa doğru bir şekilde geri dönecektir).

Ve her zaman olduğu gibi, varsayılana geri dönmek için (İnsanların bilgisayarlarının aşırı ısınmasıyla ilgili bazı sorunlar gördüm, bu yüzden ilk etapta güç kaynağına varsayılan ayar yapmış olmaları gerekiyordu) sadece kodu rc.local'dan kaldırın ve yeniden başlatın veya değiştirin İşlemci simgesi gösterge şalterinizle manuel olarak çalıştırın veya çalıştırın;

 sudo /etc/init.d/cpufrequtils restart

terminalde ve veya yeniden başlatın.


1

Bunu çalıştırarak tüm çekirdekler için aynı anda yapabilirsiniz

sudo cpupower frequency-set --governor performance

0

Switch87'nin cevabına dayanarak, tüm işlemcilerle cpufreq-set-allbaşka cpufreq-setşeyler yapmayı sağlayacak basit bir senaryo hazırladım :

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

Şimdi şu şekilde (sonra chmod +xtabii ki) çağrılabilir :

cpufreq-set-all -g powersave

veya

cpufreq-set-all -f 800Mhz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.