Економія заряду акумулятора у FreeBSD, або як прожити до 10 годин без підзарядки, Записки

Економія заряду акумулятора у FreeBSD або як прожити до 10 годин без підзарядки

Сьогодні я хотів би розповісти про деякі аспекти використання FreeBSD на ноутбуці. А точніше, аспектах, що стосуються енергоспоживання. Я не стану наводити загальні рекомендації, типу «по можливості використовуйте легковажні консольні програми (Irssi, Mutt) замість важких GUI-аналогів», або «відключайте всі пристрої, що не використовуються в BIOS» у припущенні, що вони і так всім відомі, ну або , У крайньому випадку, легко гуглиться. Іншими словами, далі йтиметься лише про специфічні для FreeBSD моменти.

Отже, перша проблема, що постає перед нами, — як, власне, отримати інформацію про акумулятор? У FreeBSD це можна зробити за допомогою утиліти acpiconf:

Тут 0 і 1 є номерами акумуляторів. На моєму ноутбуці Fujitsu Lifebook E733 їх два, у вас їх може бути більше чи менше.

Зверніть увагу на рядок Last full capacity. За понад два роки служби акумулятор втратив майже половину своєї ємності! Зрозуміло, що це значно впливає на час роботи ноутбука без підзарядки. Згодом я замінив цей акумулятор на новий. Інші рядки не менш важливі, особливо Remaining time. Її, зокрема, я використовую в скрипті, який повідомляє мене про рівень заряду акумулятора нижче за заданий поріг.

Тепер, коли ми можемо оцінити час життя акумулятора, виникає питання, як його продовжити? Для цього FreeBSD надає багато ручок.

Наприклад, сучасні CPU дозволяють регулювати частоту, з якою вони працюють. Переглянути список доступних частот можна так:

Тут dev.cpu.0.freq_levels - це частоти, що підтримуються процесором івідповідне енергоспоживання (не впевнений, у яких саме одиницях), а dev.cpu.0.freq – поточна частота процесора. При цьому частота 2201 особлива, вона означає такі ж 2.2 GHz як і у випадку з 2200 тільки з включеним Turbo Boost.

Змінити поточну частоту можна наступною командою:

Існує демон powerd, який автоматично змінює частоту процесора в залежності від поточного навантаження. Але я особисто волію регулювати частоту вручну. Подробиці про powerd ви знайдете у відповідному мані.

До речі, якщо вже мова зайшла про процесор, FreeBSD дозволяє легко дізнатися і його поточну температуру:

Як бачите, температура вимірюється окремо по кожному ядру, з урахуванням віртуальних ядер, які існують завдяки Hyper-Threading.

Ще більш детальну інформацію про процесор можна отримати за допомогою пакету intel-pcm:

Тут цифра 1 — це раз на скільки секунд слід оновлювати інформацію, що виводиться. Висновок утиліти pcm.x дуже гарний, але, на жаль, занадто розгонистий, щоб я міг його тут привести. Можете вважати ознайомлення з нею своїм домашнім завданням.

Ще з корисних пакетів слід відзначити intel-backlight:

Як ви, звичайно, здогадалися, він регулює яскравість екрану. Зверніть увагу, що використання переважно консольних додатків, темних тем для всіх інших додатків, а також плагіна для браузера на кшталт 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.

А як ви тюніте свою систему для економії заряду акумулятора?