вторник, 27 октября 2015 г.

Часть 5. Правильная настройка TLP (энергосбережение в ElementaryOS)

Данная инструкция находится в черновом варианте и не завершена! (27.10.2015)
 Обнаружил, что по теме TLP (утилита усовершенствованного управления питанием для Linux) нет полной документации переведенной на русский язык, есть лишь разрозненные статьи описывающие самую простую настройку, а ведь на оф.сайте описано множество нюансов. В общем я занялся переводом и он будет наиболее полным, примерный срок выполнения - 2 недели. А пока что опишу как настроил я сам, это очередная заметка по настройке ElementaryOS.

В первой части мы уже установили утилиту TLP, но этого мало, по сути никакой экономии заряда батареи ноутбука простая установка не дает. Важно настроить поведение процессора, т.к. именно он наиболее сильно "кушает" батарею (наряду с подсветкой экрана).
Для тех кто еще не установил опишу все шаги с самого начала.
1. Установка TLP (если у вас уже стоит другая программа для экономии заряда, то перед установкой TLP ее необходимо удалить):
sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw

Но не спешите вставлять команды! Вначале разберем, что именно мы устанавливаем.
tlp - собственно сама программа.
tlp-rdw - пакет для управления радиомодулями ноутбука (Wi-Fi/Bluetooth).
Дополнительные пакеты ТОЛЬКО для линейки ноутбуков ThinkPad:
tp-smapi-dkms - пакет для контроля зарядки батареи, необходим из-за специфического железа\прошивки ноутбуков ThinkPad (+ насколько я понял именно этот пакет предназначен для старых ноутбуков, а для ноутов с процессорами на архитектуре Ivy Bridge и новее его можно не устанавливать. Более подробно узнать об этом можно здесь.)
acpi-call-dkms - пакет для правильной зарядки новых ноутбуков ThinkPad с процессорами Intel архитектуры Sandy Bridge и новее.

Установили TLP, теперь его необходимо запустить:
sudo tlp start
И проверим его работу:
sudo tlp-stat
Высветится информация о батарее и контролируемых утилитой компонентах компьютера.
Как уже писал выше - установить и запустить TLP по сути ничего не дает, максимум что она будет делать со стандартными настройками это отключать USB порты и влиять на

2. Настройка TLP.
Вначале остановим службу tlp, а затем откроем в стандартном текстовом редакторе с правами администратора файл настройки утилиты TLP:
sudo service tlp stop
sudo scratch-text-editor /etc/default/tlp
Проверяем, что TLP у нас включен и автоматически будет запускаться при включении компьютера, для этого ищем почти в самом вверху документа строку:
TLP_ENABLE=1, обязательно должно быть значение 1. Если у вас 0, то измените на еденицу.

Для следующей настройки нам необходимо убрать все настройки управления частотой которые есть в дистрибутиве, иначе возможны глюки. Более подробно (на всякий случай - там описано как вернуть настройки назад).
sudo update-rc.d -f ondemand remove

Теперь идем дальше по файлу конфига, ищем строки:
#CPU_SCALING_GOVERNOR_ON_AC=ondemand
#CPU_SCALING_GOVERNOR_ON_BAT=ondemand
И меняем их на:
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave

Мы расскоментировали строки и тем самым включили управление частотой процессора с помощью TLP, то есть при работе от сети он будет работать в режиме "Производительность", а от аккумулятора соответственно - "Энергосбережение". Тут я сделаю ремарку, на самом деле режимов больше, НО на процессорах Intel архитектуры Sandy Bridge и новее доступны только два режима управляющих, те самые "производительность" (performance) и "энергосбережение" (powersave), это связанно с ограничением драйвера intel_pstate. На других моделях процессоров можно выставить другие параметры, но пока я не буду останавливаться на этом, т.к. это заметка по-сути о настройке моего ноутбука с дистрибутивом ElementaryOS и предназначена как пример. В будущем я переведу документацию TLP и уже там будут подробнее рассмотрены другие режимы, но уже сейчас вы можете ознакомится с оригинальной инструкцией или поискать переводы, но не забывайте что архитектура Intel Sandy Bridge (и все что было выпущено после) поддерживает только два режима!

