Оптимизация энергопотребления на Linux ноутах



К сожаления до сих пор(2023) ubuntu-based дистрибудивы очень не оптимизированы по энергопотреблению. И сразу после установки требуют допиливания напильником. Самое интересное, что все необходимые инструменты для оптимального управления ресурсами уже давно есть.

Для примера расскажу, что я делал на своей Linux Mint 21.1 на ноуте lenovo 82YM Yoga 7 14ARP8.

Основные проблемы энергопотребления

У меня были 3 главных проблемы:

  • Браузеры не использовали видиокарту для декодирования видио
  • Энерго профили автоматически не переключались при отключении сети
  • Профиль "powersave" никак не лимитировал процессор и был неотличим от "performance"

Разбираемся с аппаратным декодированием в браузерах

Если вы живёте на ubutu-based дистрибутивах, как я, в первую очередь нужно убедиться, что установлены ubuntu-restricted-extras в комплекте которых есть драйвера и кодеки для поддержки апаратного декодирования:

sudo apt install ubuntu-restricted-extras

Далее заходим на страницу конфига firefox about:config и изменяем следующие переменные:

media.ffmpeg.vaapi.enabled = true
media.ffvpx.enabled = false
media.rdd-vpx.enabled = false

Немного больше пояснений на ангельском тут.

После этого рестартуем firefox, заходим на страницу about:support, проматываем до раздела "Media" и убеждаемся, что на некоторых кодеках появилось апаратное декодирование:

Далее ставим плагин enchanced-h264ify в котором отключаем кодеки, которые не умеют декодиться на GPU:

C google chrome получилось чуть проще, после установки ubuntu-restricted-extras (а возможно даже до) апаратное декодрование автоматом включилось, проверить это можно на странице chrome://gpu:

Разбираемся с power profiles

На удиваление, мир GUI приложений не обошел стороной линупсы и для любителей тыкать мышкой доступны не только консольные утилиты. Действительно полезными я нашел 2: cpupower-gui и CoreCtrl

cpupower-gui

Эта программа позволяет управлять частотами процессора, и что самое главное из userspace, без рутовых полномочий. Но к сожалению на версии 1.0.0 не сохраняет настройки профилей. Считай можно только задать частоту в текущем активном профиле, ну и переключить профиль.

CoreCtrl

На моём AMD ryzen 7735u доступны только графики с нагрузкой и частотой, ни менять частоту ни профили CPU она не умеет.

За то с видеокартой она дружит олично, показывает всё что можно: использование памяти, загрузку GPU, потребляемую мощность, напрежение, температуру, частоту памяти и GPU. И самое главное позволяет управлять профилем видеокарты и частотой GPU.

Автоматическое управлене энергопотреблением

Но лично мне постоянно тыкать мышкой не нравится, я люблю, когда всё работает "само", автоматически. По этому сделал небольшой скриптик, для которого потребуется набор утилит cpufreq:

sudo apt-get install cpufrequtils

После установки выясним лимиты на частоту:

cpufreq-info -l

В моём случае, минимальный лимит определился правильно: 1.6Ghz, а максимальный неправильно: 4.8Ghz- это частота турбобуста. По этому максимальную частоту я подглядел в cpupower-gui она составила 2.7Ghz.

Теперь можем написать скриптик по автоматическому применению профилей и заданию частоты процессора:

#!/bin/bash
if on_ac_power; then
  echo "Set performance"
  echo "ваш_судо_пароль" | sudo -S cpufreq-set -r -g performance -d 1.60 GHz -u 2.70GHz
else
  echo "Set powersave"
  echo "ваш_судо_пароль" | sudo -S cpufreq-set -r -g powersave -d 1.60 GHz -u 1.60GHz
fi

Немного пояснений:

В linux доступна глобальная переменная "on_ac_power" - которая сигнализирует подключено питание, или нет.

cpufreq-set нужно запускать с правами рута, по этому у нас есть конструкция

echo "ваш_судо_пароль" | sudo -S

Не забудьте зменить пароль на Ваш, либо позвольте вызывать Вашему юзеру судо без пароля.

Так же измените минималные и максимальные частоты под Ваши нужны.

Дайте скрипту права на выполнение:

chmod 777 название_скрипта.sh

И добавьте его в крон с расписанием- каждая минута:

crontab -e
* * * * * /путь/к_скрипту/название_скрипта.sh

Автоматическое управление профилем GPU

Для юзеров видиокарт AMD подходит управление профилями через PP:

#!/bin/bash
echo "GPU powerman"

if on_ac_power; then
  echo "Switch to auto mode"
  echo 'auto' > /sys/class/drm/card0/device/power_dpm_force_performance_level
else
  echo "Switch to low mode"
  echo 'low' > /sys/class/drm/card0/device/power_dpm_force_performance_level
fi

echo "Current GPU state is:"
cat /sys/class/drm/card0/device/power_dpm_force_performance_level

Трюк с прямым вызовом через судо у меня не прошел, почему-то не хватало прав, получал ошибку:

sudo echo 'auto' > /sys/class/drm/card0/device/power_dpm_force_performance_level
bash: /sys/class/drm/card0/device/power_dpm_force_performance_level: Permission denied

По этому для его запуска я сделал скрипт-кикстартер:

#!/bin/bash
echo "Ваш_судо_пароль" | sudo -S ./amd_gpu_powerman.sh

Если у Вас видимокарта Intel, метод тоже должен работать. А вот если nvidia, земля тебе пухом, братишка.

ИТОГО

До всех этих манипуляций мой ноут на батарейке жил не более 2.5 часов, и это только в режиме просмотра ютупчика с минимальной яркостью экрана.

После тюнинга время жизни возросло более чем в 2 раза, более 6 часов в режиме прослушивания ютупчика, браузинга и работы в IDEшках.


Сообщество: Hardware

Комментариев(1)


ID: #812   Создан:
Автор: ololoev

Ещё 1 свежая утилита: https://github.com/AdnanHodzic/auto-cpufreq

Всего: 1 комментариев на 1 страницах

Ваш комментарий будет анонимным. Чтобы оставить не анонимный комментарий, пожалуйста, зарегистрируйтесь



Сообщества