Seachest utilities как пользоваться
Перейти к содержимому

Seachest utilities как пользоваться

  • автор:

Power management (Русский)

Состояние перевода: На этой странице представлен перевод статьи Power management. Дата последней синхронизации: 3 июня 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

  • Ждущий и спящий режимы
  • Power management/Wakeup triggers
  • Display Power Management Signaling (Русский)
  • Управление частотой процессора
  • Гибридная графика
  • Модули ядра
  • sysctl (Русский)
  • udev (Русский)

Управление питанием — это функция, которая отключает питание или переводит компоненты системы в состояние низкого энергопотребления, когда они неактивны.

В Arch Linux управление питанием состоит из двух основных частей:

  1. Конфигурация ядра Linux, которое взаимодействует с аппаратным обеспечением.
    • Параметры ядра
    • Модули ядра
    • Правила udev
  2. Конфигурация пользовательских инструментов, которые взаимодействуют с ядром и реагируют на его события. Многие инструменты также предоставляют удобные способы изменения конфигурация ядра. Смотрите раздел #Пользовательские инструменты.

Пользовательские инструменты

Эти инструменты являются удобной альтернативой ручной установке многих параметров. Запускайте только один из этих инструментов, чтобы избежать возможных конфликтов, так как все они работают примерно одинаково. Просмотрите Category:Power management (Русский), чтобы получить представление о том, какие возможности управления питанием существуют в Arch Linux.

Популярные скрипты и инструменты, управляющие энергосбережением:

Консольные

  • acpid — Демон для доставки событий управления питанием ACPI с поддержкой netlink.
  • Laptop Mode Tools — Инструмент для настройки параметров энергосбережения ноутбука, которую многие считают де-факто утилитой для энергосбережения, хотя она может потребовать некоторой настройки.
  • libsmbios — Библиотека и инструменты для взаимодействия с таблицами Dell SMBIOS.
  • powertop — Инструмент для диагностики проблем с энергопотреблением и управлением питанием, помогающий установить параметры энергосбережения.
  • systemd — Менеджер системы и служб.
  • TLP — Расширенное управление питанием для Linux.

Графические

  • batsignal — Лёгкий монитор батареи, использующий libnotify для предупреждения о низком уровне заряда.
  • cbatticon — Лёгкий и быстрый значок батареи в системном трее.
  • GNOME Power Statistics — Информация о питании системы и статистика для среды GNOME.
  • KDE Power Devil — Модуль управления питанием для Plasma.
  • LXQt Power Management — Модуль управления питанием для LXQt.
  • MATE Power Management — Инструмент управления питанием для MATE.
  • MATE Power Statistics — Информация о питании системы и статистика для среды MATE.
  • poweralertd — Демон для доставки уведомлений UPower.
  • powerkit — Менеджер питания, независимый от сред рабочего стола.
  • Xfce Power Manager — Менеджер питания для Xfce.
  • vattery — Приложение, написанное на Vala, которое отображает состояние батареи ноутбука в системном трее.

Управление питанием

События ACPI

