Температура и троттлинг

Питание и ACPI #linux #notebook #power #thermal

Температура и троттлинг

Температура в Linux живёт в двух местах: /sys/class/hwmon/ (датчики) и /sys/class/thermal/ (тепловые зоны и устройства охлаждения). Вторая часть ближе к ACPI: именно из таблиц прошивки ядро узнаёт, какие датчики есть, при какой температуре включать вентилятор и когда снижать частоту.

Как устроено

Ядро делит тепловую подсистему на две сущности (описано в документации):

  • thermal zone (/sys/class/thermal/thermal_zoneN/) — датчик температуры с набором порогов (trip points). Основные атрибуты:
    • type — тип зоны,
    • temp — текущая температура в тысячных долях градуса,
    • policy — тепловой «губернатор», который решает, что делать,
    • trip_point_N_temp и trip_point_N_type — пороги (passive, active0, critical…).
  • cooling device (/sys/class/thermal/cooling_deviceN/) — то, чем можно охлаждать: вентилятор, процессор, ограничитель мощности. Атрибуты type, max_state, cur_state.

Связь между ними — тоже в sysfs: cdevN в зоне и cdevN_trip_point показывают, какое устройство привязано к какому порогу.

Что видно на нашей машине

Dell Latitude 7400, Ubuntu 26.04:

thermal_zone0  acpitz              25,0 °C
thermal_zone1  pch_cannonlake      41,0 °C
thermal_zone2  INT3400 Thermal     20,0 °C
thermal_zone3  TMEM                33,1 °C
thermal_zone4  TSKN                37,1 °C
thermal_zone5  NGFF                31,1 °C
thermal_zone6  B0D4                43,1 °C
thermal_zone7  iwlwifi_1           38,0 °C
thermal_zone8  x86_pkg_temp        47,0 °C

Расшифровка по названиям:

  • acpitz — общая зона ACPI;
  • pch_cannonlake — чипсет (PCH), драйвер intel_pch_thermal;
  • x86_pkg_temp — температура процессорного пакета;
  • INT3400 Thermal — контейнер политик Intel DPTF (Dynamic Platform and Thermal Framework): платформенный набор правил питания и охлаждения;
  • TMEM, TSKN, B0D4, NGFF — датчики конкретных мест платы (память, корпус, зона рядом с накопителем);
  • iwlwifi_1 — Wi-Fi модуль.

Устройства охлаждения:

Processor (8 штук, по одному на логическое ядро)   0/3
intel_powerclamp                                 0/100
TCC Offset                                       2/63
dell-smm-fan1                                    0/2
PCIe_Port_Link_Speed_0000:00:1c.0                0/2

Processor — снижение частоты процессора, dell-smm-fan1 — вентилятор, TCC Offset — сдвиг порога тепловой защиты, PCIe_Port_Link_Speed — ограничение скорости PCIe-порта как способ уменьшить нагрев.

Что такое TCC offset

TCC (Thermal Control Circuit) — аппаратная защита процессора от перегрева. «Смещение» (offset) задаёт, насколько раньше критической температуры начнётся троттлинг. В документации ядра атрибут описан так: tcc_offset_degree_celsius — «TCC offset от критической температуры, при которой железо начнёт ограничивать процессор». На нашей машине текущее значение — 2 из 63.

Практический смысл: увеличивая offset, можно заставить процессор сбрасывать частоту раньше и тем самым держать корпус холоднее — ценой производительности.

Предупреждение про S0ix

Драйвер intel_pch_thermal умеет не только мерить температуру, но и предупреждать, что чипсет слишком горячий для энергосбережения. В журнале это выглядит так:

intel_pch_thermal 0000:00:12.0: CPU-PCH current temp [57C] higher than
the threshold temp [50C], S0ix might fail. Start cooling...

S0ix — состояния низкого энергопотребления, на которых держится режим сна s2idle (см. Сон и пробуждение). Если хаб горячее порога, платформа может не уйти в S0ix — и тогда ноутбук будет тратить батарею во сне или, хуже, зависать при пробуждении.

Как посмотреть температуру по-человечески

sudo apt install lm-sensors
sudo sensors-detect      # один раз, отвечать на вопросы по умолчанию
sensors

Ещё два полезных инструмента:

  • cat /sys/class/thermal/thermal_zone*/temp — сырые значения в тысячных долях градуса;
  • turbostat (пакет linux-tools-common) — частоты, C-состояния и температура процессора в динамике.

Если ноутбук греется

Порядок действий от простого к сложному:

  1. Посмотреть, какая зона горячая. Если x86_pkg_temp под 90–100 °C — это процессор, если pch_cannonlake — чипсет, если iwlwifi_1 — Wi-Fi.
  2. Проверить, крутится ли вентилятор: cur_state у dell-smm-fan1 (или аналогичного устройства).
  3. Почистить систему охлаждения и заменить термопасту — для ноутбука с несколькими годами работы это чаще всего и есть решение.
  4. Проверить, не мешает ли пыль и не перекрыты ли вентиляционные отверстия.
  5. Только после этого трогать TCC offset: это способ жить с перегревом, а не лечить его.

Источники

Оценка статьи 0

Комментарии

Пока комментариев нет.