Добрый день, уважаемые читатели.
Относительно недавно я приобрел себе ноутбук-трансформер Lenovo Yoga 9 2-in-1.

Опустим достоинства и недостатки данного девайса, в данном случае нас интересует одно - процессор (Intel Core Ultra 7 155H) очень сильно грелся на рядовых задачах. В качестве дистрибутива на тот момент выступал Pop!_OS 22.04 с гномовским окружением. Для понимания масштаба проблемы: при игре в старый добрый Morrowind (напомню - игра от 2001 года рождения) на Balanced режиме производительности процессор начинал греться до 110 градусов. Более того - меньше 90 градусов температура не опускалась в принципе. Очевидно, что подобное поведение меня, мягко говоря, не устраивало - от длительного времяпровождения за горячим ноутбуком руки здоровее не становятся.
Небольшой спойлер - проблема оказалась в драйвере intel_pstate. Если кратко (тут присутствует немного моих домыслов): по сути, на ноутбуке было всего 2 режима производительности - энергосберегающий и производительный. На энергосберегающем режиме ноутбуку недостаточно производительности для ряда задач, на производительном - процессор при любом поводе начинает разогреваться до 110 градусов. Попытка сидеть на Balanced режиме не увенчалась успехом - в зависимости от нагрузки система прыгала между режимами производительности conservative и performance - о чем нам говорил вывод следующей команды в разные моменты времени на Balanced режиме (но только на pop_os, об этом чуть подробнее будет сказано далее)
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Опустим, задумывалось ли подобное поведение изначально, или же это ошибка в работе драйвера, меня в первую очередь интересовало решение возникшей проблемы и, покопавшись в системе, я перевел intel_pstate в пассивный режим, добавив в grub в строку GRUB_CMDLINE_LINUX_DEFAULT параметр intel_pstate=passive - за счет этого происходит fallback на другой драйвер, в случае debian 13 это intel_cpufreq (на pop_os, если мне память не изменяет, был acpi-cpufreq - в зависимости от системы детали могут отличаться).
Поведение ноутбука на intel_cpufreq меня полностью устроило, и я надолго забыл об этом вопросе.
Однако, я увидел на Хабре статью Linux Tuning для Современного ноутбука с Пассивной Системой Охлаждения - судя по описанию проблемы, автор столкнулся с очень схожей бедой с перегревом процессора, тоже на Lenovo Yoga, тоже с intel_pstate, пусть и на другой модели ноутбука. Однако, в рамках его решения в ход пошло многое - дело дошло даже до настройки TLP. Я не являюсь экспертом в настройке Линукса и не могу, не попробовав его вариант, судить о его достоинствах и недостатках, но уже на этапе первого упоминания TLP у меня возникло четкое понимание - это то, чем я не хотел бы заниматься. Не буду утверждать, что его решение нерабочее - возможно, на его модели ноутбука описанные танцы с бубном были единственным рабочим вариантом, однако, мне захотелось, чтобы по схожему поисковому запросу выдавалось также чуть более простое решение, чем предложенное.
Примечание
Первоначально с проблемой я столкнулся, используя в качестве операционной системы Pop!_OS 22.04. Сейчас же я использую Debian 13. Как было сказано ранее, при переключении драйвера в пассивный режим на Debian в моей системе по-умолчанию включается intel_cpurfreq, на Pop!_OS же был acpi-cpufreq. Так же, помимо вышеизложенного, в принципе есть некоторые другие различия в поведении системы на разных дистрибутивах. Я не буду пытаться восстановить исходное окружение, на котором я столкнулся с проблемой в первый раз, а буду использовать текущее для демонстрации проблемы и возможного решения.
Шаг 1 - Жарим яичницу на ноутбуке
Итак, мы знаем о наличии бед с температурой.
Для начала, посмотрим на нашего героя драйвер в лицо:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
intel_pstate
Давайте попробуем воспроизвести нагрузку искусственно и посмотреть, как поведет себя система.
Будем запускать stress на разных режимах производительности
stress --cpu 20 --timeout 60
следить за частотой работы процессора
watch -n 0.5 'for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do freq=$(( $(cat $cpu)/1000 )); echo "$cpu: ${freq} MHz"; done'
и мониторить температуру с помощью
watch -n 1 sensors
Примерные величины приведены в таблице (нас мало интересуют точные значения, скорее поведение системы в целом)
Режим производительности |
Максимальная замеченная температура |
Температура в среднем |
Средняя частота |
|---|---|---|---|
Powersave |
91 |
67 |
2000 MHz |
Balanced |
107 |
70 - 80 |
2000 MHz - 2800 MHz |
Performance |
110 |
90 |
3700 MHz |
(Примечание - есть субъективное ощущение, что на новых ядрах ситуация стала чуть получше. Я не буду восстанавилвать исходное окружение и сравнивать поведение intel_pstate до и после, но, по моим воспоминаниям, стало чуть лучше)
В первую очередь обратим внимание на то, что Balanced режим ведет себя очень непонятно (диапазон я поставил здесь не случайно) - на разных замерах показывает несколько разные результаты. Также, в какой-то момент драйвер может резко сбросить частоту процессора до 2000 MHz, а при запуске stress снова - достаточно резво ее поднять до пиковых значений.
Причина подобного поведения? Есть версия, что Balanced у intel_pstate немного неполноценный, и просто переключается между другими режимами производительности, но тут, признаться, не могу утверждать, банально так как между поведением на pop_os и debian есть некоторые расхождения - у меня есть записи о том, что на pop_os на balanced режиме команда
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
выводила разные governor в разные моменты времени, переключаясь между powersave и performance. На Debian же данная команда вегда выводит powersave независимот от выставленного режима - причем, как мы видим по замерам, переключение режимов производительности эффект на систему оказывает несмотря на фиксированный governor. Я не стал разбираться в причинах данного занимательного явления (но gpt и некоторые поиски в интернете указали, что это, в целом, нормально), просто сделаем вид, что разработчики переработали драйвер. Также, далее, к выводу governor я возвращаться не буду, так как, судя по поведению, на моей системе эта настройка буквально ничего не делает.
Как мы видим из замеров, не в powersave режиме процессор стабильно будет сидеть на температуре 80-90 при возникновении любой нагрузки с периодическими выбросами до ~110 градусов. И когда я говорю любой, то именно это я и имею в виду:
запустил sudo apt upgrade - греемся
играем в старенькую игрушку - греемся
компилируем небольшой учебный проектик - греемся
Как можно решить проблему?
Был предпринят ряд попыток настройки thermald, которые, ввиду своей безуспешности, не будут приведены даже в качестве примера (есть даже некоторые програмки, которые генерируют xml конфиг в зависимости от системы - они тоже не справились). Лезть в TLP и подобные вещи очень не хочется.
Итак, нахрапом сконфигурировать intel_pstate не получилось (да и закрадывается мыслишка, что с этим в принципе есть беды). Глубоко копать во внутрянку не хочется, поэтому попробуем отказаться от intel_pstate.
Шаг 2 - Переводим intel_pstate в пассивный режим
Итак, поведение intel_pstate нас не устраивает, как его настраивать - не очень понятно. Возможным решением проблемы является отказ от intel_pstate в качестве scaling_driver в принципе. Давайте это и сделаем.
Поиск по интернету подсказал, что добиться подобного можно, переведя intel_pstate в пассивный режим. Чтобы зафиксировать результат, пропишем это в grub (ну или другом загрузчике в зависимости от используемого дистрибутива).
# Перейдем в /etc/default/grub
vim /etc/default/grub
# Отредактируем следующую строку (если у вас уже есть какие-то нужные вам параметры, то просто добавьте настройку для intel_pstate)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=passive"
# Обновим grub и после перезагрузим ПК
sudo update-grub
Посмотрим, что за драйвер работает теперь:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
intel_cpufreq
Вновь протестируем систему под нагрузкой.
Будем запускать stress на разных режимах производительности
stress --cpu 20 --timeout 60
следить за частотой работы процессора
watch -n 0.5 'for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do freq=$(( $(cat $cpu)/1000 )); echo "$cpu: ${freq} MHz"; done'
и мониторить температуру с помощью
watch -n 1 sensors
Примерные величины приведены в таблице (нас мало интересуют точные значения, скорее поведение системы в целом)
Режим производительности |
Максимальная замеченная температура |
Температура в среднем |
Средняя частота |
|---|---|---|---|
Powersave |
95 |
60 |
2000 MHz |
Balanced |
91 |
70 |
2800 MHz |
Performance |
100 |
79 |
3400 MHz |
На этот раз картина получилась более внятная - средняя температура уже вменяемая, да и Balanced режим производительности ведет себя адекватно, предоставляя некоторое промежуточное состояние между двумя другими режимами производительности.
На всех режимах производительности, в общем, наблюдается следующая картина - в начале идет повышение температуры до некоторого лимита, после чего начинают сбрасываться частоты и отрабатывать вентилятор, и температура сбрасывается до некотого значения, на котором +- фиксируется на время, в течение которого отрабатывает команда stress.
Из нюансов - на Powersave режиме вентилятор начинает отрабатывать поздновато, в результате, пиковая температура может быть даже выше, чем на других режимах производительности.
Заключение
Уже несколько месяцев использую ноутбук с intel_pstate в пассивном режиме - на данный момент нареканий не возникло никаких. Пару раз закрадывалась мысль, что оригинальный драйвер на некоторых сценариях может выдавать лучшие показатели - но температурный режим на intel_pstate меня совершенно не устроил.
Достоинством предложенного решения является то, что оно очень простое и его настройка не занимает много времени. Также, в том случае, если оно чем-то не устраивает - откатиться на использование intel_pstate в качестве драйвера нетрудно.
Удобства ради, продублирую фикс в конце:
# Перейдем в /etc/default/grub
vim /etc/default/grub
# Отредактируем следующую строку (если у вас уже есть какие-то нужные вам параметры, то просто добавьте настройку для intel_pstate)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=passive"
# Обновим grub и после перезагрузим ПК
sudo update-grub
Спасибо за чтение и до новых встреч.
Комментарии (4)

