LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4351|回复: 7

如何解决CPU过热100度自动关机【版主是否考虑加个精】

[复制链接]
发表于 2009-6-19 17:21:21 | 显示全部楼层 |阅读模式
使用gentoo的,和重新编译过内核的Linux朋友可能会遇到这样的问题,当你正在编译某个大型软件
(比如gcc),CPU满负荷运转半个小时左右,Linux忽然会提示类似如下的信息:
  1. Critical temperature reached (100 C), shutting down
复制代码

然后就开始进入init脚本的关机流程。于是,稍微大一些的软件就无法编译了。
我也遇到了这个问题,并被困扰了一个半月,在绕了一些圈子以后,终于让我找到了问题所在和解决的。

首先,这个问题和内核的acpi模块以及acpid守护进程无关,和processer.ko、fan.ko、thermal.ko、button.ko无关,和/proc/acpi/目录下的文件无关,和/sys/devices/system/cpu/目录下的文件无关。

这种过热关机的问题只和

Power Management Options --->
CPU Frequency Scaling --->


有关,CPU Frequency Scaling是kernel中对CPU自动降频功能的支持。


  1.     [*] CPU Frequency scaling
  2.     [ ] Enable CPUfreq debugging
  3.     <*> CPU frequency translation statistics
  4.     [*] CPU frequency translation statistics details
  5.     Default CPUFreq governor (ondemand) --->
  6.     -*- 'performance' governor
  7.     <*> 'powersave' governor
  8.     <*> 'userspace' governor for userspace frequency scaling
  9.     <*> 'ondemand' cpufreq policy governor
  10.     <*> 'conservative' cpufreq governor
  11.     *** CPUFreq processor drivers ***
  12.     <*> ACPI Processor P-States driver
  13.     <m> AMD Mobile K6-2/K6-3 PowerNow!
  14.     <m> AMD Mobile Athlon/Duron PowerNow!
  15.     <m> AMD Opteron/Athlon64 PowerNow!
  16.     <m> Cyrix MediaGX/NatSemi Geode Suspend Modulation
  17.     <m> Intel Enhanced SpeedStep (deprecated)
  18.     -*- Built-in tables for Banias CPUs
  19.     <m> Intel Speedstep on ICH-M chipsets (ioport interface)
  20.     <m> Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
  21.     <m> Intel Pentium 4 clock modulation
  22.     <m> nVidia nForce2 FSB changing
  23.     <m> Transmeta LongRun
复制代码


内核中的CPU Frequency Scaling功能基本上可以分为三个部分:基本选项,governor(策略)模块和驱动模块。
开头的四行是四项基本选项,
  • CPU Frequency scaling表示启用CPU降频功能
    [ ] Enable CPUfreq debugging 表示启用该功能的debug功能
    <*> CPU frequency translation statistics表示启用通过sysfs查看CPU降频状态的功能
  • CPU frequency translation statistics details表示启动上面那个功能的详细信息;

    “Default CPUFreq governor (ondemand) --->”这一行及其以下的部分是governor(策略)模块,目前共有'performance' 'powersave''userspace''ondemand''conservative'五个降频策略模块,其中:
    'performance':高性能,就是CPU一直坚持使用最高频率工作,
    'powersave':节能,CPU一直坚持使用最低频率工作,
    'userspace':用户空间程序,CPU的频率根据用户空间的程序,听过/sys文件系统进行设置,
    'ondemand':按需动态,CPU频率根据实际运行情况动态调整,
    'conservative':保守动态,CPU频率根据实际运行情况,保守的动态调整;

    *** CPUFreq processor drivers ***以下的部分是针对这种CPU的驱动模块。我的Intel T2330使用的是ACPI Processor P-States driver。

    以上是kernel对于CPU降频功能的支持。前面的列表可以作为大家配置CPU Frequency Scaling时的参考,对于四项基本选项除debugging按需y之,其余的坚决y之;五个governor建议y之,至少也要m之;驱动模块,系统在用的CPU对应的驱动模块y之或m之,其余的m之或n之。

    插曲:内核配置的YNM
    Linux的内核配置包含很多选项。对于每一个配置选项,用户可以回答y、m或n。其中y表示将相应特性的支持或设备驱动程序编译进内核;m表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;n表示内核不编译包含相应特性或驱动程序。
    可以参看这篇文章如何编译Linux的内核

    如果编译内核的时候没有启用CPU自动降频的支持、或者没有编译需要的驱动模块和governor(策略)模块、或者系统启动的时候没有加载合适的降频驱动模块和governor(策略)模块,或者没有设置合适的当前governor(策略)(比如设置的是performance governor),如果硬件的降温设施不够强大,CPU便会逐渐过热,当达到一个阈值时系统为了自我保护,开始自动关机。这便是困扰了我一个半月的自动关机的原因。

    了解了原理,解决办法就很简单了。正确配置内核中的CPU Frequency Scaling功能,并配置cpu-frequtils软件设置合适的governor,就可以解决问题了。
    1. #cpufreq-set -g ondemand -c 0
    复制代码

    更多关于计算机电源管理和CPU降频的消息,强烈推荐gentoo的电源管理指导
  • 发表于 2009-6-19 22:38:38 | 显示全部楼层
    这不是什么cpu都可以吧,你是什么cpu
    回复 支持 反对

    使用道具 举报

    发表于 2009-6-20 00:18:30 | 显示全部楼层
    這正是像我這樣的新手所需要的,强烈支持!
    希望論壇能多一些這種能普及基础知識的帖子,大家分享一下自己發現問題,解決問題的過程吧!
    回复 支持 反对

    使用道具 举报

    发表于 2009-6-20 01:09:15 | 显示全部楼层
    Just emerge sys-power/cpufrequtils
    回复 支持 反对

    使用道具 举报

    发表于 2009-6-20 01:48:58 | 显示全部楼层
    Post by ltwan2001;1999666
    這正是像我這樣的新手所需要的,强烈支持!
    希望論壇能多一些這種能普及基础知識的帖子,大家分享一下自己發現問題,解決問題的過程吧!


    http://www.gentoo.org/doc/zh_cn/power-management-guide.xml
    回复 支持 反对

    使用道具 举报

    发表于 2009-6-20 02:43:29 | 显示全部楼层


    找到寶了,哈哈~~~~
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2009-6-20 22:16:05 | 显示全部楼层
    Post by nainaide;1999677
    Just emerge sys-power/cpufrequtils


    nainaide兄,如果内核没有正确配置,CPU降频驱动没有内置或载入模块的话,cpufrequtils会提示没有合适的驱动而不可用的。
    回复 支持 反对

    使用道具 举报

    发表于 2009-6-20 22:49:27 | 显示全部楼层
    Post by lophyxp;1999914
    nainaide兄,如果内核没有正确配置,CPU降频驱动没有内置或载入模块的话,cpufrequtils会提示没有合适的驱动而不可用的。

    当然。   

    我的cpu以前常在98度,网上说是intel cpu的问题,T60美国保修期内是给换新的cpu解决的。

    我目前的解决办法是:
    (1)cpufrequtils 降频
    (2)给笔记本买了个酷冷笔记本散热器
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表