Перейти к содержанию

Исправление троттлинга на ThinkPad с ультрабучными процессорами

Дисклеймер

Выполнение всех рекомендаций в этой статье не гарантирует полного избавления от троттлинга, но прирост производительности вы точно получите или как минимум будете лучше понимать эту тему.

В моём случае производительность на ThinkPad T480 выросла на ~40%, хотя небольшой троттлинг всё равно был.

Это обобщающая статья по решению проблем низкой производительности на популярных моделях ThinkPad работающих на Linux.

Мониторинг частоты ядер и потребления CPU удобнее всего смотреть через s-tui - запускайте с правами суперпользователя, иначе не увидите информацию об энергопотреблении.

Ещё в самом throttled можно в реальном времени мониторить причины троттлинга.

Запускаем throttled в режиме мониторинга:

sudo /opt/throttled/throttled.py --monitor
Нас интересуют 4 вывода:

  • Thermal - нет ли у нас троттлинга из-за перегрева процессора (до 95С);
  • Power - нет ли лимита по энергопотреблению (TDP) процессора;
  • Current - нет ли лимита из-за недостатка питания, например если блок питания или аккумулятор не дает достаточно питания процессору;
  • Cross-domain - скорее всего связанно с потреблением dGPU (ещё не сталкивался с лимитом с его стороны).

Если какой-то из выводов показвает LIM, то его надо его исправлять.

В качестве стресс теста лучше всего подойдет Cinebench R23 запускаемый через Wine, либо установите утилиту stress для возможности включении стресс теста из утилиты s-tui, но нагрузка там не такая сильная как в Cinebench.

Температура (BDPROCHOT)

Когда температура процессора доходит до 95 градусов, процессор начинает понижать частоты ядер, чтобы защитить себя от перегрева. Иногда встроенный контроллер (EC) или датчики на материнской плате могут послать на процессор сигнал BDPROCHOT, чтобы процессор начал троттлить и температура перестала повышаться.

В системе охлаждения ThinkPad'ов есть несколько нюансов:

  • Тип охлаждения;
  • Производитель вентилятора охлаждения;
  • Скорость вращения вентилятора при полной нагрузке.

Модернизация охлаждения

ThinkPad T480 с установленным dGPU охлаждением. В руках iGPU вариант охлаждения.

Тип охлаждения

ThinkPad'ы T-серии выпускаются в множестве различных конфигураций. Одна и та же модель может выпускаться с дискретной видеокартой, как и без неё. Материнские платы в таком случае по строению одинаковые, отличается лишь наличие dGPU чипа и сам вариант радиатора охлаждения.

Если у вас ThinkPad без дискретной видеокарты (iGPU вариант), то в большинстве случаев можно заменить охлаждение на dGPU вариант. В таком случае вы получите одну дополнительную трубку охлаждающую процессор. Не на всех моделях охлаждение dGPU идёт через процессор (напр. T440p), но на более современных моделях это так.

Производитель вентилятора охлаждения

При покупке охлаждения стоит также обращать внимание на производителя вентилятора (кулера), так как их делает не сама Lenovo, а сторонние вендоры: Toshiba, Delta, AVC. Обычно AVC самые производительные и эффективнее всего отводят тепло, в то время как Delta более тихие. Вендоры могут отличаться от одной модели к другой, но на старых моделях (30-ые, 40-ые серии) обычно бывают эти трое.

Касательно взаимозаменяемости вентиляторов охлаждения

Вентиляторы не взаимозаменяемые и разные производители (вендоры) имеют разное расположение болтиков! То есть, нельзя в радиатор от Toshiba поставить кулер от AVC - он встанет, но вы не сможете его закрутить.

Если заказываете охлаждение, то берите комплект из радиатора и кулера!

Скорость вращения вентилятора при полной нагрузке

ThinkPad'ы одни из немногих ноутбуков которые позволяют регулировать частоту вращения вентилятора охлаждения. За это отвечает программа thinkfan. Да, контроллер рано или поздно раскручивает кулер на полную, но thinkfan позволяет настроить это поведение более агрессивно.

На Gentoo Wiki есть хорошая статься по запуску thinkfan. Подойдёт для других дистрибутивов. Обратите там внимание на раздел Kernel и настройку /etc/modprobe.d/thinkpad.conf

Вот пример конфига для ThinkPad T480, который раскручивает вентилятор охлаждения на полную мощность как только температура процессора будет выше 50 градусов:

/etc/thinkfan.yaml
sensors:
  - tpacpi: /proc/acpi/ibm/thermal
    indices: [0]

fans:
  - tpacpi: /proc/acpi/ibm/fan

levels:
  - [0, 0, 50]
  - ["4", 45, 75]
  - ["level full-speed", 70, 255]

Заметка

Путь к показаниям датчиков температур может отличаться от одной модели к другой.

Замена термопасты на PTM7950

PTM7950 это термопрокладка от Honeywell, которая меняет свою фазу в зависимости от температуры - становится жидкой при высокой температуре и застывает при комнатной температуре. Она служит намного дольше термопаст и охлаждает наравне с жидким металлом, при том что PTM7950 не проводит электрической ток.

Thermal Grizzly Extreme не охлаждает так хорошо как PTM7950. (Не тратье деньги на TGE, не повторяйте моих ошибок!)

Купить PTM7950 можно на AliExpress (см. по количеству продаж), либо у перекупщиков на маркетплейсах.

Энергопотребление (TDP limit)

TL;DR и предупреждение о совместимости

Речь пойдёт об андервольтинге и повышению лимита по энергопотреблению. Ваш процессор Intel должен быть минимум поколения Haswell (4th Gen) и не новее Comet Lake (10th Gen).

