Привет, чат. Хочу во-первых рассказать вам историю разочарования в довольно известной утилите для мониторинга потребления энергии и загрузки CPU в macOS — MX Power Gadget. А во-вторых, поделиться очень простой заменой, которую я собрал за пару вечеров — pgauge.
Я часто что-то тестирую и такие метрики как потребление электричества, частота и загрузка CPU нередко бывают полезными при бенчмарках. Кроме того, я ненавижу когда фоновая задача или что-то еще неожиданно начинает греть ноутбук и разряжать батарею. У меня даже был случай, когда я купил переходник USB-C и оказалось, что пока он вставлен, процессор потребляет лишние два ватта! Я думаю, что для многих моя дотошность в этом вопросе может даже показаться фанатичной. Можно считать это моим проявлением ОКР.
В то же время, я не хочу использовать для этих целей командный центр — мне часто нужны вполне конкретные простые метрики. Раньше, когда трава была зеленая, а процессоры в макбуках синие, я использовал Intel Power Gadget. И когда Apple перешла на архитектуру ARM, я грустил, но недолго, потому что быстро нашлась замена — MX Power Gadget.
Она показывает отдельно потребление электричества CPU, GPU и вместе. Частоту и утилизацию отдельно по разным типам ядер. Ну и температуру до кучи. Ещё и графики какие красивые строит, лепота! Но не спешите очаровываться, сейчас я расскажу вам, почему это всё чушь )
Обратите внимание на то, что в простое (а я специально сделал скриншот, когда компьютер был в простое) потребление CPU — 5–10 милливатт (если закрыть все приложения, может быть вообще 1). И это с учетом того, что сама утилита тоже работает и рисует графики. Ну потрясающе же, показывает точные значения и ещё и сама практически ничего не потребляет!
В общем, пользовался я этой утилитой часто и подолгу держал открытой во время работы (так как она показывает графики только с момента запуска), в том числе при работе от батареи.
А ещё есть встроенная в macOS консольная утилита powermetrics
, с которой собственно MX Power Gadget и собирает почти все данные. Её особенность в том, что она выводит излишне много информации, просто срёт в консоль разнообразными подробностями, поэтому использовать её в сыром виде очень проблематично. Вот я и не использовал. Но так случилось, что однажды я зачем-то (уже даже не вспомню зачем) запустил в консоли powermetrics
, когда у меня был запущен MX Power Gadget и я увидел странное.
Странность была в том, что MX Power Gadget, как обычно, показывал околонулевое потребление электричества, а вот powermetrics
почему-то показывал около двух ватт.
При этом, если закрыть MX Power Gadget, то показания powermetrics
тоже становились околонулевыми. А если открыть, то снова около двух. Сперва я подумал что это какой-то баг. Две утилиты мониторинга запущены одновременно, мало ли, какие сайд-эффекты это может дать. Но сомнения закрались, я решил попробовать разобраться.
На всякий случай я открыл Activity Monitor, он не показывал никаких процессов, потребляющих CPU, кроме фоновой мелочи. Но я ввел в поиск powermetrics
, и снова увидел странное.
Activity Monitor показывал два процесса powermetrics
, но оба почему-то без потребления CPU. Не с нулевым потреблением, а без потребления вообще. Понаблюдав, я заметил, что у них постоянно накручивался PID. Ага. Получается, MX Power Gadget не просто однажды запускал powermetrics
, который через заданный интервал сбрасывает метрики в stdout, а запускает его на каждое измерение (раз в секунду)! Тут мои подозрения превратились в стойкое ощущение, что с MX Power Gadget правда что-то не так. Осталось только выяснить, насколько это затратно.
Выяснить это конечно очень просто. Нужно всего лишь запустить powermetrics
и замерить, сколько он жрет CPU сам по себе. И вот результаты для двух секунд и для около тридцати секунд:
$ /usr/bin/time sudo powermetrics -i 1000 --samplers cpu_power .... Combined Power (CPU + GPU + ANE): 97 mW ^C 1.81 real 0.14 user 0.39 sys $ /usr/bin/time sudo powermetrics -i 1000 --samplers cpu_power .... Combined Power (CPU + GPU + ANE): 70 mW ^C 25.17 real 0.17 user 0.63 sys
То есть, когда powermetrics
стартует, он жрет прилично так времени CPU (≈500 ms), а потом выдает результаты уже почти ничего не тратя. При этом, показатели начинают сниматься уже после этой долгой инициализации и не попадают в статистику. Лол.
А теперь взгляните на самый первый скриншот. Вас тоже смущают около 9% утилизации P-ядер при нулевом потреблении электричества? :~) И странное совпадение: 9% × 6 (количество ядер) ≈ 50%, то есть ≈500 ms работы одного ядра.
Около двух ватт — много это или мало? Батарея моего макбука сейчас 60 ватт-часов. Допустим, что в среднем мне хватает одного заряда часов на 7. Значит, среднее потребление всего макбука вместе с экраном — 8,6 ватт. Если бы я не пользовался MX Power Gadget, то одного заряда мне бы хватало на 9 часов :~)
А что делать?
Пришлось отказаться от MX Power Gadget, брать всё в свои руки и снимать показания с powermetric
самостоятельно. В первом приближении неплохо работает просто grep
.
$ sudo powermetrics -i 1000 --samplers cpu_power | grep "Combined Power" Combined Power (CPU + GPU + ANE): 114 mW Combined Power (CPU + GPU + ANE): 81 mW Combined Power (CPU + GPU + ANE): 81 mW ^C
Но конечно хотелось чего-то более функционального. Так что я написал скрипт, которым с вами и хочу поделиться: pgauge.
Устанавливается через pip, запускается как отдельной командой, так и как модуль питона python -m pgauge
. Показывает все то же самое, что MX Power Gadget, но без температуры и красивых графиков, только экстремальные значения за последнюю минуту. Просто и со вкусом. Естественно, сам по себе почти ничего не потребляет.
К сожалению требует пароля администратора, но можно добавить правило в sudoers для запуска powermetrics
, чтобы не вводить его каждый раз.
echo `whoami` "ALL=(ALL) NOPASSWD: /usr/bin/powermetrics *" | sudo tee /etc/sudoers.d/powermetrics
На этом всё. Пишите пожелания и замечания по pgauge
и рассказывайте о любых проблемах с выводом значений на вашем процессоре, что смогу — исправлю.
ссылка на оригинал статьи https://habr.com/ru/articles/858736/
Добавить комментарий