Энергопотребление, эффективность и оптимизация дистрибутивов Linux.
-
Решил топик на форуме создать, так как тема сквозит в каментах по сайту, переполненная заблуждениями и домыслами.
Сначала немного теории.
Потребление памяти в состоянии покоя. Часто упоминаемый параметр, привязываемый к энергоэффективности. Почему нельзя полагаться на потребление памяти как метрики? Потому что оно показывает исключительно потребление этой самой памяти. С точки зрения энергоэффективности планка памяти потребляет одинаково независимо от "заполнения", она в любом случае хранит какое-то состояние ячеек, а наполненность - это логическое понятие на уровне ОС. Хотим сэкономить энергию на памяти - надо уменьшить ее "железный" объем. Далее, классический пример вилки оптимизации - это память-процессор. Значения можно вычислять каждый раз, тем самым экономя память, но нагружая процессор, можно один раз посчитать и сохранить, заняв память, но разгрузив процессор. Это прям база-база. Далее, в памяти кешируются какие-то данные с диска, из сети, и если они точно понадобятся, их кешируют еще на загрузке, чтоб, во-первых, они оказались быстрее доступны, когда понадобятся, во-вторых, не дергать лишний раз хранилища (на что тратиться больше энергии, чем на выемку из оперативки). Таким образом, если у нас со старта занято больше оперативки это означает лишь то, что в нее подняли больше данных, в том числе и разделяемых. Если один из дистрибутивов на старте ест меньше, это не гарантирует, что с запущенным приложением он будет есть меньше (может даже и больше, кстати).
Есть ли смысл смотреть на память? Ну, только если ее в принципе мало (на наше время меньше 2Гб). Гораздо эффективнее будет выработать стратегию использования техники - не запускать бездумно тяжелые по памяти приложения одновременно, не открывать десятки вкладок с фейсбуком в браузере и т.п.
У меня вот Linux Mint 19.3 Mate на десктопе и ноуте в примерно одинаковой конфигурации различаются на старте почти на 100 мб, 412 vs 501 - разное оборудование (на ноуте больше), разные драйвера и т.п.
Время загрузки. Формально пользователя интересует момент, когда он может начать что-то делать. Как правило, это момент доступности рабочего стола, но не всегда (Windows, например, продолжает активную подгрузку компонентов после этого момента, в это время безболезненно можно только мышкой повозить). В линуксах с systemd можно посмотреть внимательно и поизучать systemd-analyze, не стоит полагаться на финальное число, более полезно там посмотреть на graphical.target - это вот как раз рабочий стол:
Для более глубокого погружения в процесс загрузки стоит изучить ключи blame и plot - за ними кроется понимание того, почему systemd-analyze может показать большее время загрузки при субъективно более раннем отображении рабочего стола.~$systemd-analyze Startup finished in 4.008s (kernel) + 9.149s (userspace) = 13.158s graphical.target reached after 8.287s in userspace
Опять же, выбирать дистрибутив по времени загрузки не очень правильно, так как где-то нужные ресурсы могут быть загружены на старте системы, где-то при первом обращении (что снизит отзывчивость в тот момент), очень большое влияние будет от набора стартующих служб и программ, что легко поправить по мере необходимости. В общем, я бы сказал, что если система грузится за приемлемое время, то плюс-минус пара секунд уже не важна - у меня от раза к разу разброс секунды в 4.
Потербление энергии. Правильнее всего было бы мультиметром замерить, посчитать интегральное потребление, причем воссоздать одинаковую нагрузку (что почти невозможно). Но из доступных средств измерения есть только утилита powertop. Можно замерить потребление покоя, с демонстрацией рабочего стола и окна терминала с утилитой, но кому реально нужен ноутбук со включенным экраном просто так? Поэтому его надо чем-то нагрузить. Я на своем проигрывал видео с ютуба в 480p, нагрузка так себе для него, но это и процессор, и сеть, и видеокарта, и звук. Потребление увеличилось почти в два раза от состояния покоя. Полагаю, если загрузить его сильнее (хотя бы и 4k60fps видео), доля потребления ядром, оболочкой и базовым набором служб просто окажется незначительной. Т.е. в состоянии покоя мы видим базовое потребление оборудованием + потребление на нужды ОС, и легко можем кратно увеличить его, запустив какую-то реальную задачу. Предлагаю методику замера:
1. Загружаемся
2. Выключаем скринсейвер (место ему на ЭЛТ мониторах - там дорого гасить лампу и надо просто снимать нагрузку с люминофора, ЖК он не нужен совсем - ЖК нужно именно выключать), я удалил его из автозагрузки.
3. Выключаем DPMS:
4. Открываем терминал, запускаем powertop$xset dpms 0 0 0 $xset -dpms
5. Созерцаем. Через некоторое время циферки устаканятся и будут мало меняться. У меня показывали 4.9 - 5.2wt в зависимости от стартующих фоновых задач.
А теперь перезагружаемся и аналогично смотрим с задачей:
Пункты 1-4 повторяем
5. Запускаем браузер, открываем видео (), в настрйоках включаем 480p и убираем аннотации, разворачиваем в полный экран
6. Через некоторое время alt-tab'им в терминал и созерцаем.
У меня было 9.3 - 9.9 wt.
Если вдруг захочу поколупаться с разными дистрибутивами, посмотрю по этой методике. Очевидно, на разном оборудовании числа будут разными. -
1. Потребление оперативки. В принципе да. Во-первых, корреляции использование памяти / разрядка аккумулятора не обнаружена. От слова "совсем". Во-вторых, крохотные дистрибутивчики, такие как SliTaz и/или семейство Папирусов (PuppyRus) полностью грузятся (Папирусы по настройке в процессе загрузки) в оперативку. Сомнительно, что это негативно влияет на энергоэффективность. Скорее наоборот...
2. Время загрузки. Ну, у меня пока лютое - 1 мин. Но не сомневаюсь, что в арчиковой вики есть наверняка способы преодоления такого беспредела. Короче, проблема обозначена четко, бум читать вики...
3. Теперь краш-тест.
3.1. Простой. Энергопотребление 6,5 - 7,0 вт (Среднее значение 6,75). Время теста 1 час. Расход заряда батареи: 97 - 71 = 26%.
3.2. Воспроизведение видео онлайн, ютуб, 480. Энергопотребление 8,8 - 9,2 вт (Среднее значение 9,0). Время теста 1 час. Расход заряда батареи: 63 - 30 = 33%.
4. Что показалось любопытным по п. 3.
4.1. Потребление энергии и разряд батареи оказались практически линейными. Т.е. отношение средних энергозатрат 9 / 6,75 = 1,33 оказалось весьма близко к отношению разряда батареи 33 / 26 = 1,27. Практически в пределах погрешностей.
4.2. При воспроизведении видео онлайн показалось любопытным значения самых прожорливых процессов.
- На первом месте, как ни странно - вайфай - 3,4 вт. При том что столбик загрузки процессора целый час был рядом с верхней планкой - 85...100%, а температура стабилизировалась на отметке 70.
- На втором месте - пульса. Ну и ну, кто б мог подумать... 1,3 вт.
- И только на третьем месте дисплей - 1,2 вт.
Короче, оптимизировать и по энергопотреблению, и по скорости загрузки, конечно же, буду, а вот касательно интернета - задумался над тем, чтобы поставить параллельно Фалькону еще и Линкс2. Не потому, что легкий и мало потребляет - Фалькон в этом отношении тоже молодец, не сравнить с Годзиллами-Мазилами. А чисто для разгрузки вайфая путем уменьшения трафика в связи с низким функционалом Линкса2. Тока текст и графика, вайфай качает меньше, кушает тоже меньше. Впрочем, это предположение тоже нуждается в практической проверке. Кста, еще надо поставить прогу для снятия скриншотов - тоже нету. -
4.1 там вообще один показатель с контроллера батареи, а ватты и проценты по формулам из него, потому и не расходятся
-
inxi -B
-
Итак, сутки ждущего режима миновали, можно подводить кое-какие итоги. Итак, потребление заряда в ждущем режиме. на мой субъективный взгляд, конское. Схарчилось аж 30%, с 40 до 10. Ндааа... Ладно, прикинем мощность, потребляемую оперативкой, исходя из предположений, что , во-первых, в ждущем режиме бодрствует исключительно оперативка, во-вторых, что соотношение расход/потребление линейное.
Итак, в простое за час съелось 26% заряда при средней мощности 6,75 вт. Т.е., за 24 часа съелось бы 26х24=624%. Знаю,знаю, физически нелепое значение, но нам надо чисто для составления пропорции, посему криминала не вижу. Тогда пропорция примет следующий вид (пропорцию составляем на основании допущения о линейности расхода и мощности):
624/6,75 = 30/х
где: х - искомая мощность, потребляемая (оперативкой) буком в ждущем режиме. Откуда:
х = 30 х 6,75 / 624 = 0,32 вт.
Что ж, очень похоже на правду. Что можно сказать? Аккумулятор в 26 ватт-часов выдает вполне приемлемый для себя срок работы бука - около 4 часов. Тогда как в хар-ках современного Леново при емкости 52 дают 8 часов работы. Все верно, хотя немного грустно.