Batasi penggunaan CPU dalam hal suhu

8

Saya menjalankan proyek komputasi terdistribusi, yang biasanya ingin menggunakan 100% CPU. Bagaimana cara membatasi penggunaan CPU dalam hal suhu, bukan persen penggunaan? Juga, berapa suhu maksimum yang aman untuk menjaga Intel i5 berjalan 24/7? (Tanpa batas CPU FahCore_a4 menyebabkan mesin ini berjalan pada 82 derajat Celcius.)

jeffythedragonslayer
sumber

Jawaban:

8

Di halaman web ini ada skrip bash yang akan berusaha menjaga CPU Anda di bawah suhu yang ditentukan. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Anda hanya perlu menyediakannya dengan suhu maksimum yang Anda inginkan, dan itu akan melambatkan CPU Anda dalam upaya untuk tetap di bawah suhu itu.

Shameless plug- saya menulis dan memelihara skrip di atas.

Sepero
sumber
2
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
fossfreedom
1
skrip bagus .. ide bagus :)
Superbiji
1
berikut adalah bagian-bagian penting: github.com/Sepero/temp-throttle
DmitrySandalov
3

Inilah cara saya menyelesaikannya menggunakan bash. Jika ada yang menghasilkan daemon yang lebih baik (lebih baik bertahan di dekat suhu target), silakan posting.

#!/bin/bash

while true; do
        val=$(sensors | awk '/Core 0/ {print $3}')
        max="+60.0"
        if [[ "$val" < "$max" ]]
        then
                killall cpulimit
                sleep .1
        else
                cpulimit -e FahCore_a4 -l 99 &
                sleep 1
        fi
        clear
        sensors
done
jeffythedragonslayer
sumber
0

CPU itu sendiri memiliki mekanisme di mana ia mematikan sendiri jika terlalu panas. (mungkin tidak jika Anda menonaktifkan interupsi SMI, saya tidak yakin tentang itu.)

Aplikasi ruang pengguna utama adalah lm-sensorspaket. Setelah menginstalnya jalankan sensors-detectuntuk mengaturnya, jika mesin Anda sama, Anda dapat menjalankan ini sekali, dan menggunakan hasil temuan di mana-mana.

Frekuensi CPU mudah dikendalikan melalui subsistem driver cpufreq. lihat https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Anda bisa menulis daemon yang menggunakan sensor lm untuk menyurvei temp dan jika terlalu panas turunkan frekuensi cpu.

pengguna72421
sumber
bahasa apa yang membuat daemon seperti itu menjadi yang paling mudah? bash, python, awk?
jeffythedragonslayer
Saya akan mengatakan bash adalah yang paling sederhana. Ini sebuah contoh (lihat baris 55-66).
Adobe
0

Ini adalah bagaimana saya memecahkan masalah overheating saya yang tidak disebabkan oleh proses tertentu, tetapi oleh kegagalan laptop saya untuk menghilangkan panas yang disebabkan oleh berjalan pada beban CPU yang tinggi untuk periode waktu yang lebih lama. Perbedaan utama dengan solusi yang ditawarkan oleh da code monkey sendiri adalah bahwa saya menggunakan penskalaan frekuensi cpu, alih-alih menggunakan cpulimit pada proses tertentu. Karena saya sudah menginstal dan menjalankan Psensor, saya mendukung Psensor. Daemon seperti monyet kode da yang disarankan juga harus berfungsi, namun diperlukan dua ambang (min dan maks). Dalam Psensor (Sensor Preferences-> Alarm) saya mengatur alarm untuk sensor yang relevan jika menjadi lebih tinggi dari ambang batas tinggi (saya menggunakan 85) atau lebih rendah dari ambang batas rendah (saya menggunakan 80). Dalam Preferensi-> Sensor-> Skrip dieksekusi ketika alarm dinaikkan Saya memanggil skrip saya heatcontrol.sh seperti ini:

/ALLUSER/heatcontrol.sh powersave ondemand 82

Parameter pertama adalah scaling_governor yang valid yang mengurangi frekuensi CPU, mis. Hemat daya. Parameter kedua adalah standar scaling_governor - ondemand untuk sebagian besar sistem. Parameter ketiga adalah suhu antara ambang rendah dan tinggi (nilai pastinya tidak penting). Psensor menambahkan dua parameter lagi: id sensor dan suhu yang dilaporkan.

Dan ini skrip heatcontrol.sh saya:

#!/bin/bash
 # TempNZ is temperature reported by Psensor; strip of trailing °C
TempNZ=$5 
bnum=`expr index "$TempNZ" "°"`
if (( bnum < 2 )); then
    echo "ERROR"
fi
TempNZ=${TempNZ:0:$(($bnum-1))}
STR=$1
# Is this a low threshold alarm?
if [ "$TempNZ" -le "$3" ]; then
    STR=$2
fi
sudo sh -c "echo '$STR' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
# echo new scaling_governor
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# play sound - audio feedback - optional
paplay /usr/share/sounds/ubuntu/stereo/message-new-instant.ogg

Bekerja dengan baik untuk saya (UBUNTU 14,04 LTS).

Menjadi pemula untuk Linux dan bash, saya menggunakan sejumlah sumber daya, termasuk:

https://wiki.archlinux.org/index.php/CPU_frequency_scaling

http://elinux.org/Jetson/Performance#Viewing_the_current_CPU_status

pengguna369752
sumber