FreeBSD는 고온에서 CPU 클럭을 조절합니다

FreeBSD는 고온에서 CPU 클럭을 조절합니다

내가 사용하고 있는 노트북은 냉각 시스템이 좋지 않아서 CPU 온도가 때때로 매우 높은 온도에 도달하며, dmesg에서 볼 수 있듯이 Linux 커널은 CPU 시계를 조정하여 CPU 온도를 낮출 수 있습니다.

[22612.245243] CPU3: Core temperature above threshold, cpu clock throttled (total events = 617268)
...
[22612.257307] CPU3: Core temperature/speed normal
etc

최근에 FreeBSD를 설치해서 가지고 놀았는데, 일부 사용 후 CPU 온도가 정상보다 높아지고 FreeBSD가 조절 대신 재부팅되도록 powerd설정 하더라도 항상 CPU를 최고 속도로 사용한다는 것을 알았습니다. -a hiadaptive -b adaptive -i 85 -r 60 -p 100C 상태를 사용해 보았지만 도움이 되지 않았습니다.

Linux 동작을 얻으려면 어떻게 구성합니까?

답변1

CPU 과열로 인해 방화벽(오래된 노트북)이 종료되는 비슷한 문제가 있었습니다. pfSense 방화벽에서 작동하는 다음 단계를 사용하여 문제를 해결했습니다.

1) FreeBSD 다운로드CPU속도.sh 문서GitHub에서 작성자: dreamcat4

2) 파일 생성CPU속도.sh, 그리고 pfSense 관리 인터페이스를 통해 진단 >> 파일 편집을 사용하여 이전 단계에서 링크된 소스 콘텐츠를 붙여넣습니다.

3) 파일 실행 활성화CPU속도.shfSense 관리 인터페이스에서 진단 >> 명령 프롬프트 및 다음 명령을 사용하십시오.$ chmod +x /[path_to_file]/cpu-speed.sh

4) $ sysctl dev.cpu.0.freq_levels 명령 프롬프트에서 실행하여 사용 가능한 CPU 주파수를 확인합니다.

4) 파일 실행CPU속도.sh[valid_CPU_frq] 사용 명령$ cd /[path_to_file] && ./cpu-speed.sh [valid_CPU_frq]

5) 다음 명령을 사용하여 현재(새) CPU 주파수를 확인합니다.$ sysctl dev.cpu.0.freq

6) 완료되었습니다.

나는 내 CPU에 허용되는 가장 낮은 CPU 코어 주파수를 선택했고 내 CPU의 CPU 코어 온도를 +90C에서 <60C로 영구적으로 낮출 수 있었습니다.

편집하다: 향후 데드 링크를 방지하려면 dreamcat4용 코드가 포함된 파일(위에 링크됨)을 찾으세요.CPU속도.sh다음과 같은:

#!/bin/sh
#
# cpu-speed:
#   Requirements - be the root user, FreeBSD 9.2 or higher.
# 
#   Get or set the CPU frequency. This command with no arguments will
#   print the current CPU frequency. CPU may be idling at it's lowest speed.
#
#   This command takes 1 optional argument - new MAX cpu freq (in Mhz).
#   expressed as an integer number. e.g. "cpu 800" - set max freq 800 Mhz.
#   This MAX figure is the new max frequency it is allowed to clock up to.
#
#   Number is rounded off to the nearest allowed frequency multiplier.
#

show_all_cpu_sysctl_settings()
{
# Most FreeBSD kernel settings are read-only. Some may look like duplicates.
# Very few are read-write (so we use powerd). Some CPU settings depend on the CPU family.

# This command should reveal all the CPU-related key names:
    sysctl - a | grep - i cpu
}

set_cpu_speed()
{
# To change the max clock, we must restart the "powerd" rc.d service 
# with new cmdline arguments. "man powerd" for more information.
    if ["$(id -u)" = "0"]; then
    if [!"$(grep "cpuspeed" " / etc / rc.conf")"]; then
       echo "" >> "/etc/rc.conf"
      echo "powerd_enable=\"YES\"" >> "/etc/rc.conf"

      # make the cmdline argument to -M flag a txt substitution with the txt file "/etc/cpuspeed"
    echo "powerd_flags=\"-M \$(cat /etc/cpuspeed)\"" >> "/etc/rc.conf"
    fi

    if ["$1"]; then
# write our new cpu speed to the txt file "/etc/cpuspeed"
      echo "$1" > / etc / cpuspeed

# restart powerd daemon to read the new cpu speed
      / etc / rc.d / powerd restart > / dev / null
    fi
  fi


}

print_current_cpu_freq()
{
# Report back the current cpu frequency for core "0"
    sysctl dev.cpu.0.freq
}

show_possible_cpu_speeds()
{
# Show a list of all possible cpu frequency steps for core "0"
    sysctl dev.cpu.0.freq_levels
}

main()
{
    set_cpu_speed "$@";
    sleep 1; # give it a chance to update before we check the new value
  print_current_cpu_freq;
    show_possible_cpu_speeds;
}

# Entry point
main "$@"

관련 정보