SacredCrane
22.11.2025 18:34Лезть в TLP и подобные вещи очень не хочется.
Для настройки TLP есть неплохая утилита - TLPUI. Было бы интересно посмотреть изменения при настройке TLP
Интересно, что следуя документации этого самого TLP
Starting with kernel 5.7, the intel_pstate driver selects passive mode aka intel_cpufreq for CPUs that do not support hardware-managed P-states (HWP), i.e. Intel Core i 5th gen. or older.

KirillVelichk0 Автор
22.11.2025 18:34Здравствуйте.
Ну у меня процессор поновее 5-ого, так что Passive Mode по умолчанию выключен.
GUI попробовать можно, возможно при переезде на другой Линупс попробуй.
nixooyase
На таком же процессоре (только Core 9), гоутбук Samsung и под Windows была та же самая пакость - на среднем режиме были прыжки производительности (особенно в играх заметные, ФПС по синусоида вверх-вниз прыгал). Кажется обновлением драйвера пофиксилось. Ставил Linux, поддержка железа была плохой, камера, динамики, режимы производительности не поддерживались (на июнь 2024 года). Не удивлен, но разочарован, хотелось бы ноутбук на Linux который "просто работает", но видимо тут нужно брать какой-нибудь Framework, или аналог из тех что сразу идут с Linux, и надеяться на чудеса. Мне кажется дальше поддержка железа будет только хуже и хуже.
KirillVelichk0 Автор
Ну вообще, на указанном в статье ноутбуке это пока единственная замеченная проблема, которую, в целом, я более менее решил.
Ну а так да, согласен - почти на всех моих ноутах на Лине вылезали какие-то приколы - в большинстве своем решаемые, но некоторый ресурс времени и нервов потратить приходилось.