มีวิธี จำกัด การใช้ CPU โดยรวมหรือไม่


23

แล็ปท็อปของฉัน (HP ที่มีชิป i3) มีความร้อนสูงเกินไปอย่างบ้าคลั่งทุกครั้งที่ฉันเรียกใช้กระบวนการที่ต้องใช้ทรัพยากรจำนวนมาก (เช่นการรวบรวมขนาดใหญ่การแยก tarballs ขนาดใหญ่หรือ ... การเล่น Flash)

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

  1. ฉันผิดในการให้เหตุผลของฉัน?
  2. ฉันจะดำเนินการรวมการใช้ CPU ต่อได้อย่างไร

ถ้าช่วยได้ฉันใช้ Debian


ฉันเชื่อว่าคุณสามารถทำได้กับกลุ่ม cg ปล่อยให้นี่เป็นตัวชี้แทนคำตอบเพราะฉันไม่แน่ใจและฉันไม่แน่ใจว่า ...
Derobert

คุณสามารถลองใช้กลุ่ม cg ได้ นี่คือ quesiton กับปัญหาที่คล้ายกัน: unix.stackexchange.com/questions/14537/ …
Grzegorz Wierzowiecki

คำตอบ:


10

ฉันไม่รู้ว่าการ จำกัด CPU ให้กับทั้งระบบเป็นสิ่งที่ทำได้โดยไม่ต้องแฮ็ค แต่คุณสามารถ จำกัด จำนวน CPU ที่ใช้โดยกระบวนการเดียวโดยใช้cpulimit

วิธีเดียวที่ฉันคิดว่าคุณสามารถใช้สิ่งนี้ได้อย่างมีประสิทธิภาพคือการเขียนสคริปต์ตัวคลุม (ไม่สามารถเรียกมันว่าสคริปต์มันมีขนาดเล็กมาก) สำหรับแอปพลิเคชันที่คุณรู้ว่าเป็นหมูทรัพยากร ตัวอย่างเช่นคุณพบว่า google-chrome ใช้ CPU เป็นจำนวนมากคุณสามารถแทนที่ไบนารีของ Google-chrome ในพา ธ ของคุณด้วยสิ่งต่อไปนี้:

#! /bin/bash
cpulimit --limit 70 /usr/bin/google-chrome-bin

ฉันยังไม่ได้ทดสอบสิ่งนี้ดังนั้นจึงเอามันไปด้วยเม็ดเกลือ จากเว็บไซต์ของ cpulimit ดูเหมือนว่าคุณอาจจะสามารถตั้งกฎสำหรับการ จำกัด ซีพียูในแอปพลิเคชันต่างๆ ฉันไม่แน่ใจคุณจะต้องดู


10

อีกทางเลือกหนึ่งที่ไม่ได้กล่าวถึงคือcpufrequtilsฉันได้ติดตั้งและใช้งานบนแล็ปท็อปของฉันกับ Debian 6 ซึ่งช่วยให้คุณเปลี่ยนอัลกอริทึม ( ผู้ว่าการรัฐในcpufrequtilsคำศัพท์) ที่เคอร์เนลใช้เพื่อปรับอัตรานาฬิกาขึ้นและลง ในการโหลด - โดยเฉพาะuserspaceผู้ว่าการอนุญาตให้คุณล็อคความถี่ในสิ่งที่คุณเลือก (แน่นอนว่าซีพียูจะต้องสามารถทำงานด้วยความเร็วนี้ได้)

ฉันเคยใช้มันเพื่อล็อค Atom ที่ 800MHz แทน 1.6GHz เช่น มันใช้งานง่ายมาก


1
นี่ควรเป็นคำตอบที่ยอมรับได้ (หรือ temp_throttle)
Vajk Hermecz

6

คุณสามารถ จำกัด แกน CPU ของคุณโดยอัตโนมัติตามอุณหภูมิโดยใช้สคริปต์temp_throttle มันสามารถทำงานในพื้นหลังในขณะที่คุณมุ่งเน้นสิ่งที่สำคัญกว่า ตัวอย่างเกี่ยวกับวิธีการเรียกใช้:

sudo ./temp_throttle.sh 80 # Will limit CPU cores when 80C is reached.

* ข้อสงวนสิทธิ์ - ฉันเป็นผู้เขียนและดูแล temp_throttle *


3

เข้าไปที่ไบออสและทำการโอเวอร์คล็อกซีพียู - ไม่จำเป็นต้องมีความฉลาด


ไบออสที่ไม่รองรับการโอเวอร์คล็อกนั้นเกี่ยวข้องกับอะไร?
daboross

1
ใช้ cgroups แต่ tbh ฉันไม่เห็นไบออสที่ไม่สามารถเปลี่ยนการตั้งค่าความถี่ได้เลย
Sirex

แล็ปท็อป Alienware m14x r1 ของฉัน (สร้างขึ้นค่อนข้างแย่) ไม่มีการตั้งค่าเช่นนี้ไม่มีอะไรมากมายสำหรับการเปลี่ยนแปลงในไบออสนอกเหนือจากลำดับการบูตและเวลาของระบบ
daboross


1

ไม่จำเป็นต้องเปลี่ยนผู้ว่าราชการคุณเพียงแค่ต้องเปลี่ยนค่าของ/sys/devices/system/cpu/*/cpufreq/scaling_max_freqซีพียูแต่ละคอร์

เช่นนี้สำหรับวง:

for f in /sys/devices/system/cpu/*/cpufreq/scaling_max_freq; do
    sudo sh -c "echo $1 > $f" 
done

ดูสคริปต์ setcpu ของฉันด้วย

( พบคำสั่งดั้งเดิมที่นี่ )


-2

คุณสามารถใช้reniceเพื่อเปลี่ยนลำดับความสำคัญของกระบวนการโดยกระบวนการหรือรหัสกลุ่ม จากตัวอย่างสำหรับrenice:

  1. ปรับค่า nice เพื่อที่ ID กระบวนการ 987 และ 32 จะมีค่า nice ที่ต่ำกว่า:

    renice -n 5 -p 987 32

  2. ปรับค่า nice เพื่อให้ ID กลุ่ม 324 และ 76 มีค่า nice ที่สูงขึ้นหากผู้ใช้มีสิทธิ์ที่เหมาะสมในการทำเช่นนั้น:

    renice -n -4 -g 324 76

  3. ปรับค่า nice เพื่อให้ ID ผู้ใช้ที่เป็นตัวเลข 8 และผู้ใช้ sas จะมีค่า nice ที่ต่ำกว่า: renice -n 4 -u 8 sas


4
หมายเหตุเพิ่มเติมสำหรับคำตอบเท่านั้น: renice, nice หรือเครื่องมือที่คล้ายกันอื่น ๆ จะไม่ส่งผลกระทบต่ออุณหภูมิของ CPU กระบวนการที่เป็นปัญหาจะกินวงจรของ CPU ต่อไป
Rufo El Magufo

2
ดีและ renice จะไม่ จำกัด ปริมาณการใช้ CPU พวกเขาเพียงแค่กำหนดลำดับความสำคัญ หากไม่มีสิ่งใดทำงานในเวลาเดียวกันกระบวนการจะยังคงใช้กำลังการประมวลผลทั้งหมด
rahmu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.