systemd обрабатывает некоторые события ACPI, связанные с питанием. Выполняемые при этом действия можно настроить в /etc/systemd/logind.conf или /etc/systemd/logind.conf.d/*.conf — смотрите logind.conf(5) . В системах без специального менеджера питания он может заменить демон acpid, который обычно использовался для реагирования на эти события ACPI.

Возможные действия — ignore , poweroff , reboot , halt , suspend , hibernate , hybrid-sleep , suspend-then-hibernate , lock или kexec . Для использования ждущего (suspend) и спящего (hibernate) режимов требуется предварительная настройка. При отсутствии настроек systemd будет выполнять действие по умолчанию.

Обработчик Описание Действие по умолчанию
HandlePowerKey Срабатывает, когда нажата кнопка питания. poweroff
HandleSuspendKey Срабатывает, когда нажата кнопка ждущего режима. suspend
HandleHibernateKey Срабатывает, когда нажата кнопка спящего режима. hibernate
HandleLidSwitch Срабатывает, когда закрывается крышка (ноутбука), за исключением описанных ниже случаев. suspend
HandleLidSwitchDocked Срабатывает, когда закрывается крышка, но система подключена к док-станции или подключено более одного монитора. ignore
HandleLidSwitchExternalPower Срабатывает, когда закрывается крышка, но система подключена к внешнему питанию. действие, установленное для HandleLidSwitch

Для применения изменений отправьте процессу systemd-logind сигнал HUP :

# systemctl kill -s HUP systemd-logind

Примечание: systemd не умеет обрабатывать события ACPI, связанные с внешним питанием или батареей, поэтому если вы используете Laptop Mode Tools или другие подобные инструменты, то acpid по-прежнему необходим.

Менеджеры питания

Некоторые среды рабочего стола предоставляют менеджеры питания, которые блокируют (inhibit, временно отключают) некоторые или все настройки systemd ACPI. Если такой менеджер питания запущен, то действия для событий ACPI могут быть настроены только в этом менеджере. Изменения в /etc/systemd/logind.conf или /etc/systemd/logind.conf.d/*.conf нужны только в том случае, если вы хотите настроить поведение для события, которое не блокируется используемым вами менеджером питания.

Обратите внимание, что если менеджер питания не блокирует соответствующие события в systemd, вы можете оказаться в ситуации, когда systemd уводит систему в сон, а затем, когда система пробуждается, другой менеджер питания снова уводит её в сон. Менеджеры питания KDE, GNOME, Xfce и MATE выдают необходимые команды inhibited. Если они не выдаются, например, при использовании acpid или других инструментов для обработки событий ACPI, установите в опциях Handle значение ignore . Смотрите также systemd-inhibit(1) .

xss-lock

xss-lock подписывается на systemd-события suspend , hibernate , lock-session и unlock-session с соответствующими действиями (запустить блокировщик и ждать, пока пользователь разблокирует или убьёт блокировщик). xss-lock также реагирует на события DPMS и в ответ запускает или завершает блокировщик.

Добавьте xss-lock в автозапуск, например:

xss-lock -- i3lock -n -i фоновая_картинка.png &

Ждущий и спящий режимы

systemd предоставляет команды для перехода в ждущий (suspend) или спящий (hibernate) режим, использующие встроенную в ядро функциональность. Также есть механизм хуков для настройки действий до и после сна.

Команда systemctl suspend должна работать из коробки, а для systemctl hibernate требуется предварительная настройка, описанная в статье Ждущий и спящий режимы#Гибернация.

Также есть ещё два режима, комбинирующих ждущий и спящий режимы:

  • systemctl hybrid-sleep сохраняет состояние системы одновременно и в оперативной памяти, и на диске, благодаря чему отключение питания не приводит к потере данных. Этот режим также называют suspend to both.
  • systemctl suspend-then-hibernate изначально уходит в ждущий режим на максимально возможное время, затем по сигналу от аппаратных часов (или по сигналу о низком заряде батареи, если это реализовано в системе) просыпается и уходит в спящий режим. Время срабатывания аппаратных часов указывается в настройке HibernateDelaySec в файле systemd-sleep.conf(5) . Значение по умолчанию вычисляется на основе скорости разряда батареи так, чтобы к моменту пробуждения оставалось 5% заряда; если батареи нет, то значение по умолчанию 2 часа. Вычисление производится на основе измерения уровня заряда батареи после времени, заданного в настройке SuspendEstimationSec в systemd-sleep.conf(5) : после истечения указанного времени система ненадолго проснётся для выполнения измерения (измерение также производится при пробуждении пользователем).

Примечание: Помимо стандартной функциональности ядра, systemd так может использовать другие бэкенды (например, uswsusp) для перехода в ждущий или спящий режим. Пример есть в разделе uswsusp#With systemd.

Переход в гибридный спящий режим вместо ждущего и спящего режимов

Можно настроить systemd так, чтобы система уходила в гибридный спящий режим, даже если запрашивается переход в ждущий или спящий режим.

Действия, выполняемые при запросе ждущего или спящего режима, можно настроить через файлы .conf в каталоге /etc/systemd/sleep.conf.d/ . Чтобы при обоих запросах выполнялся переход в гибридный спящий режим:

/etc/systemd/sleep.conf.d/hybrid-sleep.conf
[Sleep] # suspend=hybrid-sleep SuspendMode=suspend SuspendState=disk # hibernate=hybrid-sleep HibernateMode=suspend HibernateState=disk

Смотрите sleep.conf.d(5) и документацию ядра для более подробной информации.

Отключение сна

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

/etc/systemd/sleep.conf.d/disable-suspend.conf
[Sleep] AllowSuspend=no AllowHibernation=no AllowSuspendThenHibernate=no AllowHybridSleep=no

Хуки

Файлы служб

Можно запускать службы до или после сна, если связать их с юнитами suspend.target, hibernate.target, sleep.target, hybrid-sleep.target и suspend-then-hibernate.target. Для общесистемных и пользовательских действий нужно создавать отдельные файлы. Ниже приведены примеры таких файлов; включите службы suspend@пользователь и resume@пользователь .

/etc/systemd/system/suspend@.service
[Unit] Description=User suspend actions Before=sleep.target [Service] User=%I Type=forking Environment=DISPLAY=:0 ExecStartPre= -/usr/bin/pkill -u %u unison ; /usr/local/bin/music.sh stop ExecStart=/usr/bin/sflock ExecStartPost=/usr/bin/sleep 1 [Install] WantedBy=sleep.target
/etc/systemd/system/resume@.service
[Unit] Description=User resume actions After=suspend.target [Service] User=%I Type=simple ExecStart=/usr/local/bin/ssh-connect.sh [Install] WantedBy=suspend.target

Примечание: Так как процесс, запускающий блокировку экрана, может завершиться до того, как экран реально заблокируется, — есть вероятность, что экран не успеет заблокироваться перед уходом в сон, и после пробуждения на экране может на мгновение отобразиться незаблокированный рабочий стол. Добавление небольшой задержки через ExecStartPost=/usr/bin/sleep 1 помогает предотвратить это, позволяя блокировщику экрана успеть заблокировать экран.

Пример для общесистемных действий (включите службы root-resume и root-suspend ):

/etc/systemd/system/root-suspend.service
[Unit] Description=Local system suspend actions Before=sleep.target [Service] Type=simple ExecStart=-/usr/bin/pkill sshfs [Install] WantedBy=sleep.target
/etc/systemd/system/root-resume.service
[Unit] Description=Local system resume actions After=suspend.target [Service] Type=simple ExecStart=/usr/bin/systemctl restart mnt-media.automount [Install] WantedBy=suspend.target
  • Если указать Type=oneshot , то вы сможете использовать несколько строк ExecStart= . В противном случае допускается только одна строка ExecStart . Вы можете добавлять дополнительные команды либо с помощью ExecStartPre , либо разделяя команды точкой с запятой (смотрите первый пример выше; обратите внимание на пробелы до и после точки с запятой, так как они обязательны).
  • Если к команде добавить префикс — , то ненулевой статус выхода будет игнорироваться и любое завершение работы команды будет считаться успешным выполнением команды.
  • Лучшее место для поиска ошибок при решении проблем, связанных с этими файлами, — это, конечно, journalctl.
Комбинированный файл службы

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

Пример и объяснение:

/etc/systemd/system/wicd-sleep.service
[Unit] Description=Wicd sleep hook Before=sleep.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=-/usr/share/wicd/daemon/suspend.py ExecStop=-/usr/share/wicd/daemon/autoconnect.py [Install] WantedBy=sleep.target
  • RemainAfterExit=yes : После запуска служба считается активной до тех пор, пока её явно не остановят.
  • StopWhenUnneeded=yes : Если служба активна, она будет остановлена, если ни одна другая активная служба не нуждается в ней. В данном конкретном примере она будет остановлена после остановки sleep.target.
  • Поскольку sleep.target связан с suspend.target, hibernate.target и hybrid-sleep.target и поскольку sleep.target сам является StopWhenUnneeded службой, хук гарантированно запустится/остановится правильно для различных режимов.
Общая служба-шаблон

В следующем примере показана служба-шаблон, которая может быть использована для подключения любой существующей службы systemd к событиям питания:[1]

/etc/systemd/system/sleep@.service
[Unit] Description=%I sleep hook Before=sleep.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=-/usr/bin/systemctl stop %i ExecStop=-/usr/bin/systemctl start %i [Install] WantedBy=sleep.target

Включите экземпляр этого шаблона, после символа @ указав название существующей службы systemd, то есть sleep@название-файла-службы.service . Смотрите systemd.unit(5) § DESCRIPTION для более подробной информации о юнитах-шаблонах.

Совет: Шаблоны не ограничены управлением службами systemd и могут использоваться с другими программами. Примеры можно посмотреть здесь: [2]

Хуки в /usr/lib/systemd/system-sleep

systemd запускает все исполняемые файлы из каталога /usr/lib/systemd/system-sleep/ , передавая им два аргумента:

  • Аргумент 1: pre или post в зависимости от того, уходит ли система в сон или пробуждается
  • Аргумент 2: suspend , hibernate или hybrid-sleep в зависимости от конкретного режима сна

systemd запускает все файлы одновременно, а не последовательно друг за другом.

Вывод будет записан в журнал службы systemd-suspend.service, systemd-hibernate.service или systemd-hybrid-sleep.service, который можно посмотреть с помощью journalctl:

# journalctl -b -u systemd-suspend.service

Примечание: Вместо написания скриптов можно связывать юниты systemd с sleep.target, suspend.target, hibernate.target или hybrid-sleep.target.

/usr/lib/systemd/system-sleep/example.sh
#!/bin/sh case $1/$2 in pre/*) echo "Going to $2. " ;; post/*) echo "Waking up from $2. " ;; esac

Не забудьте сделать скрипт исполняемым.

Смотрите systemd.special(7) и systemd-sleep(8) для более подробной информации.

Решение проблем

Отложенное выполнение действия при закрытии крышки ноутбука

Если ноутбук закрывается и открывается несколько раз подряд, logind задержит переход в ждущий режим до 90 секунд, чтобы дать ядру время для обнаружения подключенной док-станции. [3] С версии systemd v220 время задержки можно настроить:[4]

/etc/systemd/logind.conf
. HoldoffTimeoutSec=30s .
Fn-кнопка сна на ноутбуке не работает

Если независимо от настроек в logind.conf кнопка сна не работает (её нажатие даже не приводит к появлению сообщения в syslog), то logind, вероятно, не отслеживает клавиатуру. [5] Выполните:

# journalctl --grep="Watching system buttons"

Вы увидите что-то подобное:

May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event2 (Power Button) May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event3 (Sleep Button) May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event4 (Video Bus)

Если здесь нет клавиатуры, то найдите её ATTRS [6] :

# udevadm info -a /dev/input/by-path/*-kbd
. KERNEL=="event0" . ATTRS=="AT Translated Set 2 keyboard"

И напишите правило udev для добавления тега «power-switch»:

/etc/udev/rules.d/70-power-switch-my.rules
ACTION=="remove", GOTO="power_switch_my_end" SUBSYSTEM=="input", KERNEL=="event*", ATTRS=="AT Translated Set 2 keyboard", TAG+="power-switch" LABEL="power_switch_my_end"

Перезапустите службу systemd-udevd.service , перезагрузите правила выполнением команды udevadm trigger от имени root и перезапустите службу systemd-logind.service .

Теперь в журнале должна появиться строка, связанная с клавиатурой: Watching system buttons on /dev/input/event0 .

Компьютер с чипсетом A520I или B550I не пробуждается

На некоторых материнских платах с чипсетами A520i и B550i система не полностью входит в состояние сна или выходит из него. Симптомы: система переходит в сон, монитор выключается, а внутренние светодиоды на материнской плате или светодиод питания остаются включенными. Впоследствии система не возвращается из этого состояния и требует полного выключения питания. Если у вас возникли подобные проблемы с AMD, сначала убедитесь, что ваша система полностью обновлена, и проверьте, установлен ли пакет с микрокодом для AMD.

Убедитесь, что строка, начинающаяся с GPP0 , имеет статус enabled:

$ cat /proc/acpi/wakeup
Device S-state Status Sysfs node GP12 S4 *enabled pci:0000:00:07.1 GP13 S4 *enabled pci:0000:00:08.1 XHC0 S4 *enabled pci:0000:0b:00.3 GP30 S4 *disabled GP31 S4 *disabled PS2K S3 *disabled GPP0 S4 *enabled pci:0000:00:01.1 GPP8 S4 *enabled pci:0000:00:03.1 PTXH S4 *enabled pci:0000:05:00.0 PT20 S4 *disabled PT24 S4 *disabled PT26 S4 *disabled PT27 S4 *disabled PT28 S4 *enabled pci:0000:06:08.0 PT29 S4 *enabled pci:0000:06:09.0

Если enabled, вы можете выполнить следующую команду:

# echo GPP0 > /proc/acpi/wakeup

Теперь проверьте, запустив systemctl suspend и позволив системе перейти в ждущий режим. Затем попробуйте разбудить систему через несколько секунд. Если это сработает, вы можете сделать этот обходной путь постоянным. Создайте файл юнита systemd:

/etc/systemd/system/toggle-gpp0-to-fix-wakeup.service
[Unit] Description="Disable GPP0 to fix suspend issue" [Service] ExecStart=/bin/sh -c "/bin/echo GPP0 > /proc/acpi/wakeup" [Install] WantedBy=multi-user.target

Советы и рекомендации

Подкачка только для спящего режима

Иногда может потребоваться, чтобы подкачка включалась только для спящего режима и выключалась после пробуждения.

Хотя это можно реализовать с помощью описанных выше хуков, можно также напрямую настроить юнит подкачки (смотрите systemd.swap(5) ):

/etc/systemd/system/путь-к-подкачке.swap
[Unit] Before=systemd-hibernate.service StopWhenUnneeded=true [Swap] What=/путь/к/подкачке Options=noauto [Install] RequiredBy=systemd-hibernate.service

Обратите внимание, что имя файла юнита должно соответствовать пути подкачки и что юнит должен быть включен, чтобы параметр RequiredBy= вступил в силу.

Можно также прописать в зависимости hibernate.target вместо systemd-hibernate.service , но тогда прямой запуск systemctl start systemd-hibernate.service не будет работать.

Обратите внимание, что среды рабочего стола теперь могут не показывать опцию перехода в спящий режим и systemctl hibernate не будет работать, потому что они запрашивают у systemd-logind доступные режимы энергосбережения, а он не будет сообщать о возможности перехода в спящий режим, если нет активной подкачки.

Это можно обойти, запустив systemd-logind с переменной окружения SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1 , например, создав drop-in файл:

/etc/systemd/system/systemd-logind.service.d/disable-hibernation-swap-check.conf
[Service] Environment="SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1"

Энергосбережение

Примечание: Специфичные для ноутбуков вещи, такие как мониторинг батареи, описаны в статье Laptop#Power management. Также посмотрите статьи для ваших моделей процессора или видеокарты (например, Ryzen или AMDGPU).

Данный раздел является справочником по созданию скриптов и настроек энергосбережения, например, с помощью правил udev. Убедитесь, что настройки не управляются каким-либо другим пользовательским инструментом, чтобы не было конфликтов.

Почти все перечисленные здесь функции стоит использовать независимо от того, работает ли компьютер от сети или от батареи. Большинство из них имеют незначительное влияние на производительность и просто не включены по умолчанию из-за распространённых неисправностей оборудования/драйверов. Снижение энергопотребления означает снижение тепловыделения, что может даже привести к повышению производительности современного процессора Intel или AMD благодаря динамическому изменению тактовой частоты.

Процессоры с поддержкой Intel HWP (Intel Hardware P-state)

Доступные энергетические предпочтения (energy preferences) процессора, поддерживающего HWP: default , performance , balance_performance , balance_power , power .

Это можно проверить командой

$ cat /sys/devices/system/cpu/cpufreq/policy?/energy_performance_available_preferences

Чтобы сэкономить больше энергии, можно создать следующий файл:

/etc/tmpfiles.d/energy_performance_preference.conf
w /sys/devices/system/cpu/cpufreq/policy?/energy_performance_preference - - - - balance_power

Смотрите systemd-tmpfiles(8) и tmpfiles.d(5) для более подробной информации.

Звук

Ядро

По умолчанию энергосбережение звуковых устройств отключено в большинстве драйверов. Его можно включить, задав параметр power_save — время (в секундах) до перехода в режим ожидания. Чтобы отключить звуковую карту через одну секунду, создайте следующий файл для звуковых карт Intel.

/etc/modprobe.d/audio_powersave.conf
options snd_hda_intel power_save=1

Для ac97 используйте следующее:

options snd_ac97_codec power_save=1
  • Чтобы узнать производителя звуковой карты и соответствующий драйвер ядра, выполните lspci -k .
  • Переключение состояния питания аудиокарты может вызвать щёлкающий звук или заметную задержку на некотором оборудовании.

Также можно ещё больше снизить требования к питанию звука, отключив аудиовыход HDMI, что можно сделать, заблокировав соответствующие модули ядра (например, snd_hda_codec_hdmi для Intel).

PulseAudio

По умолчанию PulseAudio приостанавливает работу всех источников звука, которые слишком долго простаивают. При использовании внешнего USB-микрофона запись может начинаться с щелчком. В качестве обходного пути закомментируйте следующую строку в файле /etc/pulse/default.pa :

load-module module-suspend-on-idle

После этого перезапустите PulseAudio: systemctl restart —user pulseaudio .

Подсветка экрана

Bluetooth

Чтобы полностью отключить Bluetooth, заблокируйте модули btusb и bluetooth .

Для временного отключения используйте rfkill:

# rfkill block bluetooth

Или с помощью правила udev:

/etc/udev/rules.d/50-bluetooth.rules
# disable bluetooth SUBSYSTEM=="rfkill", ATTR=="bluetooth", ATTR="0"

Веб-камера

Если вы не используете встроенную веб-камеру, заблокируйте модуль uvcvideo .

Параметры ядра

Этот раздел использует конфигурацию /etc/sysctl.d/ — drop-in каталог для sysctl-параметров ядра. Смотрите The New Configuration Files и sysctl.d(5) для более подробной информации.

Отключение сторожевого таймера с NMI

Сторожевой таймер, использующий немаскируемое прерывание (Non-maskable interrupt), — это отладочная функция, позволяющая отлавливать аппаратные зависания, которые вызывают панику ядра. В некоторых системах он может генерировать большое количество прерываний, вызывая заметное увеличение энергопотребления:

/etc/sysctl.d/disable_watchdog.conf
kernel.nmi_watchdog = 0

Или добавьте nmi_watchdog=0 в параметры ядра для полного отключения с начала загрузки.

Время Writeback

Увеличение времени перед записью изменённых данных из памяти на диск помогает сгруппировать операции ввода-вывода, тем самым уменьшая нагрузку на диск и потребление энергии. Чтобы установить значение 60 секунд (по умолчанию 5 секунд):

/etc/sysctl.d/dirty.conf
vm.dirty_writeback_centisecs = 6000

Чтобы сделать то же самое для записи журналов на поддерживаемых файловых системах (например, ext4, btrfs. ), используйте commit=60 в качестве опции в fstab.

Обратите внимание, что это значение изменяется как побочный эффект настройки Laptop Mode, приведённой ниже. Другие параметры, влияющие на производительность ввода-вывода и энергосбережение, описаны в разделе sysctl (Русский)#Виртуальная память.

Laptop Mode

Смотрите документацию ядра. «A sensible value for the knob is 5 seconds.»

/etc/sysctl.d/laptop.conf
vm.laptop_mode = 5

Примечание: Эта настройка в основном относится к жёстким дискам.

Сетевые интерфейсы

Wake-on-LAN может быть полезной функцией, но если вы не используете её, то она впустую потребляет дополнительную энергию в режиме сна. Вы можете адаптировать правило Wake-on-LAN#udev, чтобы отключить эту функцию для всех Ethernet-интерфейсов. Чтобы включить энергосбережение с помощью iw на всех беспроводных интерфейсах:

/etc/udev/rules.d/81-wifi-powersave.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save on"

Имя этого файла имеет важное значение. При использовании постоянных имён устройств в systemd это правило, которое в лексикографической сортировке находится после 80-net-setup-link.rules , применяется после переименования устройства в его постоянное имя, например wlan0 переименовывается в wlp3s0 . Помните, что команда RUN выполняется после обработки всех правил и в любом случае должна использовать постоянное имя, доступное в $name для сопоставленного устройства.

Беспроводные карты Intel (iwlwifi)

Дополнительные функции энергосбережения беспроводных карт Intel с драйвером iwlwifi можно включить путём передачи правильных параметров в модуль ядра. Сделать их постоянными можно, добавив следующие строки в файл /etc/modprobe.d/iwlwifi.conf :

options iwlwifi power_save=1

Эта опция, вероятно, увеличит медианную задержку:

options iwlwifi uapsd_disable=0
options iwlwifi d0i3_disable=0

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

options iwlmvm power_scheme=3
options iwldvm force_cam=0

Вы можете проверить, какой из них является актуальным, проверив, какой из этих модулей запущен, используя

# lsmod | grep '^iwl.vm'

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

Управление питанием шин

Active State Power Management

Если система считает, что компьютер не поддерживает ASPM, он будет отключен при загрузке:

# lspci -vv | grep 'ASPM.*abled;'

ASPM управляется через BIOS. Если ASPM отключен, это происходит потому, что [7]:

  1. BIOS отключил его по какой-то причине (из-за конфликтов?).
  2. PCIE требует ASPM, но L0s необязательны (поэтому L0s могут быть отключены, а включен только L1).
  3. BIOS мог быть не запрограммирован для этого.
  4. BIOS глючит.

Если компьютер точно поддерживает ASPM, его можно принудительно включить с помощью параметра ядра pcie_aspm=force .

  • Принудительное включение ASPM может вызвать зависание/панику, поэтому убедитесь, что у вас есть возможность удалить этот параметр, если он не сработает.
  • На системах, которые не поддерживают эту функцию, принудительное включение ASPM может даже увеличить энергопотребление.
  • Это принудительно включает ASPM в ядре, в то время как в аппаратной части он может оставаться отключенным и не работать. Чтобы проверить, так ли это, выполните dmesg | grep ASPM от имени root. Если да, обратитесь к вики-статье, относящейся к вашему оборудованию.

Чтобы переключиться на powersave , выполните (следующая команда не будет работать, если ASPM не включен):

# echo powersave > /sys/module/pcie_aspm/parameters/policy

По умолчанию этот файл выглядит примерно так:

$ cat /sys/module/pcie_aspm/parameters/policy
[default] performance powersave powersupersave
PCI Runtime Power Management
/etc/udev/rules.d/pci_pm.rules
SUBSYSTEM=="pci", ATTR="auto"

Это правило выключает все неиспользуемые устройства, но некоторые из них не проснутся обратно. Чтобы разрешить Runtime Power Management только для устройств, о которых известно, что они работают нормально, используйте простое сопоставление с идентификаторами производителя и устройства (используйте lspci -nn для получения этих значений):

/etc/udev/rules.d/pci_pm.rules
# whitelist for pci autosuspend SUBSYSTEM=="pci", ATTR=="0x1234", ATTR=="0x1234", ATTR="auto"

Альтернативный вариант — заблокировать устройства, не работающие с PCI Runtime Power Management, и включить его для всех остальных устройств:

/etc/udev/rules.d/pci_pm.rules
# blacklist for pci runtime power management SUBSYSTEM=="pci", ATTR=="0x1234", ATTR=="0x1234", ATTR="on", GOTO="pci_pm_end" SUBSYSTEM=="pci", ATTR="auto" LABEL="pci_pm_end"
Автоматическая приостановка устройств USB

Ядро Linux может автоматически приостанавливать работу USB-устройств, когда они не используются (USB autosuspend). Иногда это позволяет сэкономить довольно много энергии, однако некоторые USB-устройства не совместимы с функцией энергосбережения и начинают вести себя неадекватно (частое явление среди USB-мышей/клавиатур). Правила udev, основанные на фильтрации по белым или чёрным спискам, могут помочь смягчить проблему.

Самый простой и, скорее всего, бесполезный пример — включение автоматической приостановки для всех USB-устройств:

/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR="auto"

Чтобы разрешить автоотключение только для устройств, о которых известно, что они работают нормально, используйте простое сопоставление с идентификаторами производителя и продукта (используйте lsusb для получения этих значений):

/etc/udev/rules.d/50-usb_power_save.rules
# whitelist for usb autosuspend ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR=="05c6", ATTR=="9205", ATTR="auto"

Альтернативный вариант — заблокировать устройства, не работающие с USB autosuspend, и включить его для всех остальных устройств:

/etc/udev/rules.d/50-usb_power_save.rules
# blacklist for usb autosuspend ACTION=="add", SUBSYSTEM=="usb", ATTR=="05c6", ATTR=="9205", GOTO="power_usb_rules_end" ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR="auto" LABEL="power_usb_rules_end"

Время задержки по умолчанию контролируется параметром autosuspend встроенного модуля ядра usbcore . Чтобы установить задержку на 5 секунд вместо стандартных 2 секунд, добавьте следующий параметр ядра в настройках вашего загрузчика:

usbcore.autosuspend=5

По аналогии с power/control , время задержки можно изменить для отдельного устройства с помощью атрибута power/autosuspend . Установка значения -1 полностью отключит автоматическую приостановку:

/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR=="05c6", ATTR=="9205", ATTR="-1"

Дополнительная информации об управлении питанием USB доступна в документации ядра.

SATA Active Link Power Management

Важно: SATA Active Link Power Management может привести к потере данных на некоторых устройствах. Не включайте это, если вы не создаёте резервные копии регулярно.

В Linux 4.15 появилась новая настройка med_power_with_dipm , которая соответствует поведению настроек драйвера Windows IRST и не должна приводить к потере данных на последних SSD или HDD. Экономия энергии может быть значительной — от 1,0 до 1,5 Вт (в режиме ожидания). Это станет настройкой по умолчанию для ноутбуков на базе Intel в Linux 4.16 [8].

Текущую настройку можно прочитать из /sys/class/scsi_host/host*/link_power_management_policy с помощью команды:

