Làm cách nào để đặt bộ điều chỉnh tỷ lệ tần số CPU cho tất cả các lõi cùng một lúc?


37

Tôi muốn đặt bộ điều chỉnh tỷ lệ tần số CPU cho tất cả các lõi cùng một lúc thay vì thực hiện riêng lẻ cho từng lõi. Có cách nào để làm việc này không?

(Tôi biết sẽ rất dễ dàng để nhắc lại người thống đốc /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, nhưng tôi không tìm kiếm một giải pháp tùy chỉnh.)


2
Với "giải pháp tùy chỉnh", bạn có nghĩa là tập lệnh shell không được chấp nhận, nó có cần phải là nút GUI tích hợp không?
jg-faustus

Tôi chỉ tự hỏi nếu đã có một giải pháp trong một cài đặt tiêu chuẩn (không cần phải có GUI).
htorque

Kiểm tra trang này: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux trong phần "thực hiện debian": Rõ ràng có thể thay đổi mặc định khởi động và có một công cụ không gian người dùng được gọi là powernowd. (Đây là một nhận xét thay vì trả lời vì bài đăng từ năm 2008 và tôi đã không kiểm tra nếu nó vẫn hoạt động ...)
jg-faustus

Câu trả lời:


25

Tôi vẫn là một linux noob nhưng bạn không nghĩ cpufrequtils cho phép bạn làm điều đó bằng cách sử dụng (nó không được gói trong hệ điều hành Ubuntu nhưng có trong kho lưu trữ)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • Các -rcờ được sử dụng để thiết lập các thay đổi cho tất cả ( "liên quan đến tất cả các phần cứng") lõi

6
Tùy chọn -r không làm điều đó cho tất cả các lõi. Chúng ta phải chỉ định số cpu với tùy chọn -c <number> tuy nhiên tập lệnh này sẽ thực hiện điều đó cho tất cả các cpus trong một lần: for ((i = 0; i <$ (nproc); i ++)); làm cpufreq-set -c $ i -r -g hiệu suất; xong
Sri

6
Chính xác, @Sri đã đúng. cpufreq-settrong thực tế thiếu chức năng cuối cùng đơn giản nhưng cần thiết. Rất nhiều người vì các phiếu bầu này cho thấy rõ ràng là không biết về nó bởi vì mô tả của nó chỉ đơn giản là sai lệch để đứng đầu.
poige

2
Ai cho những +1 này mà không cần kiểm tra ???? Điều này hoàn toàn không hoạt động. Tôi đã đăng giải pháp làm việc đơn giản nhất mà tôi có thể tìm thấy.
switch87

20

Tôi đã googled rất nhiều và tôi nghĩ rằng nó chỉ là không thể, vì vậy tôi đã thêm một lớp lót sau đây vào .bashrc:

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

Bây giờ tôi có thể chạy một cái gì đó như setgov ondemandvà tất cả các lõi sẽ chuyển sang thống đốc ondemand .


2
Điều này không hoạt động vì tập tin scaling_gocateor được sở hữu bởi root và có quyền hạn chế. Thay đổi quyền không phải lúc nào cũng được khuyến nghị.
Sri

Vui lòng xem tập lệnh thay thế trong nhận xét của tôi cho câu trả lời của user49449.
Sri

6

lệnh ngắn nhất để thay đổi thống đốc của tất cả các lõi là như sau:

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

Bạn có thể thêm nó vào .bashrc như htorque đã đề cập, bạn sẽ phải chạy nó dưới quyền root sudo setgov performance:

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

2

Cũng có thể thêm hoàn thành mã bash, trong khi chúng tôi đang ở đó:

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

Cách tôi thiết lập điều này sẽ tồn tại kể từ khi thống đốc mặc định trở lại quyền hạn sau khoảng 30 giây kể từ Ubuntu 16.04 trở lên gần đây (Tôi đang dùng Ubuntu Mate);

  1. Đặt mã này (một dòng) (cảm ơn bạn, lịch sự của switch87 trong câu trả lời trước)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. vào tập tin trong thư mục

    /etc/rc.local
    

Của tôi là một dòng trên "thoát 0" và không bị thiếu, dưới những người nhận xét.

"RC.local" cho những ai không biết, nó chạy lệnh dưới dạng sudo. Bất kỳ lệnh nào dường như, để thay đổi thống đốc, cần phải được chạy như sudo.

Nó cho phép thống đốc thiết lập lại về powersave và chạy mã dưới dạng sudo sau 60 giây để thay đổi lại thành hiệu suất.

Thay đổi "60" (trong mã bạn sao chép) thành bất kỳ lúc nào (tính bằng giây. 60 = 60 giây = 1 phút) bạn cần trì hoãn lệnh và "hiệu suất" (trong phần lệnh) thành điều chỉnh mà bạn muốn thay đổi thành.

Trong số giờ và giờ tìm kiếm của tôi, tôi không tìm thấy cách khắc phục lâu dài hơn cho vấn đề này. Tôi hình dung một vài phút là trên powersave nếu đây là cách khắc phục tốt nhất tôi tìm thấy, phải không? Đúng.

Không phải là sửa chữa tốt nhất, nhưng nó làm cho nó phần nào vĩnh viễn sau khi nó chuyển sang điều khoản nhỏ. Nếu bạn muốn khởi động ngay và nhảy vào một trò chơi hoặc thứ gì đó bạn sẽ phải đợi một phút cho mã bạn vừa nhập để chuyển nó trở lại từ powersave hoặc hạ thấp thời gian trên đó (tùy thuộc vào thời gian cần thiết mọi thứ để khởi động để nó sẽ quay trở lại hiệu suất chính xác).

Và, như mọi khi, để trở lại mặc định (Tôi đã thấy một số vấn đề với PC của mọi người quá nóng, đó là lý do tại sao họ có thể đã mặc định nó để cấp quyền ở vị trí đầu tiên) chỉ cần xóa mã khỏi RC.local và khởi động lại hoặc chuyển nó trở lại thủ công với trình chuyển đổi chỉ báo biểu tượng cpu của bạn hoặc chạy;

 sudo /etc/init.d/cpufrequtils restart

trong thiết bị đầu cuối và hoặc khởi động lại.


1

Bạn có thể làm điều này cho tất cả các lõi cùng một lúc bằng cách chạy

sudo cpupower frequency-set --governor performance

0

Dựa trên câu trả lời của switch87, tôi đã tạo một tập lệnh đơn giản cpufreq-set-all, cho phép thực hiện những cpufreq-setviệc khác với tất cả các 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

Bây giờ nó có thể được gọi (sau chmod +x, tất nhiên) như thế này:

cpufreq-set-all -g powersave

hoặc là

cpufreq-set-all -f 800Mhz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.