ฉันจะตั้งค่าการปรับสเกลความถี่ของ CPU สำหรับคอร์ทั้งหมดในครั้งเดียวได้อย่างไร


37

ฉันต้องการตั้งค่าการปรับสเกลความถี่ของ CPU สำหรับคอร์ทั้งหมดพร้อมกันแทนที่จะทำทีละคอร์สำหรับแต่ละคอร์ มีวิธีทำเช่นนี้หรือไม่?

(ฉันรู้ว่ามันจะง่ายที่จะสะท้อนผู้ว่าราชการ/sys/devices/system/cpu/cpu*/cpufreq/scaling_governorแต่ฉันไม่ได้มองหาวิธีการแก้ปัญหาที่กำหนดเอง.)


2
ด้วย "โซลูชันที่กำหนดเอง" คุณหมายถึงว่าเชลล์สคริปต์ไม่สามารถยอมรับได้จำเป็นต้องมีปุ่ม GUI ในตัวใช่หรือไม่
jg-faustus

ฉันแค่สงสัยว่ามีวิธีแก้ไขปัญหาอยู่แล้วในการติดตั้งมาตรฐาน (ไม่จำเป็นต้องมี GUI)
htorque

ตรวจสอบหน้านี้: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linuxภายใต้ "การใช้งานเดเบียน": เห็นได้ชัดว่าเป็นไปได้ที่จะเปลี่ยนค่าเริ่มต้นการบูตและมีเครื่องมือ userspace ที่เรียกว่า powernowd (นี่คือความคิดเห็นมากกว่าการตอบกลับเพราะโพสต์มาจากปี 2008 และฉันยังไม่ได้ทดสอบว่ามันยังใช้งานได้หรือไม่ ... )
jg-faustus

คำตอบ:


25

ฉันยังคงเป็น linux noob แต่คุณไม่คิดว่า cpufrequtils ให้คุณทำได้โดยใช้ (มันไม่ได้รวมอยู่ใน Ubuntu OS แต่มีอยู่ในที่เก็บ)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • การ-rตั้งค่าสถานะใช้เพื่อตั้งค่าการเปลี่ยนแปลงสำหรับแกนทั้งหมด ("ฮาร์ดแวร์ที่เกี่ยวข้องทั้งหมด")

6
ตัวเลือกที่เกี่ยวข้องกับ -r ไม่ได้ทำเพื่อแกนทั้งหมด เราต้องระบุหมายเลข cpu ด้วยตัวเลือก -c <number> อย่างไรก็ตามสคริปต์นี้จะทำเพื่อ cpus ทั้งหมดในครั้งเดียว: สำหรับ ((i = 0; i <$ (nproc); i ++)); ทำ cpufreq-set -c $ i -r -g ประสิทธิภาพ เสร็จแล้ว
Sri

6
@Sri ถูกต้อง cpufreq-setในความเป็นจริงขาดฟังก์ชั่นที่เรียบง่าย แต่จำเป็นที่สุด ผู้คนจำนวนมากเนื่องจากเคาน์เตอร์ลงคะแนนแสดงให้เห็นอย่างชัดเจนนั้นไม่ได้รับรู้เพราะคำอธิบายของมันเป็นเพียงการทำให้เข้าใจผิดมากเกินไป
poige

2
ใครให้ +1 เหล่านี้โดยไม่มีการทดสอบ ???? มันไม่ทำงานเลย ฉันโพสต์วิธีแก้ปัญหาการทำงานที่ง่ายที่สุดที่ฉันสามารถหาได้
switch87

20

ฉัน googled มากและฉันคิดว่ามันเป็นไปไม่ได้ดังนั้นฉันจึงเพิ่มหนึ่งซับต่อไปนี้ใน.bashrc:

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

ตอนนี้ฉันสามารถเรียกใช้สิ่งที่ชอบsetgov ondemandและแกนทั้งหมดจะสลับไปOnDemandผู้ว่าราชการจังหวัด


2
สิ่งนี้ไม่ทำงานเนื่องจากไฟล์ scaling_governor เป็นเจ้าของโดย root และมีการ จำกัด สิทธิ์ ไม่แนะนำให้เปลี่ยนสิทธิ์เสมอไป
ศรี

โปรดดูสคริปต์ทางเลือกในความคิดเห็นของฉันเพื่อคำตอบของ user49449
ศรี

6

คำสั่งสั้นที่สุดในการเปลี่ยนผู้ว่าการของแกนทั้งหมดมีดังต่อไปนี้:

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