$ cat /sys/class/scsi_host/host*/link_power_management_policy
Доступные настройки ALPM

Настройка Описание Энергосбережение
max_performance текущее значение по умолчанию нет
medium_power ~1,0 Вт
med_power_with_dipm рекомендуемое значение ~1,5 Вт
min_power ВНИМАНИЕ: возможна потеря данных ~1,5 Вт
/etc/udev/rules.d/hd_power_save.rules
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR="med_power_with_dipm"

Примечание: Это увеличивает задержку при обращении к диску, который простаивал, поэтому это один из немногих параметров, которые стоит переключать в зависимости от того, подключено ли внешнее питание или нет.

Жёсткие диски

Возможные параметры для управления питанием диска описаны в разделе hdparm (Русский)#Настройка управления питанием.

Сберечь энергию не получится, если много программ часто записывают данные на диск. Отслеживание всех программ, а также того, как и когда они записывают данные на диск, является способом ограничения использования диска. Используйте iotop , чтобы увидеть, какие программы часто используют диск. Другие советы есть в разделе Увеличение производительности#Устройства хранения.

Также могут помочь такие мелочи, как установка опции noatime. Если доступно достаточно оперативной памяти, подумайте об отключении или ограничении swappiness, так как это может заметно уменьшить запись на диск.

