Учебники (How-To & F.A.Q)
   26361

Управление питанием с помощью tlp (настройка производительности)

Утилита tlp поможет настроить максимальную производительность для ПК и ноутбуков, а для последних добавит возможность перейти на энергосберегающий режим при питании от батареи. Советую ставить tlp и настраивать абсолютно на всех устройствах.

Не важно, ноутбук у вас или стационарный компьютер, по умолчанию manjaro использует энергосберегающую схему(регулятор) энергопотребления процессора powersave на системах с Intel. В других случаях обычно используется регулятор ondemand. Сравнение планировщиков вы можете посмотреть, например, на данном ресурсе.
Узнать подробнее про CPU регуляторы вы можете по ссылке.

Установка и настройка tlp:

sudo pacman -S tlp

Настроить автозапуск сервисов, выполнив следующие команды по очереди:
sudo systemctl disable systemd-rfkill.service
sudo systemctl mask systemd-rfkill.socket systemd-rfkill.service
sudo systemctl enable tlp.service
sudo systemctl enable tlp-sleep.service

Далее необходимо настроить конфигурационный файл tlp:
sudo nano /etc/default/tlp

Вы должны настроить, какие параметры вы хотите использовать, а также какой регулятор, в режиме зарядки(AC) и работе от батареи(BAT).
Доступные CPU регуляторы, вы можете узнать, введя команду:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors


Подробную инструкцию по настройке tlp вы можете прочитать здесь: http://linrunner.de/en/tlp/docs/tlp-configuration.html
Также может пригодиться:
https://wiki.archlinux.org/index.php/TLP

Я приведу свой конфигурационный файл, с пометкой #! для обозначения внимания, который подойдет как для ПК, так и для ноутбуков, настроенный на максимальную производительность при работе от сети и энергосбережении при работе от батареи:

# ------------------------------------------------------------------------------
# tlp - Parameters for power save
# See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html

# Hint: some features are disabled by default, remove the leading # to enable
# them.

# !
# Set to 0 to disable, 1 to enable TLP.
TLP_ENABLE=1

# Operation mode when no power supply can be detected: AC, BAT
# Concerns some desktop and embedded hardware only.
TLP_DEFAULT_MODE=AC

# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
DISK_IDLE_SECS_ON_AC=0
DISK_IDLE_SECS_ON_BAT=2

# Dirty page values (timeouts in secs).
MAX_LOST_WORK_SECS_ON_AC=15
MAX_LOST_WORK_SECS_ON_BAT=60

# Hint: CPU parameters below are disabled by default, remove the leading #
# to enable them, otherwise kernel default values are used.

# !
# Select a CPU frequency scaling governor:
#   ondemand, powersave, performance, conservative
# Intel Core i processor with intel_pstate driver:
#   powersave, performance
# Important:
#   You *must* disable your distribution's governor settings or conflicts will
#   occur. ondemand is sufficient for *almost all* workloads, you should know
#   what you're doing!
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave

# Set the min/max frequency available for the scaling governor.
# Possible values strongly depend on your CPU. For available frequencies see
# tlp-stat output, Section "+++ Processor".
#  CPU_SCALING_MIN_FREQ_ON_AC=0
#  CPU_SCALING_MAX_FREQ_ON_AC=0
#  CPU_SCALING_MIN_FREQ_ON_BAT=0
#  CPU_SCALING_MAX_FREQ_ON_BAT=0

# !
# Set Intel P-state performance: 0..100 (%)
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires an Intel Core i processor with intel_pstate driver.
CPU_MIN_PERF_ON_AC=50
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=30

# !
# Set the CPU "turbo boost" feature: 0=disable, 1=allow
# Requires an Intel Core i processor.
# Important:
# - This may conflict with your distribution's governor settings
# - A value of 1 does *not* activate boosting, it just allows it
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0

# !
# Minimize number of used CPU cores/hyper-threads under light load conditions
SCHED_POWERSAVE_ON_AC=0
SCHED_POWERSAVE_ON_BAT=1

# Kernel NMI Watchdog:
#   0=disable (default, saves power), 1=enable (for kernel debugging only)
NMI_WATCHDOG=0

# Change CPU voltages aka "undervolting" - Kernel with PHC patch required
# Frequency voltage pairs are written to:
#   /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
# CAUTION: only use this, if you thoroughly understand what you are doing!
#  PHC_CONTROLS="F:V F:V F:V F:V"

# !
# Set CPU performance versus energy savings policy:
#   performance, normal, powersave
# Requires kernel module msr and x86_energy_perf_policy from linux-tools
ENERGY_PERF_POLICY_ON_AC=performance
ENERGY_PERF_POLICY_ON_BAT=powersave

