在 Chrome 上观看视频时,CPU 消耗会非常高(这显然不应该)。这是由于最近出现了一些退化(以前不会发生),但这不是重点。我们假设有一些东西消耗了大量 CPU。
我禁用了 intel_powerclamp 和 intel_rapl,因此当 CPU 消耗变高时,我希望冷却风扇能够尽可能快地加速以冷却 CPU。
相反,风扇永远无法达到最高速度,甚至无法接近最高速度。整个系统速度变慢,变得无响应,与启用 intel_powerclamp 时的情况非常相似。但 top 中没有显示任何“kidle_inject”进程。
冷却风扇转速不够快的证据是,如果我在系统启动前(在启动菜单中)重新启动计算机,风扇就会疯狂旋转。这证明 (1) 风扇能够比操作系统运行时旋转得更快,以及 (2) 硬件“认为”温度确实需要它,直到操作系统启动并认为它知道得更多。
对此我只能想到两种解释:
A) 某些软件配置限制了风扇速度(可能是因为配置时假设 intel_powerclamp 也在那里,并且会完成一半的工作)。因此,由于风扇当前的速度不足以冷却 CPU,并且由于 intel_powerclamp 不在限制 CPU 使用,因此 CPU 的一些内部硬件保护启动并对其进行节流,以防止其烧坏(或达到导致其突然关闭的硬限制) OF
B) 除了我已禁用的 intel_powerclamp 和 intel_rapl(我了解 intel_powerclamp 如何工作,但我不知道 intel_rapl 如何工作)之外,还有一些其他驱动程序以类似的方式工作,降低 CPU 速度以减少电量消耗。
在情况 (A) 中,我需要修复配置,以便风扇能够以最大容量运行,看看这是否足以降低温度并防止硬件保护启动。
如果情况 (B),我可能想尝试
[B1] 禁用其他软件或半软件的 CPU 节流机制,看看风扇是否足够,或者
[B2] 以某种方式调整一些权重因子或阈值或优先级配置,以便在 CPU 节流启动之前允许风扇运行得更快(并且甚至希望防止这种情况发生)。
有人知道如何确定它是(A)还是(B)以及如何解决这个问题?
我阅读了有关配置 Thermald 的信息https://wiki.ubuntu.com/Kernel/PowerManagement/ThermalIssues但它非常不清楚,并且没有实际的例子。
答案1
我刚刚用 thermald 完成了这个练习。首先,我应该指出,即使在最新版本的 16.04 中,thermald 也存在问题,因为它无法读取其配置文件。这个问题现在已经修复,因此请确保您已安装所有更新。
此外,您引用的页面非常好,还包含一个示例 thermal-conf.xml 配置文件。
接下来,假设您已经安装了 thermald,请停止该进程,并在 --no-daemon 模式下重新启动它,并仔细观察输出。它将为您提供配置您自己的 thermal-conf.xml 文件所需的大部分答案。注意 cdev(冷却设备)等。
sudo 服务 thermald 停止
sudo thermald --no-daemon --loglevel=debug
这是我的自定义 thermal-conf.xml 文件的副本,供您查看:
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Toshiba Laptop</Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalSensors>
<ThermalSensor>
<Type>x86_pkg_temp</Type>
<Path>/sys/class/thermal/thermal_zone0/</Path>
<AsyncCapable>1</AsyncCapable>
</ThermalSensor>
</ThermalSensors>
<ThermalZones>
<ThermalZone>
<Type>cpu package</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>59000</Temperature>
<type>passive</type>
<ControlType>PARALLEL</ControlType>
<CoolingDevice>
<index>0</index>
<type>Processor</type>
<influence> 10 </influence>
<SamplingPeriod> 5 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>1</index>
<type>Processor</type>
<influence> 10 </influence>
<SamplingPeriod> 5 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>2</index>
<type>Processor</type>
<influence> 10 </influence>
<SamplingPeriod> 5 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>3</index>
<type>Processor</type>
<influence> 10 </influence>
<SamplingPeriod> 5 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>4</index>
<type>intel_powerclamp</type>
<influence> 30 </influence>
<SamplingPeriod> 10 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>5</index>
<type>rapl_controller</type>
<influence> 50 </influence>
<SamplingPeriod> 10 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>6</index>
<type>intel_pstate</type>
<influence> 40 </influence>
<SamplingPeriod> 10 </SamplingPeriod>
</CoolingDevice>
<CoolingDevice>
<index>7</index>
<type>rapl_controller_dram</type>
<influence> 50 </influence>
<SamplingPeriod> 10 </SamplingPeriod>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
</Platform>
</ThermalConfiguration>