Экономия заряда аккумулятора во FreeBSD, или как прожить до 10 часов без подзарядки
10 октября 2016
Сегодня я хотел бы рассказать о некоторых аспектах использования FreeBSD на ноутбуке. А точнее говоря, аспектах, касающихся энергопотребления. Я не стану приводить общие рекомендации, типа «по возможности используйте легковесные консольные приложения (Irssi, Mutt) вместо тяжелых GUI-аналогов», или «отключайте все неиспользуемые вами устройства прямо в BIOS» в предположении, что они и так всем известны, ну или, в крайнем случае, легко гуглятся. Другими словами, далее речь пойдет только о специфичных для FreeBSD моментах.
Итак, первая встающая перед нами проблема — как, собственно, получить информацию об аккумуляторе? Во FreeBSD это можно сделать при помощи утилиты acpiconf:
acpiconf -i 1
Здесь 0 и 1 представляют собой номера аккумуляторов. На моем ноутбуке Fujitsu Lifebook E733 их два, у вас их может быть больше или меньше.
Пример вывода:
Last full capacity: 3896 mAh
Technology: secondary (rechargeable)
Design voltage: 10800 mV
Capacity (warn): 830 mAh
Capacity (low): 361 mAh
Low/warn granularity: 1 mAh
Warn/full granularity: 1 mAh
Model number: CP645579-01
Serial number: 01A-Z130809006201Z
Type: LION
OEM info: Fujitsu
State: discharging
Remaining capacity: 88%
Remaining time: 4:14
Present rate: 818 mA (9912 mW)
Present voltage: 12118 mV
Обратите внимание на строчку Last full capacity. За более чем два года службы аккумулятор потерял почти половину своей емкости! Понятно, что это существенно влияет на время работы ноутбука без подзарядки. Впоследствии я заменил этот аккумулятор на новый. Прочие строчки не менее важны, особенно Remaining time. Ее, в частности, я использую в скрипте, который уведомляет меня об уровне заряда аккумулятора ниже заданного порога.
Теперь, когда мы можем как-то оценить время жизни аккумулятора, возникает вопрос, как его продлить? Для этого FreeBSD предоставляет множество ручек.
Например, современные CPU позволяют регулировать частоту, с которой они работают. Посмотреть список доступных частот можно следующим образом:
Пример вывода:
1900/29079 1800/27071 1700/25435 1600/23510 1500/21943 1400/20089
1300/18589 1200/16810
dev.cpu.0.freq: 2200
Здесь dev.cpu.0.freq_levels — это поддерживаемые процессором частоты и соответствующее энергопотребление (не уверен, в каких именно единицах), а dev.cpu.0.freq — текущая частота процессора. При этом частота 2201 особенная, она означает такие же 2.2 GHz как и в случае с 2200, только с включенным Turbo Boost.
Изменить текущую частоту можно следующей командой:
Существует демон powerd, который автоматически меняет частоту процессора в зависимости от текущей нагрузки. Но я лично предпочитаю регулировать частоту вручную. Подробности о powerd вы найдете в соответствующем мане.
Кстати, раз уж речь зашла о процессоре, FreeBSD позволяет с легкостью узнать и его текущую температуру:
sysctl -a | grep temper
Пример вывода:
dev.cpu.6.temperature: 51.0C
dev.cpu.5.temperature: 51.0C
dev.cpu.4.temperature: 51.0C
dev.cpu.3.temperature: 51.0C
dev.cpu.2.temperature: 51.0C
dev.cpu.1.temperature: 49.0C
dev.cpu.0.temperature: 49.0C
Как видите, температура измеряется отдельно по каждому ядру, с учетом виртуальных ядер, существующих благодаря Hyper-Threading.
Еще более подробную информацию о процессоре можно получить при помощи пакета intel-pcm:
sudo kldload cpuctl
sudo pcm.x 1
Здесь цифра 1 — это раз в сколько секунд следует обновлять выводимую информацию. Вывод утилиты pcm.x очень красивый, но, к сожалению, слишком размашистый, чтобы я мог его здесь привести. Можете считать ознакомление с ней своим домашним заданием.
Еще из полезных пакетов следует отметить intel-backlight:
sudo intel_backlight 50
Как вы, конечно же, догадались, он регулирует яркость экрана. Обратите внимание, что использование преимущественно консольных приложений, темных тем для всех остальных приложений, а также плагина для браузера вроде Dark Reader, позволяет комфортно работать за компьютером при существенно меньшей яркости экрана!
Что еще можно перевести в режим энергосбережения, это Wi-Fi адаптер:
Переход обратно в нормальный режим:
К сожалению, большинство беспроводных сетевых карт, с которыми я имел дело, ведут себя из рук вон плохо в режиме энергосбережения как во FreeBSD, так и в Linux. Спустя какое-то время начинает теряться страшный процент пакетов, в результате чего пользоваться сетью становится невозможно. Поэтому я лично этим приемом не пользуюсь, но, быть может, для вас он будет работать лучше.
Также FreeBSD предоставляет весьма интересные средства управления USB-устройствами.
Посмотреть список всех USB устройств:
Перевести устройство ugen1.7 в режим энергосбережения:
Вывести устройство из режима энергосбережения:
Вообще отключить устройство:
Этим приемом я какое-то время пользовался, но потом обнаружил, что мне проще отключить неиспользуемые устройства через BIOS.
Наконец, рассмотрим последний на сегодня прием — уменьшение количества тиков системных часов в секунду. По умолчанию во FreeBSD оно равно 1000, а значит каждую миллисекунду в ядре срабатывает обработчик прерываний, который выполняет какую-то полезную или не очень работу. На практике это значение можно безопасно уменьшить до 100.
Для этого в /boot/loader.conf пишем:
… и перезагружаем систему. К сожалению, у меня нет достоверных сведений о том, насколько реально это увеличивает время работы ноутбука без подзарядки (или снижает температуру процессора). Вполне может оказаться, что ни на сколько.
С учетом всего вышесказанного, мой ноутбук без проблем работает 8 часов без подзарядки в режиме «браузер, Wi-Fi (напомню, без powersave), притушенный экран», и еще аж целых 2 часа остается согласно acpiconf. Последний, кстати, предсказывает время работы весьма точно, если только резко не менять характер нагрузки. И это мы еще не тюнили-пересобирали ядро, не собирали весь софт из портов, соптимизировав его под наш конкретный CPU, и не угорали по прочему хардкору. В целом, по опыту использования Ubuntu на этом же ноутбуке, могу сделать осторожный такой вывод, что заряд аккумулятора FreeBSD использует как минимум так же экономно, как и Linux.
Метки: FreeBSD.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.