Для дисков Seagate с технологией PowerChoice трюки с настройкой APM через hdparm не работают. Вместо этого установите пакет seagate-seachest AUR . Например, для полного отключения EPC на диске можно использовать следующее:

# SeaChest_PowerControl --scan # SeaChest_PowerControl -d /dev/sdX -i # SeaChest_PowerControl -d /dev/sdX --showEPCSettings # SeaChest_PowerControl -d /dev/sdX --EPCfeature disable # SeaChest_PowerControl -d /dev/sdX --showEPCSettings

Последняя команда выведет информацию:

========================================================================================== SeaChest_PowerControl - Seagate drive utilities - NVMe Enabled Copyright (c) 2014-2022 Seagate Technology LLC and/or its Affiliates, All Rights Reserved SeaChest_PowerControl Version: 3.1.10-3_2_1 X86_64 Build Date: Jul 26 2022 Today: Sat May 20 15:49:25 2023 User: root ========================================================================================== /dev/sdc - ST1000NM0008-2F2100 - ZFA19JG2 - SN02 - ATA . ===EPC Settings=== * = timer is enabled C column = Changeable S column = Savable All times are in 100 milliseconds Name Current Timer Default Timer Saved Timer Recovery Time C S Idle A 0 *10 *10 1 Y Y Idle B 0 *1200 *1200 3 Y Y Idle C 0 6000 6000 16 Y Y Standby Z 0 9000 9000 46 Y Y

