온도 측면에서 CPU 사용량 제한 온도 측면에서 CPU

분산 컴퓨팅 프로젝트를 실행합니다. 일반적으로 CPU의 100 %를 사용하려고합니다. 백분율 사용 대신 온도 측면에서 CPU 사용을 어떻게 제한합니까? 또한, 인텔 i5를 24/7로 운영하기위한 최대 안전 온도는 얼마입니까? (CPU 제한이 없으면 FahCore_a4로 인해이 머신이 82도에서 실행됩니다.)



답변

이 웹 페이지에는 지정된 온도 이하로 CPU를 유지하는 bash 스크립트가 있습니다. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

원하는 최대 온도를 제공하면 해당 온도 이하로 유지하기 위해 CPU를 조절할 수 있습니다.

뻔뻔한 플러그-나는 위의 스크립트를 작성하고 유지합니다.


답변

다음은 bash를 사용하여 해결 한 방법입니다. 누구든지 더 나은 데몬을 발견하면 (목표 온도 근처에 머무르는 것이 좋습니다) 게시하십시오.

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


답변

CPU 자체에는 너무 뜨거워지면 자체 전원을 끄는 메커니즘이 있습니다. (SMI 인터럽트를 비활성화하면 확실하지 않습니다.)

기본 사용자 공간 응용 프로그램은 lm-sensors패키지입니다. 설치 후 설치 sensors-detect를 설정 한 후 컴퓨터가 동일하면 한 번만 실행하면 결과를 어디에서나 사용할 수 있습니다.

CPU 주파수는 cpufreq 드라이버 서브 시스템을 통해 쉽게 제어됩니다. https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling을 참조 하십시오

lm- 센서를 사용하여 온도를 폴링하고 너무 뜨거울 경우 CPU 주파수를 낮추는 데몬을 작성할 수 있습니다.


답변

이것은 특정 프로세스로 인한 것이 아니라 랩톱이 CPU 부하가 높은 상태에서 장시간 작동하여 발생하는 열을 발산하지 못하는 과열 문제를 해결하는 방법입니다. da 코드 원숭이가 제공하는 솔루션과의 주요 차이점은 특정 프로세스에서 cpulimit를 사용하는 대신 CPU 주파수 스케일링을 사용한다는 것입니다. 어쨌든 Psensor가 설치되어 실행 중이므로 Psensor를 피기 백합니다. da code monkey와 같은 데몬도 작동해야하지만 두 개의 임계 값 (최소 및 최대)이 필요합니다. Psensor (센서 기본 설정-> 알람)에서 높은 임계 값보다 높거나 (85 사용) 낮은 임계 값보다 낮 으면 (80 사용) 관련 센서에 대한 경보를 설정했습니다. 환경 설정-> 센서-> 알람이 발생할 때 실행되는 스크립트에서 다음과 같이 스크립트 heatcontrol.sh를 호출합니다.

/ALLUSER/heatcontrol.sh 절전 요구 사항 82

첫 번째 매개 변수는 유효한 scaling_governor로 CPU 주파수를 줄입니다 (예 : 절전). 두 번째 매개 변수는 기본 scaling_governor-대부분의 시스템에서 필요시입니다. 세 번째 매개 변수는 하한과 상한 사이의 온도입니다 (정확한 값은 중요하지 않습니다). Psensor는 센서 ID와보고 된 온도의 두 가지 매개 변수를 추가합니다.

그리고 이것은 내 heatcontrol.sh 스크립트입니다.

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

나를 위해 잘 작동합니다 (UBUNTU 14.04 LTS).

Linux와 bash의 초보자이므로 다음과 같은 많은 리소스를 사용했습니다.

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

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


답변