Если во время бенчмарков и стресс тестов температура процессора не доходит до 90 градусов, но частота процессора находится ниже TurboBoost, то скорее всего вы столкнулись с лимитом по питанию (он же power throttling).

С такой проблемой обычно сталкиваются ThinkPad'ы с ультрабучными процессорами - с пометкой U в названии модели (напр. i5-8350 U).

Скриншот s-tui. Ядра процессора загружены на 100%, но частота в районе 2.6 GHz (хотя должно быть 3.6 GHz), температура в районе 70С - явно не троттлинг по температуре. Зато Power package в районе 15 W - в этом и проблема.

Перед тем как пытаться решить проблему с лимитом по питанию при сильной нагрузке, убедитесь что:

  • Ноутбук работает от блока питания, а не от аккумулятора. Аккумулятор может быть не рассчитан на высокие нагрузки;
  • Посмотрите список блоков питания с которыми поставляется ноутбук в PDF спецификации. Ваш блок питания должен быть хотя бы средним по мощности. Например, если в спецификации указаны блоки питания 45W, 65W и 90W, то у вас должен быть блок минимум 65W, в идеале мощнее раз уж вы хотите выжить максимум;
  • Блок питания должен был подключен на прямую к ноутбуку, а не через USB-C док станцию;
  • Вы нагружаете только CPU или встроенную видеокарту тоже? Если вы нагружаете и то, и другое, то CPU может не работать на полную мощность, так как всё питание "забрало" встроенное графическое ядро (напр. игры);
  • Проверьте раздел Питания в настройках UEFI. Чем современнее ThinkPad, тем больше шансов, что в настройках будут настройки связанные с потреблением энергии всей хардварной части.
  • Попробуйте переключить планировщик CPU в режим высокой производительности. Да, банально, но на моделях с ультрабучными процессорами чаще всего форсируется планировщик powersave.
Как переключить планировщик для всех ядер через утилиту cpufreq:
sudo bash -c 'for ((i=0;i<$(nproc);i++)); do cpufreq-set -c $i -g performance; done'

TODO

Возможно TLP решает эту проблему, но нужно узнать на сколько он совместим с утилитой throttled.

Если все шаги выполнены, но проблема осталась, то переходим к софтварному решению проблемы, а именно утилите throttled от erpalma на GitHub (от слов throttle и daemon).

Утилита выполняет две функции:

  • Повышает лимит потребления процессора (TDP);
  • Андервольтит процессор, если это настроил пользователь.

Повышение TDP лимита

Повышение лимита энергопотребления (TDP) происходит автоматически после запуска throttled. В конфиге уже прописаны нужные параметры.

Баг: Повышение TDP не применяется сразу после включения системы

В throttled есть баг с повышением TDP лимита сразу после включения или перезагрузке системы - он не всегда срабатывает. Проверить можно это через s-tui, см. график CPU Package.

Чтобы исправить этот баг нужно перевести ноутбук в режим сна и включить его снова.

Андервольтинг

Андервольтинг (undervolting) - понижение напряжения работы процессора относительно заводских значений.

Хороший андервольтинг позволяет процессору работать на тех же частотах, но с более пониженным потреблением и тепловыделением. Обычно результат андервольтинга заметен при одновременной нагрузке CPU и встроенного графического ядра.

Настройка андервольтинга, как и настройки самого throttled, проводится в конфигурационном файле /etc/throttled.conf в разделе [UNDERVOLT.AC]. Советую на данный момент править только AC настройки, чтобы в случае чего можно было переключиться на аккумулятор со стандартными параметрами.

Совет

Сам разработчик throttled советует проводить андервольтинг из LiveCD чтобы в случае принудительной перезагрузки не повредить файлы на диске.

В разделе андервольта есть 5 параметров. Все значения должны быть отрицательным и целым числом.

/etc/throttled.conf
[UNDERVOLT.AC]
# Смещение напряжения для ядер CPU.
CORE: 0
# Смещение напряжения для встроенного Intel GPU.
GPU: 0
# Смещение напряжения для кэша CPU - должно быть равно значению CORE.
CACHE: 0
# Смещение для Uncore (System Agent). Обычно оставляют таким же как CORE.
UNCORE: 0
# ANALOGIO обычно не трогают, если вы конечно знаете что делаете.
ANALOGIO: 0

Запускаем Cinebench для стресса CPU. Для процессоров Intel 6-го поколения и новее можно смело начинать со значений -50.

Значения CORE, CACHE и UNCORE понижаем примерно на 5-10 mV каждую минуту. Продолжаем до тех пор, пока система не зависнет, либо пока не уйдёт в перезагрузку. Если это произошло, то запоминаем последнее рабочее значение.

К последнему значению прибавляем 20 mV - это ваше стабильное значение при котором система в андервольте, но работает стабильно.

В случае с GPU аналогично. Запускаем Furmark и смотрим на FPS. После определенного значения FPS всех системы должен понизиться до 5. Прибавляем к последнему рабочему значению 20 mV и записываем в конфиг.

Баг: А андервольт GPU вообще работает?

Если вы понизили значение GPU уже в несколько раз ниже CPU, но система всё ещё работает, то повышайте дальше - это тоже баг.

Андервольт работает, просто значения нужно намного ниже. У меня андервольт GPU дошел до -1000 :)

Вот пример моего конфига для ThinkPad T480:

/etc/throttled.conf
[UNDERVOLT.AC]
# CPU core voltage offset (mV)
CORE: -75
# Integrated GPU voltage offset (mV)
GPU: -970
# CPU cache voltage offset (mV)
CACHE: -75
# System Agent voltage offset (mV)
UNCORE: -75
# Analog I/O voltage offset (mV)
ANALOGIO: 0