Нули в первом столбце означают, что парковка и остановка вращения были отключены.

Инструменты и скрипты

Использование скрипта с правилом udev

Поскольку пользователи systemd могут переводить систему в ждущий или спящий режим через systemctl suspend или systemctl hibernate и обрабатывать события acpi с помощью /etc/systemd/logind.conf , может быть интересно удалить pm-utils и acpid. Есть только одна вещь, которую systemd не может сделать (по состоянию на systemd-204): управление питанием в зависимости от того, работает ли система от сети или от батареи. Чтобы заполнить этот пробел, вы можете создать правило udev, которое запускает скрипт при подключении и отключении внешнего питания:

/etc/udev/rules.d/powersave.rules
SUBSYSTEM=="power_supply", ATTR=="0", RUN+="/путь/к/вашему/скрипту true" SUBSYSTEM=="power_supply", ATTR=="1", RUN+="/путь/к/вашему/скрипту false"

Примечание: Вы можете использовать тот же скрипт, что и в pm-powersave. Вам просто нужно сделать его исполняемым и поместить в другое место (например, /usr/local/bin/ ).

Примеры powersave скриптов:

Приведённое выше правило udev должно работать как задумано, но если ваши настройки питания не обновляются после пробуждения системы, добавьте такой скрипт в /usr/lib/systemd/system-sleep/ :