คุณสามารถเพิ่มลงใน. bashrc เช่น htorque ที่กล่าวถึงคุณจะต้องเรียกใช้เป็น root sudo setgov performance:

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

2

อาจเพิ่มโค้ด bash ให้สมบูรณ์ในขณะที่เราดำเนินการ:

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

วิธีที่ฉันตั้งค่านี้ติดตั้งแต่ผู้ว่าการเริ่มต้นกลับสู่ powersave หลังจากประมาณ 30 วินาทีในขณะนี้ใน Ubuntu 16.04 หรือใหม่กว่า (ฉันอยู่ใน Ubuntu Mate)

  1. ใส่รหัสนี้ (หนึ่งบรรทัด) (ขอบคุณความอนุเคราะห์ของ switch87 ในคำตอบก่อนหน้า)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. ลงในไฟล์ในไดเรกทอรี

    /etc/rc.local
    

Mine เป็นบรรทัดด้านบน "exit 0" และไม่ใส่เครื่องหมายข้อคิดเห็นภายใต้คอมเม้นท์

"rc.local" สำหรับผู้ที่ไม่ทราบว่าจะรันคำสั่งเป็น sudo คำสั่งใด ๆ ที่ดูเหมือนว่าจะเปลี่ยนผู้ว่าราชการจะต้องเรียกใช้เป็น sudo

ช่วยให้ผู้ว่าการรีเซ็ตกลับสู่ powersave และเรียกใช้รหัสเป็น sudo หลังจาก 60 วินาทีเพื่อเปลี่ยนกลับเป็นประสิทธิภาพ

เปลี่ยน "60" (ในรหัสที่คุณคัดลอก) เป็นเวลาใด ๆ (เป็นวินาที 60 = 60 วินาที = 1 นาที) คุณต้องหน่วงเวลาคำสั่งและ "ประสิทธิภาพ" (ในส่วนคำสั่ง) เป็นผู้ว่าราชการที่คุณต้องการ เปลี่ยนไป.

จากชั่วโมงและชั่วโมงในการค้นหาของฉันฉันไม่พบการแก้ไขที่ถาวรสำหรับเรื่องนี้มากกว่านี้ ฉันคิดว่าสองสามนาทีว่ามันอยู่ใน powersave ถ้านี่คือการแก้ไขที่ดีที่สุดที่ฉันได้พบใช่ไหม? ขวา.

ไม่ใช่การแก้ไขที่ดีที่สุด แต่มันทำให้มันค่อนข้างถาวรหลังจากที่มันเปลี่ยนไปใช้สิ่งเล็ก ๆ น้อย ๆ หากคุณต้องการบูตขึ้นและกระโดดเข้าสู่เกมหรือสิ่งที่คุณจะต้องรอหนึ่งนาทีสำหรับรหัสที่คุณเพิ่งใส่เพื่อสลับกลับจาก powersave หรือลดระยะเวลาในมัน (ขึ้นอยู่กับระยะเวลาที่ใช้ ทุกอย่างจะเริ่มขึ้นดังนั้นมันจะเปลี่ยนกลับไปใช้ประสิทธิภาพอย่างถูกต้อง)

และเช่นเคยเพื่อย้อนกลับไปสู่ค่าเริ่มต้น (ฉันเคยเห็นปัญหาบางอย่างเกี่ยวกับพีซีของผู้คนที่ร้อนเกินไปซึ่งเป็นสาเหตุว่าทำไมพวกเขาอาจทำให้ระบบประหยัดพลังงานในตอนแรก) เพียงแค่ลบรหัสจาก rc.local และรีบูตหรือเปลี่ยนกลับ ด้วยตนเองด้วยตัวบ่งชี้ไอคอน cpu สลับหรือเรียกใช้;

 sudo /etc/init.d/cpufrequtils restart

ในเทอร์มินัลและหรือรีบูต


1

คุณสามารถทำเช่นนี้สำหรับทุกแกนได้ในครั้งเดียว

sudo cpupower frequency-set --governor performance

0

จากคำตอบของ switch87 ฉันสร้างสคริปต์ง่าย ๆcpufreq-set-allซึ่งจะอนุญาตให้ทำcpufreq-setสิ่งอื่นกับ 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

ตอนนี้มันสามารถเรียกใช้ (หลังจากchmod +xแน่นอน) เช่นนี้:

cpufreq-set-all -g powersave

หรือ

cpufreq-set-all -f 800Mhz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.