# Hard disk devices; separate multiple devices with spaces (default: sda).
# Devices can be specified by disk ID also (lookup with: tlp diskid).
DISK_DEVICES="sda sdb"

# !
# Hard disk advanced power management level: 1..254, 255 (max saving, min, off)
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple devices with spaces.
DISK_APM_LEVEL_ON_AC="255 255"
DISK_APM_LEVEL_ON_BAT="192 192"

# Hard disk spin down timeout:
#   0:        spin down disabled
#   1..240:   timeouts from 5s to 20min (in units of 5s)
#   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
#  DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
#  DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"

# Select IO scheduler for the disk devices: noop, deadline, cfq (Default: cfq);
# Separate values for multiple devices with spaces.
#  DISK_IOSCHED="cfq cfq"

# !
# SATA aggressive link power management (ALPM):
#   min_power, medium_power, max_performance
SATA_LINKPWR_ON_AC=max_performance
SATA_LINKPWR_ON_BAT=min_power

# !
# PCI Express Active State Power Management (PCIe ASPM):
#   default, performance, powersave
PCIE_ASPM_ON_AC=performance
PCIE_ASPM_ON_BAT=powersave

# Radeon graphics clock speed (profile method): low, mid, high, auto, default;
# auto = mid on BAT, high on AC; default = use hardware defaults.
# (Kernel >= 2.6.35 only, open-source radeon driver explicitly)
RADEON_POWER_PROFILE_ON_AC=high
RADEON_POWER_PROFILE_ON_BAT=low

# Radeon dynamic power management method (DPM): battery, performance
# (Kernel >= 3.11 only, requires boot option radeon.dpm=1)
RADEON_DPM_STATE_ON_AC=performance
RADEON_DPM_STATE_ON_BAT=battery

# Radeon DPM performance level: auto, low, high; auto is recommended.
RADEON_DPM_PERF_LEVEL_ON_AC=auto
RADEON_DPM_PERF_LEVEL_ON_BAT=auto

# WiFi power saving mode: 1=disable, 5=enable; not supported by all adapters.
WIFI_PWR_ON_AC=1
WIFI_PWR_ON_BAT=5

# Disable wake on LAN: Y/N
WOL_DISABLE=Y

# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables, >=1 enables power save.
SOUND_POWER_SAVE_ON_AC=0
SOUND_POWER_SAVE_ON_BAT=1

# Disable controller too (HDA only): Y/N
SOUND_POWER_SAVE_CONTROLLER=Y

# Set to 1 to power off optical drive in UltraBay/MediaBay when running on
# battery. A value of 0 disables this feature (Default).
# Drive can be powered on again by releasing (and reinserting) the eject lever
# or by pressing the disc eject button on newer models.
# Note: an UltraBay/MediaBay hard disk is never powered off.
BAY_POWEROFF_ON_BAT=0
# Optical drive device to power off (default sr0).
BAY_DEVICE="sr0"

# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable
RUNTIME_PM_ON_AC=on
RUNTIME_PM_ON_BAT=auto

# Runtime PM for *all* PCI(e) bus devices, except blacklisted ones:
#   0=disable, 1=enable
RUNTIME_PM_ALL=1

# Exclude PCI(e) device adresses the following list from Runtime PM
# (separate with spaces). Use lspci to get the adresses (1st column).
#  RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6"

# Exclude PCI(e) devices assigned to the listed drivers from Runtime PM
# (should prevent accidential power on of hybrid graphics' discrete part).
# Default is "radeon nouveau"; use "" to disable the feature completely.
# Separate multiple drivers with spaces.
RUNTIME_PM_DRIVER_BLACKLIST="radeon nouveau"

# Set to 0 to disable, 1 to enable USB autosuspend feature.
USB_AUTOSUSPEND=1

# Exclude listed devices from USB autosuspend (separate with spaces).
# Use lsusb to get the ids.
# Note: input devices (usbhid) are excluded automatically (see below)
#  USB_BLACKLIST="1111:2222 3333:4444"

# WWAN devices are excluded from USB autosuspend:
# 0=do not exclude / 1=exclude
USB_BLACKLIST_WWAN=1

# Include listed devices into USB autosuspend even if already excluded
# by the driver or WWAN blacklists above (separate with spaces).
# Use lsusb to get the ids.
#  USB_WHITELIST="1111:2222 3333:4444"

# Set to 1 to disable autosuspend before shutdown, 0 to do nothing
# (workaround for USB devices that cause shutdown problems).
#  USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1

# !
# С помощью данного параметра, вы можете восстановить состояние
# беспроводных сетей, с предыдущей сессии
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
#   are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=1

# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#  DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"

# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#  DEVICES_TO_ENABLE_ON_STARTUP="wifi"