Особо погоды эта настройка не сделает, учитывая что в первой части инструкции мы установили индикатор CPUfreq позволяющий вручную менять режим. Тут я сделаю еще одно уточнение. Тот же CPUfreq должен показывать помимо режимов еще и максимально допустимые частоты, например если у вашего процессора стандартная частота 3Ггц, то через CPUfreq мы могли бы задать частоту 1.6Ггц и процессор выше этой отметки не повышал бы частоту, за счет чего и достигалась бы экономия заряда аккумулятора. Но у процессоров использующих драйвер intel_pstate несколько сложнее с заданием частоты. Просто так указать нужную максимальную не получится, для этого мы и установили TLP, в нем можно хитро обойти это ограничение задав максимальное значение подаваемой энергии на процессор в процентах.

Что бы объяснить подробнее я введу команду:
sudo tlp-stat -p (TLP при этом должен быть запущен)


В последней сборке из трех строк (min_perf_pct, max_perf_pct, no_turbo) видим значения 44 и 100.
Это значения в процентах - 44% для min_perf, в мегагерцах это 792Mhz мощности моего процессора, то есть данная частота задана для моего процессора как минимальная и будет использоваться в режиме "Энергосбережение", но не будет являться фиксированной (!), ежели процессору потребуется больше мощности он ее поднимет до 1.8Ghz.
Значение 100% для состояния max_perf - соответственно полная мощность в 1800Mhz.
Процессор поддерживает плавное изменение частоты, но опять же таки выбрать в CPUfreq например частоту в 1600Mhz попросту нельзя.
По этому мы пойдем обходным путем и зададим для режима "Энергосбережение" максимальную мощность процессора в 61%, то есть ~1100Mhz. Теперь если процессору потребуется больше мощности в режиме энергосбережения, то он не поднимет частоту выше 1100Мгц, за счет чего и достигается экономия заряда батареи.

Еще раз, но вкратце ;) Для многих процессоров мы легко могли бы задать максимальную частоту путем простого ее прописывания в конфиге TLP, но для процессоров Intel использующих драйвер intel_pstate необходимо задавать НЕ частоту, а максимальную мощность процессора в процентах (нужную вам легко высчитать в калькуляторе).

При помощи последней команды которую я писал выше (sudo tlp-stat -p) можно определить поддерживает ли ваш процессор задание фиксированной частоты (будут перечислены возможные частоты) либо как в моем случае только два состояния и мощность в процентах.

Теперь собственно впишем в конфиг TLP максимальную часоту в 1100Мгц для энергосберегающего режима. Находим строки:

#CPU_MIN_PERF_ON_AC=0
#CPU_MAX_PERF_ON_AC=100
#CPU_MIN_PERF_ON_BAT=0
#CPU_MAX_PERF_ON_BAT=30
И меняем на:
CPU_MIN_PERF_ON_AC=0
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=61
Мы расскомментировали строки и указали, что для работы от сети процессор может работать на максимальной частоте (100% - 1800Мгц), а для работы от батареи частота ограничена (61% - 1100Мгц).
В случае если при работе от аккумулятора на частоте 1100Мгц будут наблюдаться тормоза, например при нескольких открытых вкладках в браузере и запущенном проигрывании аудио, то частоту следует немного поднять.

Расскомментируем следующие строки:
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
Менять ничего не надо, это отключает функцию Turbo boost.

Далее наоборот ЗАкомментируем строки (т.к. для нашего ядра отсутсвует пакет x86_energy_perf_policy, да и не надо нам данная функция, т.к. выше мы уже настроили поведение процессора).
#ENERGY_PERF_POLICY_ON_AC=performance
#ENERGY_PERF_POLICY_ON_BAT=powersave

Если вы следуете моим инструкциям начиная с Части 1, то у вас должно стоять модифицированное ядро 4.2.3-XanMod4 с установленным планировщиком CFQ. По этому ищем в конфиге строку и расскомментируем ее (убрать символ #):
DISK_IOSCHED="cfq cfq"

Данная инструкция находится в черновом варианте и не завершена! (27.10.2015)

3 комментария:

  1. Так бля, ты ее так и не завершил, чувак. Я хочу продолжения. Вечно вы все наобещаете, что закончите, вот типа срок 2 недели потом 2 годна ни слуху, ни духу. НИКОГДА НЕ ОБЕЩАЙ, ЕСЛИ НЕ ГОТОВ ЭТО СДЕЛАТЬ ПРЯМО СЕЙЧАС!!

    ОтветитьУдалить
    Ответы
    1. Пошол ты нахой, понял?

      Удалить
    2. Чувака, видимо, убрали "люди в черном" за такие познания...)

      Удалить