/usr/lib/systemd/system-sleep/00powersave
#!/bin/sh case $1 in pre) /путь/к/вашему/скрипту false ;; post) if cat /sys/class/power_supply/AC0/online | grep 0 > /dev/null 2>&1 then /путь/к/вашему/скрипту true else /путь/к/вашему/скрипту false fi ;; esac exit 0

Не забудьте сделать его исполняемым.

Примечание: Название AC0 может быть другим на вашем ноутбуке, измените его по необходимости.

Вывод параметров питания

Этот скрипт выводит параметры питания и ряд других свойств для USB и PCI устройств. Обратите внимание, что для просмотра всех настроек необходимы права root.

#!/bin/bash for i in $(find /sys/devices -name "bMaxPower") do busdir=$ busnum=$(/dev/null) do v=$(cat $ff 2>/dev/null|tr -d "\n") [[ $ -gt 0 ]] && echo -e " $=$v"; v=; done | sort -g; done; printf "\n\n\n+++ %s\n" "Kernel Modules" for mod in $(lspci -k | sed -n '/in use:/s,^.*: ,,p' | sort -u) do echo "+ $mod"; systool -v -m $mod 2> /dev/null | sed -n "/Parameters:/,/^$/p"; done

Разрешить пользователям выключение системы

События нажатия кнопки питания и закрытия крышки ноутбука

