Зачем я написал ещё одну утилиту мониторинга CPU для Мака

от автора

Привет, чат. Хочу во-первых рассказать вам историю разочарования в довольно известной утилите для мониторинга потребления энергии и загрузки CPU в macOS — MX Power Gadget. А во-вторых, поделиться очень простой заменой, которую я собрал за пару вечеров — pgauge.

Я часто что-то тестирую и такие метрики как потребление электричества, частота и загрузка CPU нередко бывают полезными при бенчмарках. Кроме того, я ненавижу когда фоновая задача или что-то еще неожиданно начинает греть ноутбук и разряжать батарею. У меня даже был случай, когда я купил переходник USB-C и оказалось, что пока он вставлен, процессор потребляет лишние два ватта! Я думаю, что для многих моя дотошность в этом вопросе может даже показаться фанатичной. Можно считать это моим проявлением ОКР.

В то же время, я не хочу использовать для этих целей командный центр — мне часто нужны вполне конкретные простые метрики. Раньше, когда трава была зеленая, а процессоры в макбуках синие, я использовал Intel Power Gadget. И когда Apple перешла на архитектуру ARM, я грустил, но недолго, потому что быстро нашлась замена — MX Power Gadget.

MX Power Gadget

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 и рассказывайте о любых проблемах с выводом значений на вашем процессоре, что смогу — исправлю.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Пользовались MX Power Gadget?

10.53% Да, больше не буду2
63.16% Нет12
26.32% Нет, но теперь буду5

Проголосовали 19 пользователей. Воздержались 5 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/858736/


Комментарии

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

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