# Radio devices to disable on shutdown: bluetooth, wifi, wwan
# (workaround for devices that are blocking shutdown).
#  DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan"

# Radio devices to enable on shutdown: bluetooth, wifi, wwan
# (to prevent other operating systems from missing radios).
#  DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"

# Radio devices to enable on AC: bluetooth, wifi, wwan
#  DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan"

# Radio devices to disable on battery: bluetooth, wifi, wwan
#  DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan"

# Radio devices to disable on battery when not in use (not connected):
# bluetooth, wifi, wwan
#  DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan"

# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module
# required). Charging starts when the remaining capacity falls below the
# START_CHARGE_TRESH value and stops when exceeding the STOP_CHARGE_TRESH value.
# Main / Internal battery (values in %)
#  START_CHARGE_THRESH_BAT0=75
#  STOP_CHARGE_THRESH_BAT0=80
# Ultrabay / Slice / Replaceable battery (values in %)
#  START_CHARGE_THRESH_BAT1=75
#  STOP_CHARGE_THRESH_BAT1=80

# ------------------------------------------------------------------------------
# tlp-rdw - Parameters for the radio device wizard
# Possible devices: bluetooth, wifi, wwan

# Hints:
# - Parameters are disabled by default, remove the leading # to enable them.
# - Separate multiple radio devices with spaces.

# Radio devices to disable on connect.
#  DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#  DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#  DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"

# Radio devices to enable on disconnect.
#  DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#  DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#  DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""

# Radio devices to enable/disable when docked.
#  DEVICES_TO_ENABLE_ON_DOCK=""
#  DEVICES_TO_DISABLE_ON_DOCK=""

# Radio devices to enable/disable when undocked.
#  DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#  DEVICES_TO_DISABLE_ON_UNDOCK=""


После настройки, tlp будет автоматический запускаться с системой. Также вы можете запустить его, не перезагружаясь:
sudo tlp start

Чтобы проверить его работу, достаточно выполнить
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Вы увидите планировщик который вы указали при питании от сети, в моем случае — performance, либо же powersave при работе от батареи.

Полный вывод утилиты tlp, включающий отчет по всем устройствам, можно узнать с помощью команды:
sudo tlp-stat

17 комментариев

avatar
Хочется добавить одну вещь связанную с опцией:
DISK_APM_LEVEL_ON_BAT

Когда я использовал ноут с обычным HDD (не SSD), при работе от батареи с TLP, жесткий диск начинал часто щелкать (парковал головки). Победить это помогло изменение значения DISK_APM_LEVEL_ON_BAT с 128 на 192:
DISK_APM_LEVEL_ON_BAT=«192»

Для владельцев SSD может иметь место потеря производительности. Тогда можно отрубить APM:
DISK_APM_LEVEL_ON_BAT=«255»

Конечно же это все есть по ссылке на мануал по конфигурированию TLP (http://linrunner.de/en/tlp/docs/tlp-configuration.html).
+3
avatar
Спасибо за дельные советы, обновил статью. Провел тестирование, скорость чтения значительно увеличилась с параметром DISK_APM_LEVEL_ON_AC=«255 255». На счет DISK_APM_LEVEL_ON_BAT=«192 192» решил так и оставить, потому что энергосбережение важнее производительности, при работе от батареи, к тому же это SSD.
0
avatar
Ну у меня сейчас SSD и стоит DISK_APM_LEVEL_ON_BAT=«128 128». То есть дефолтное значение. Но я вообщем-то не ощущаю какую-то потерю производительности :). Но если вдруг буду ощущать, то тогда может значение 255 попробую.
Если не ошибаюсь SSD даже при отключенном APM все равно не должен много кушать батарейку, по сравнению с тем же HDD. Поэтому для HDD важнее данная настройка.
Приятно, что все можно под себя настроить в этом TLP.
Последний раз редактировалось
0
avatar
Последний раз редактировалось
0
avatar
а штатные средства что ли не так работают? есть же в графических оболочках модули «Энергосбережение», в чем преимущества tlp?
0
avatar
Стандартные средства затрагивают только отключение\затухание дисплея, перевод в ждущий\спящий режим, не затрагивая процессор и остальные устройства, влияющие на энергосбережение. Обратите на это внимание, когда зайдете в данную графическую настройку. Прочитать подробнее про tlp, вы можете на официальном сайте проекта: http://linrunner.de/en/tlp/tlp.html
0
avatar
получается они будут работать независимо друг от друга? не может быть конфликтов?
0
avatar
получается они будут работать независимо друг от друга?
да, дополняя друг друга
не может быть конфликтов?
я на своём ноуте почти за год пользования, ни каких конфликтов не замечал.
0
avatar
Прирост производительности ощутимый может быть?
+1
avatar
Doaxan, вопрос у меня по Вашему конфигу. Ничего, что в секции «Hard disk devices» выставлено умолчальное «sda sdb»?
В строке ниже написано, как определить ID диска к которому будут применяться данные манипуляции (tlp diskid). По ссылке на linruner в разделе Disks and Controllers тоже, что-то в этом роде:
чтоб по линку не ходить
Note: TLP's default settings work well with SSDs, there is no immediate need to tune them.
Device Assignment
DISK_DEVICES=«sda sdb»