События нажатия кнопок ждущего режима, выключения и режима гибернации, а также закрытия крышки ноутбука обрабатываются logind, как описано в разделе #События ACPI.

Используя systemd-logind

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

Чтобы убедиться, что ваш сеанс активен, наберите:

$ loginctl show-session $XDG_SESSION_ID --property=Active

Пользователь может использовать команды systemctl в командной строке, или добавить их в меню среды рабочего стола:

$ systemctl poweroff $ systemctl reboot

Другие команды, такие как systemctl suspend и systemctl hibernate также могут быть использованы. Смотрите раздел System Commands в справочном руководстве systemctl(1) .

Используя sudo

Установите sudo и добавьте текущего пользователя в список sudoers . После этого, текущий пользователь сможет вызывать команды sudo systemctl (например, sudo systemctl poweroff , sudo systemctl reboot , sudo systemctl suspend и sudo systemctl hibernate ) через sudo из командной строки. Смотрите раздел System Commands в справочном руководстве systemctl(1) .

Ограничение привилегий sudo

Если пользователю следует разрешить только, например, использовать команду выключения, добавьте следующее в конец файла /etc/sudoers , используя команду visudo :

имя_пользователя имя_хоста=NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot

Имя хоста вы можете не указывать (или указать localhost ). Теперь пользователь сможет выключить компьютер используя sudo systemctl poweroff или sudo systemctl halt , и перезагрузить его с помощью sudo systemctl reboot без ввода пароля. Удалите NOPASSWD: , если вы хотите, чтобы у пользователя запрашивался его пароль перед продолжением.

Смотрите также

  • ThinkWiki:How to reduce power consumption
  • How to get longer battery life on Linux

Retrieved from «https://wiki.archlinux.org/index.php?title=Power_management_(Русский)&oldid=788302»

HDD Seagate с проблемой — маленькая скорость записи, отключен Write Cache

А проблема заключается в маленькой скорости записи информации на диск. Как я это заметил? Да очень просто, переносил свои файлы со старого жесткого диска меньшего объёма и заметил, что процесс этот проходит очень медленно и в мониторе ресурсов новый диск загружен на 100% постоянно, хотя диск источник загружен всего на 10-20%. Обратил внимание на скорость копирования видео файлов — 17 МБайт/c. Замерял скорость чтения с этого диска — 135 МБайт/c.

В диспетчере устройств, в свойствах устройства ST1000LM048 нашел причину такой маленькой скорости: не включено кэширование записей. Обычно у всех жестких дисков в системе оно включено. Для того, чтобы просмотреть в каком состоянии находится кэширование, включить или выключить его, зайдите в диспетчер устройств Windows (Win + R и ввести devmgmt.msc), откройте «Дисковые устройства», нажмите правой кнопкой мыши по устройству HDD — «Свойства». Кэширование вы можете найти на вкладке «Политика». У меня кэширование записей было выключено (галочка не установлена). Я попытался включить его, но в ответ получил сообщение, что не удалось включить кэширование записей, так как устройство не поддерживает его. Странно, подумал я, ведь диск новый и довольно современный.

Запустил для проверки кэша программу Victoria. На вкладке «Standart» есть информация по кэшу диска. В моём случае было указано, что Wr=OFF и рядом в колонке «Comment:» вместо надписи Ok стоял красный восклицательный знак!

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

