AverkovNET

Всегда не любил ноутбуки: экран маленький, клавиатура неудобная, да ещё и с фиксированным положением относительно экрана. Но есть у ноутбуков и несомненное преимущество — мобильность. Именно ноутбук приходит на помощь, когда имеется потребность в рабочем месте, которое всегда под рукой.

Есть одно свойство, присущее буквально каждому второму ноутбуку — перегрев. Среди ноутов, которыми мне доводилось владеть, эта проблема проявлялась на следующих моделях:

Рассмотрю последние два случая, а именно — Lenono Z570 и Infinix X2. Lenono Z570 мне достался с рук и проблема перегрева в нём стояла очень остро: достаточно было запустить лишь один однопоточный процесс, использующий ядро на 100%, как температура всего кристалла доходила почти до 100°, если же использовать на всю катушку 2 и более ядер, температура достигала 100° и ноутбук прекращал работать (зависал). Поначалу я пытался это терпеть и как-то адаптировать свою работу, чтобы не нагружать процессор, но в какой-то момент моему терпению пришёл конец и я решил досконально изучить проблему.

Первым, что я обнаружил, оказалось то, что в моём экземпляре стоял «не родной» процессор Core i7-2670QM, что означало, что до меня этот ноутбук уже кто-то апгрейдил. Отмечу, что в таких старых ноутбуках замена процессора была тривиальной операцией, так как в то время процессоры в ноутбуках ставили в сокет, а не запаивали на плату (ball grid array). «Родными» же для данной модели, если верить Google, являлись процессоры Core i5-2450M и Core i3-2350M. Интересный момент заключается в том, что оба эти процессора имели TDP 35 Вт, в то время как Core i7-2670QM — 45 Вт. Таким образом, моим первым предположением было то, что система охлаждения банально не справляется с тепловыделением, на которое она не рассчитана. Однако, прежде, чем я успел купить менее горячий процессор, я решил просто из интереса разобрать ноут и снять систему охлаждения. К моему удивлению, я обнаружил, что слой термопасты между кристаллом и системой охлаждения был настолько толстый и сухой, что от него можно было буквально отламывать кусочки. Термопаста была оперативно заменена на новую, нанесённую тонким слоем, и проблема решилась — теперь я, наконец-то, смог загрузить все 4 ядра на 100% и температура доходила максимум до 80°. Много, но уже приемлемо.

Infinix X2, в отличие от Lenovo, достался мне новым, но уже «из коробки» легко перегревался, причём было заметно, что перегрев проявляется лишь в определённых задачах. К примеру, криптография в виде 8 параллельно запущенных экземпляров openssl speed не приводила к такому перегреву, как запущенный в wine эмулятор gens-rerecording, используемый для TAS, хотя эмулятор загружал лишь 1 ядро из 4, и то не на 100%. Также сильнейший перегрев вызывала компиляция C и C++ (к примеру сборка интерпретатора Python из исходного кода), а так как компиляция исходных кодов входила в мои должностные обязанности, я также не мог мириться с таким раскладом и начал разбираться.

Уже по привычке разобрал ноутбук, чтобы проверить состояние термопасты. Но в этот раз там всё оказалось замечательно. Термопасту я, конечно, заменил на свою, но, как нетрудно догадаться, это не дало нужного результата. Было похоже на то, что система охлаждения не справлялась с тепловыделением, но это было странно, особенно учитывая мизерный TDP процессора Core i7-1065G7 (15 Вт), а также вот эту картинку на сайте производителя:

«Айс сторм», видишь ли! Не знаю, как вам, но мне сразу вспоминается реплика «не, не айс!» из «отморозков в поисках ледяной свежести» :)

Шутки шутками, но делать что-то было нужно. И тут я вспомнил о модуле ведра ядра cpufreq, выбирающем оптимальную тактовую частоту процессора, исходя из текущей загрузки системы. Этот модуль может работать с разными политиками, чаще всего это «performance» и «powersave». Причём практически все рабочие среды (KDE, Gnome, xfce, Mate, Budgie и прочие) имеют штатные средства для выбора активной политики. Тем не менее, это всё ещё немного не то, что нужно. Моя идея была в том, чтобы ограничить сверху выбор частоты и, к счастью, такая возможность в cpufreq есть.

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

Сначала посмотрим текущую максимально допустимую частоту.

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
3900000

Укажем максимально допустимую частоту, которую мы хотим использовать. Помним, что если процессор имеет несколько ядер, то и соответствующих псевдофайлов также будет несколько.

for i in {0..7}; do
    echo 2400000 > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq;
done

Результат довольно ощутимый (было — стало).

Такой скрипт можно поставить на автозапуск при загрузке системы, но это, пожалуй, не очень удобно. Лучше сделать пару кнопок запуска на панели, которые будут задавать разные граничные частоты по клику. А можно пойти ещё дальше и установить себе приложение cpupower-gui. В Ubuntu оно легко ставится через менеджер пакетов:

apt install cpupower-gui

Приложение имеет максимально интуитивно понятный интерфейс — главное не забывать, что при отжатой галочке «All CPUs» настройки будут применяться лишь к одному выбранному ядру.

Интересно отметить тот факт, что перегреву могут быть подвержены (или не подвержены) как дешёвые, так и дорогие ноутбуки. Мне встречались ноуты и без проблемы перегрева, причём часть из них были довольно дорогими, другая же часть — максимально бюджетными. Таким образом, ориентироваться исключительно на цену я бы не рекомендовал, перед покупкой ноутбука обязательно изучайте отзывы.