Defines the disk devices the following parameters are effective for. Multiple devices are separated with blanks.

When using a 2nd disk in a swappable drive slot or the Ultrabay, the assignment of device names by the kernel (sda/sdb) can change possibly. In this case it is advisable to do the device assignment using IDs:
DISK_DEVICES=«ata-INTEL_SSDSA2M160G2GC_XZY123456890 ata-HITACHI_HTS541612J9SA00_XZY123456890»

The command
tlp diskid

shows the IDs of all attached disks.

К сожалению знания английского не достаточно, что бы понять точно разработчика, только поверхностно. Я прописываю ID диска. Что скажете?
0
avatar
Ничего страшного — в дефолтном конфиге два диска указаны для наглядности (что разделителем является именно пробел), изменения коснутся только реально существующих дисков.
ID дисков лучше прописывать в том случае, если вы их часто отсоединяете — к примеру, сейчас ваш второй диск определяется как /dev/sdb, вы его переприсоединили — ядро определило его как /dev/sdc (хотя на практике наблюдал подобное только с флешками), и TLP этот диск уже не контролирует.
+1
avatar
ну да ладно оставлю как есть, пусть с номером работает (наверняка), как говорят: работает, не лезь )
0
avatar
у меня intel_pstate ставить ли tlp?
0
avatar
Если вас устраивает круглосуточное энергосбережение на ПК или ноутбуке, и вам не нужна максимальная производительность, то можете этого не делать. Так же советую перечитать статью и понять для чего нужен tlp.
0
avatar
Что Вы имеете в виду говоря:
у меня intel_pstate
этот режим нужно включать и настраивать.
Яндекс по запросу: «технология intel_pstate + tlp», среди прочих выдал ссылочку где описывается настройка энергосбережения в Линукс с помощью intel_pstate и thermald. Почти в самом конце статьи есть такая строчка:

It's also worth mentioning that TLP supports Intel P-State

и если верить Гуглопереводу, то получается:

Стоит также отметить, что TLP поддерживает Intel P-State

У меня тоже P-State:
Спойлер!
$ sudo tlp stat | grep intel
[sudo] пароль для ramash:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver = intel_pstate
/sys/devices/system/cpu/cpu1/cpufreq/scaling_driver = intel_pstate
/sys/devices/system/cpu/cpu2/cpufreq/scaling_driver = intel_pstate
/sys/devices/system/cpu/cpu3/cpufreq/scaling_driver = intel_pstate
/sys/devices/system/cpu/intel_pstate/min_perf_pct = 100
/sys/devices/system/cpu/intel_pstate/max_perf_pct = 100
/sys/devices/system/cpu/intel_pstate/no_turbo = 0

толко я с ним не заморачивался, tlp достаточно, может в будущем как-нибудь.
Да, вот ещё, кусок моего конфига где есть настройки для этого pstate:
Спойлер!
# Intel Core i processor with intel_pstate driver:
# powersave, performance
# Important:
# You *must* disable your distribution"s governor settings or conflicts will
# occur. ondemand is sufficient for *almost all* workloads, you should know
# what you're doing!
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=pewersave
++++++++++++++++++++++++++++++++++++++++++++++++++
# Set Intel P-state performance: 0..100 (%)
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires an Intel Core i processor with intel_pstate driver.
CPU_MIN_PERF_ON_AC=0
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=30

Если у Вас Manjaro-Xfce-15.12-x64, сервис tlp предустановлен. Можно ставить вопрос по другому: стоит ли удалять? :)
З.Ы. у меня комментарии на параметрах (О_о)
Последний раз редактировалось
0
avatar
У меня возникла проблема при выполнение команды
<code>sudo systemctl enable tlp-sleep.service</code>
. Ошибка: Failed to enable unit: Unit file tlp-sleep.service does not exist
0
avatar
так написано же, что нет такого юнита, создай, ели нужен. имхо: статья немного устарела, видимо этот сервис уже не надо запускать. у меня его нет
Последний раз редактировалось
?
Всегда есть быстрое простое неправильное решение.
быстрые простые правильные (иногда) ответы здесь t.me/ManjaroRu
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.