Ладно, тогда надо просто найти как включить кэш. Буду искать как включить. Первое, что приходит в голову, утилита hdparm под Linux, она может включать и отключать кэш у дисков и делать ещё много чего. Загрузил с USB первую попавшуюся Ubuntu я попытался включить кэш у данного диска. Утилита hdparm изначально присутствует в составе программ на диске или USB с Linux. Итак, ввёл команду в терминале (вызывается терминал по нажатию CTRL+ALT+T):

sudo hdparm -i /dev/sda Нажимаем Enter

Я начал с этой команды, чтобы убедиться, что я работаю именно с моим диском, у меня он действительно был первым (/dev/sda), а у вас он может быть и вторым (/dev/sdb) или третьим в системе. Изменяйте последнюю букву и находите свой диск. Затем просмотрим информацию о кэше:

sudo hdparm -W /dev/sda Нажимаем Enter

У меня кэш был disabled и я тут же решил его включить:

sudo hdparm -W1 /dev/sda Нажимаем Enter

Однако даже после выполнения этой команды кэш у моего диска так и остался disabled.

Стал искать другие варианты, как же можно включить write cache у диска Seagate. И ответ нашелся довольно быстро — включать и отключать кэш записей может также утилита SeaChest Configure из пакета SeaChest Utilities, скачать его можно с сайта Seagate по ссылке, объём файла 165 МБ.

В скачиваемом файле находятся утилиты SeaChest как для Linux, так и для Windows x32 и x64. Я использовал для Windows x64 так как у меня была установлена ОС Windows 7 x64. Распаковываем архив и переходим в папку с необходимыми файлами. Мне был нужен файл Windows \ Win64 \ SeaChest_Configure_1122_1183_64s.exe, именно его я и буду использовать.

Для начала вызываем справку и читаем:

SeaChest_Configure_1122_1183_64s.exe -h |more Нажимаем Enter и просматриваем до конца

Меня интересовали следующие параметры:

—writeCache [info | enable | disable]
Use this option to enable or disable write cache support on a
drive. Use the «info» argument to get the current status of
the write cache feature. This change is not preserved over
power cycles.

—sctWriteCache [info | enable | disable | default]
(SATA Only) (Seagate Only)
Use this option to enable or disable write cache support on a
drive using SMART command transport. When using this option,
the setting is non-volatile. Use this with the —volatile flag
to make the setting volatile. When using this option, the
—writeCache will always return success, but no write cache
changes will occur. This follows ATA spec. Using the «default»
argument returns the drive to default settings and allowing the
—writeCache option to work again. Use the «info» argument to
get the current status of the write cache feature. Note: On
some SAT HBAs/bridges, status will not be able to be determined
due to HBA/bridge limitations.

Формат запуска SeaChest_Configure_1122_1183_64s.exe для Linux с указанием диска выглядит так: -d /dev/sg5 для Windows так: -d PD3, где sg5 и PD3 — порядковый номер диска в системе. У меня был PD0. Просматриваю информацию по диску:

SeaChest_Configure_1122_1183_64s.exe -d PD0 -i Нажимаем Enter и получаем информацию

Просматриваю информацию по write cache:

SeaChest_Configure_1122_1183_64s.exe -d PD0 —writeCache info Нажимаем Enter и получаем информацию

У диска он действительно disabled. Включаем:

SeaChest_Configure_1122_1183_64s.exe -d PD0 —writeCache enable Нажимаем Enter

Ура! Написало enabled!. Проверяю скорость записи путём копирования файлов в Total Commander — скорость падает до 17 МБайт/c. Выходит, что эта опция только включает поддержку write cache но не сам механизм кэширования, тем более в описании указывается, что включение этой поддержки не сохранится после выключения питания у диска. Тогда пытаюсь использовать вторую команду:

SeaChest_Configure_1122_1183_64s.exe -d PD0 —sctWriteCache info Нажимаем Enter и получаем информацию

SeaChest_Configure_1122_1183_64s.exe -d PD0 —sctWriteCache enable Нажимаем Enter

Всё, написало enabled! Проверяем скорость. Скорость копирования на диск возросла в 4.5 раза — 86 МБайт/c!

В инструкции написано, что изначально эта команда сохраняет настройку и после выключения питания (non-volatile). Что нам и необходимо. Выключаем компьютер. Включаем его вновь и проверяем скорость копирования.

В результате получаем скорость записи на диск — 86 МБайт/c, скорость чтения — 135 МБайт/c.

SeaChest Utilities

SeaChest — это консольные утилиты для расширенной диагностики и управления жёсткими дисками и SSD производства Seagate, доступные для опытных пользователей.

SeaChestLite.zip

Дата: 30.06.2023
Размер: 14,6 Мегабайт (15 340 202 байт)
Папка: /soft/system/driver/hdd/SeaChest_Utilities/2023-03/

SeaChestUtilities.zip

Дата: 22.06.2023
Размер: 319,5 Мегабайт (334 977 774 байт)
Папка: /soft/system/driver/hdd/SeaChest_Utilities/2023-03/

Seachest utilities как пользоваться

ASEAN (English) Australia/New Zealand (English) India (English) Indonesia (Indonesian) Singapore (English) 대한민국 (한국어) 日本 (日本語) 台灣 (繁體中文) 中国 (简体中文)

België (Nederlands) Belgique (Français) Deutschland (Deutsch) España (Español) France (Français) Italia (Italiano) Nederland (Nederlands) Polska (Polski) Portugal (Português) United Kingdom (English)

Middle East/North Africa

Middle East/North Africa (English) Türkiye (Türkçe)

Brasil (Português) Latinoamérica (Español)

Canada (English) Canada (Français) United States (English)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *