Оценка энергопотребления в процессе на ПК (x86)

Я пытаюсь придумать эвристику, чтобы оценить, сколько энергии (скажем, в Джоулях) процесс или поток израсходовал между двумя точками времени. Это на ПК (Linux / x86), а не на мобильном устройстве, поэтому статистика будет использоваться для сравнения относительной энергоэффективности вычислений, которые занимают аналогичное время настенных часов.

Идея состоит в том, чтобы собрать или отобрать статистику оборудования, такую ​​как счетчик циклов, состояния p / c или динамическую частоту, доступ к шине и т. Д., И придумать разумную формулу для использования энергии между измерениями. Я спрашиваю, возможно ли это и как может выглядеть эта формула.

Некоторые проблемы, которые приходят в голову: 1) Правильный учет переключения контекста на другие процессы (или потоки).

2) Правильный учет энергии, используемой вне процессора. Если предположить, что ввод / вывод незначителен, это означает в основном ОЗУ. Как объем распределения и / или модель доступа влияют на потребление энергии? (То есть, если предположить, что у меня есть способ для начала измерить распределение динамической памяти, например, с помощью модифицированного распределителя.)

3) Использование времени ЦП в качестве оценки ограничивается грубым и часто ошибочным учетом, использованием энергии ЦП только и предполагает фиксированные тактовые частоты. Он включает, но не учитывает время ожидания в ОЗУ.


person Eitan    schedule 19.12.2010    source источник
comment
Как насчет графического процессора, диска (контроллер IOH, поиск головы (но только при использовании вращающегося диска)), генерации звука (усиление), сети (использование беспроводного радио). Не забывайте о влиянии увеличения скорости процессора / графического процессора при работе от батареи по сравнению с сетью.   -  person Michael Petrotta    schedule 20.12.2010
comment
Да, это все дополнительные проблемы. Но пока я бы предпочел сосредоточиться на вычислительных процессах, то есть только на CPU / BUS / памяти. Достаточно сложно :)   -  person Eitan    schedule 20.12.2010
comment
Я тоже над этим работаю. Мое первое предположение состоит в том, чтобы основывать свои измерения на C-состояниях и частотах (для ЦП, поддерживающих это). Затем, добавление кеш-пропусков событий, может быть, прерываний ... Мои вопросы: 1. эти меры могут быть актуальны? 2. как связать эти события с некоторыми оценками мощности?   -  person Jérôme    schedule 06.04.2011
comment
Я одобряю ваши усилия, но мне интересно, насколько точными вы хотите быть и для чего? Базовое потребление ЦП на современном ПК широко варьируется в зависимости от ЦП. USB, WIFI, каждый жесткий диск - все это значительно увеличивает общее потребление, а графический процессор заставляет их посрамить все это потребление. Даже если вы все это посчитали - БП оказывает ОГРОМНОЕ влияние на энергопотребление. Хороший высокопроизводительный блок питания имеет гораздо меньшие потери, чем дешевый блок питания, который находится на грани того, что он может обеспечить ... Возвращаясь к точности - если вам нужно что-то реально точное, тогда очень простое грубое измерение (подробнее в следующем комментарии)   -  person NightDweller    schedule 12.04.2011
comment
общее использование процессора - это все, что вам нужно - просто из-за множества трудноизвестных переменных, которые имеют гораздо большее влияние (например, тип блока питания). I5 в режиме ожидания потребляет около 62 Вт, при полной нагрузке - около 96,7 Вт, если предположить, что линейность соответствует 0,34 Вт на каждый процентный пункт. Вы теряете больше, чем на разнице в рабочей температуре процессора (более высокая температура увеличивает энергопотребление). Если допустимая погрешность в 1 ватт, то вы определенно можете обойтись только общим использованием процессора. и между прочим: просто получить измерения - огромная задача   -  person NightDweller    schedule 12.04.2011
comment
Само выделение памяти незначительно. Доступа к памяти нет, но большая часть этого будет кэшироваться, поэтому вы можете подсчитывать промахи кеша (если есть отслеживающий регистр). Кэш также потребляет изрядное количество энергии, поэтому, возможно, вы захотите посмотреть подсказки кеша. Другая проблема заключается в том, что трудно разделить различные исполнительные блоки (ALU, FP, MMX / SSE и т. Д., Которые могут быть отключены, если они не использовались какое-то время), и большая часть обработки чисел теперь использует графический процессор. ..   -  person tc.    schedule 12.04.2011
comment
@NightDweller: цель - машина HPC: поэтому мне не нужно беспокоиться об устройствах, экране ... Графический процессор (для вычислений) может быть интересным, но сейчас я хотел бы сосредоточиться на процессоре. Когда вы говорите о потреблении i5, откуда вы взяли эти цифры? Это TDP? Интересно, насколько надежным может быть это значение. Что касается вашего предположения, что общее использование процессора - это все, что вам нужно, я удивлен, что промахи кеша не могут рассматриваться как важная оценка мощности, но недавняя литература идет в вашем направлении.   -  person Jérôme    schedule 12.04.2011
comment
@tc: Я смотрю на доступ к памяти, но, как я сказал в своем предыдущем комментарии, похоже, что использование ЦП может быть основным показателем энергопотребления. Что касается различных исполнительных устройств, я думаю, что это слишком сложно с современной архитектурой, чтобы принимать во внимание, по сравнению с достигнутой точностью.   -  person Jérôme    schedule 12.04.2011
comment
@ Jérôme - мои числа основаны на тестах из Anandtech у них есть хороший уровень детализации своей методологии и других параметров системы. У них также есть хорошая система диаграмм, которая позволяет вам просматривать эти результаты для большой группы процессоров. Если вы смотрите на HPC - я помню, что видел некоторые интересные цифры (мощность обработки на ватт) для Arm и других встраиваемых процессоров (на данный момент не могу найти ссылку). но тип вычислений очень важен (подробнее)   -  person NightDweller    schedule 12.04.2011
comment
Некоторые алгоритмы намного эффективнее на векторном процессоре (некоторые задачи взлома кода были очень эффективно продемонстрированы на графическом процессоре), некоторые лучше на стандартном ПК с хорошим процессором с плавающей запятой, а некоторые очень хорошо работают на встроенном процессоре ... .   -  person NightDweller    schedule 12.04.2011
comment
То, что задает вопрос, в принципе невозможно. Если у вас нет только одной задачи / процесса / потока в системе, вы не сможете подвести итоги и учесть, откуда взялась вся энергия. Слишком много ресурсов используется совместно, слишком много политик зависит от общей активности, и слишком много устройств имеют высокий / низкий уровень энергопотребления из-за фоновых задач. Я написал ответ о том, как можно измерить показатели мощности и провести «пальцем в воздухе» расчет активности ЦП, но во многих случаях это будет совершенно неточно. Однако он имеет ограниченное применение, так что попробовать стоит!   -  person John Ripley    schedule 12.04.2011
comment
Я должен добавить - в жестко контролируемой встроенной системе (например, в телефоне или mp3-плеере) вы можете добиться определенного успеха в этом, потому что вы можете учитывать, кто держит устройства в рабочем состоянии. / down, и трюки для измерения доступа к шине и т. д. Это все еще дико неточно, но если некоторые процессы на порядок выше в некоторых статистических данных, это полезно. На ПК просто нет такого уровня контроля или сбора статистики.   -  person John Ripley    schedule 12.04.2011
comment
@ Jérôme - Есть обзор системы на anandtech, думаю, вам будет интересно. Они показывают систему (ПК на базе Core i5 2500k), которая потребляет всего 31 Вт в режиме ожидания и всего 92 Вт под нагрузкой (!). Это общее энергопотребление. Думаю, это хорошая демонстрация того, как тщательный выбор компонентов и конструкция системы могут существенно повлиять на энергопотребление.   -  person NightDweller    schedule 14.04.2011


Ответы (5)


Возможно, вы сможете получить данные о потребляемой мощности вашего процесса, но они будут правильными только в отдельности. Например, если вы запускаете два процесса параллельно, вы вряд ли сможете построить прямую линию с хорошей точностью.

Это достаточно сложно сделать на встроенных платформах с полным отключением каждой шины напряжения, не говоря уже о ПК, где единственной точкой данных является мощность от розетки. Что вам нужно измерить и иметь в виду:

  • Базовая нагрузка не такая уж и базовая. Система, простаивающая в течение многих секунд, будет находиться в более глубоком спящем состоянии, чем состояние, в котором нет. Вы измеряете «глубокий» сон или просто отдыхаете? Как узнать, что вы измеряете?
  • Нагрузка не всегда линейна. Переменное напряжение: некоторые компоненты сдвигают напряжение вверх / вниз в зависимости от нагрузки и частоты. Температура: в наши дни может меняться в любую сторону (не только из-за перегрева).
  • Источники питания не имеют одинаковой эффективности при всех нагрузках. Помните об этом, если вы измеряете мощность на розетке. Например, он может иметь эффективность на 50% при мощности ниже 100 Вт, на 90% при мощности от 100 до 300 Вт и ниже до 80% при мощности 300 Вт +.
  • Дополнительные процессы не обязательно будут добавляться линейно. Например, как только DDR выходит из строя, его базовая нагрузка увеличивается, но дополнительные процессы не усугубят ситуацию. Это еще более непредсказуемо с несколькими ядрами и переменными частотами.

Основной способ измерить это очевидный способ: записать количество ватт в режиме ожидания, рекордное количество используемых ватт, вычесть. Вы можете попробовать работать с рабочим циклом 50%, 25%, 75% и так далее, чтобы нарисовать красивый график (линейный или другой). Это покажет любую нелинейность. К сожалению, преобладающей причиной будет эффективность преобразования в зависимости от нагрузки как для регулятора ЦП, так и для блока питания. Вы мало что можете сделать, чтобы устранить это, не имея разрабатываемой версии материнской платы, с которой вы играете (маловероятно), или если вам посчастливилось иметь блок питания с графиком эффективности по сравнению с нагрузкой.

Однако важно понимать, что эти точки данных верны только изолированно. Вы можете неплохо смоделировать, как эти вещи будут суммироваться в системе, но имейте в виду, что это в лучшем случае лишь хорошее приближение. Думайте об этом как о том, как посмотреть на некоторый код C для аудиокодека и оценить, насколько быстро он будет работать. Вы можете получить хорошее общее представление, но ожидайте совершенно неточного измерения в реальности.

Изменить. Небольшое расширение, поскольку приведенное выше не дает ответа на вопрос, как вы могли бы это сделать.

Измерение энергопотребления: приобретите точный измеритель мощности. Как я уже упоминал, если у вас нет способа отключить отдельные шины напряжения и измерить ток, единственное измерение, которое вы можете провести, - это на розетке. В качестве альтернативы, если у вас есть доступ к состоянию мониторинга работоспособности на материнской плате и есть текущие отчеты (в усилителях) (редко), это может дать вам хорошую точность и быстрое время отклика.

Итак, измерьте базовую мощность - выберите любую ситуацию, которую вы считаете «базовой». Запустите свой тест и измерьте «пик». Вычтите, готово. Да, это довольно очевидно. Если у вас есть что-то, в чем разница настолько мала, что теряется в шуме, вы можете вместо этого попробовать измерить потребление энергии с течением времени (например, кВтч). Попробуйте измерить час на холостом ходу по сравнению с часом, когда ваш процесс работает на полную мощность, и посмотрите общую разницу в энергии. Повторите то же самое для всех типов тестов, которые вы хотите выполнить.

Вы получите заметную разницу в мощности для интенсивных пользователей ЦП, DDR и GPU. Вы могли заметить разницу между алгоритмами с ограничениями L1 и L2 и алгоритмами с ограничениями DDR (DDR потребляет гораздо больше энергии), если вы внимательно обратите внимание на то, что алгоритмы с ограничениями L1 / L2 работают быстрее - вам необходимо учитывать для энергии, используемой на «задачу», а не непрерывной мощности. Вы, вероятно, не заметите доступ к жесткому диску (на самом деле это всего лишь один или два ватта, которые теряются в шуме ПК), кроме снижения производительности. Одна дополнительная точка данных, которую стоит записать, - это то, насколько увеличивается «базовая» нагрузка, если у вас есть задача, которая просыпается каждые 100 мс или около того, используя 1% ЦП. В основном так выглядит режим ожидания без глубокого сна. (Это взлом, и 100 мс - предположение)

Помните, что 1% может отличаться от 1% в другое время, если у вас есть ЦП с включенными политиками изменения частоты.

И последнее важное замечание: конечно, вы должны измерять энергию, как вы и назвали вопрос. Очень легко сделать ошибку, сравнив энергопотребление одной задачи с другой, и сделать вывод, что одна из них дороже ... если забыть об их относительной производительности. Это всегда происходит с плохими техническими журналистами, которые, например, сравнивают жесткий диск с SSD.

На встроенных платформах с текущим мониторингом по многим рельсам я проводил измерения с точностью до наноджоулей на инструкцию. По-прежнему сложно учесть потребление энергии потоком / процессом, потому что существует большая нагрузка, разделяемая многими задачами, и она может увеличиваться / уменьшаться за пределами своего временного кванта. На ПК я не уверен, что вам удастся добиться такой мелкозернистости :)

person John Ripley    schedule 08.04.2011

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

  • Чунлинг Ху, Даниэль А. Хименес и Ульрих Кремер, Характеристика поведения эффективной программы, Труды Международной конференции 2007 года по высокопроизводительным встроенным архитектурам и компиляторам (HiPEAC-2007), стр. 183--197, Январь 2007 г. (pdf)

  • Адам Льюис, Сумик Гош и Н.-Ф. Ценг, Оценка энергопотребления во время выполнения на основе рабочей нагрузки в серверных системах, USENIX 2008, Семинар по энерго-ориентированным вычислениям и системам (html pdf)

Но вы можете легко найти гораздо больше, используя Google Scholar и Citeseer.

person Mackie Messer    schedule 08.04.2011

В Linux попробуйте утилиту PowerTOP. Однако вместо того, чтобы вычислять абсолютные значения в Джоулях, он фокусируется на использовании относительной мощности между различными компонентами системы.

person Chris Dolan    schedule 19.12.2010
comment
Спасибо. Я считаю, что powertop в основном предназначен для поиска убийц батареи, в частности процессов, которые заставляют ЦП просыпаться из режима ожидания, предотвращая состояние низкого энергопотребления. Помните, что это не единственный способ потреблять энергию, особенно с процессами, привязанными к процессору. - person Eitan; 20.12.2010
comment
@Eitan: какая мощность не приходит от аккумулятора? :-) Но да, я согласен, что это не ответит на ваш точный вопрос. - person Chris Dolan; 20.12.2010
comment
Пробуждение из-за бездействия - не единственный способ потребления энергии процессором; это просто частая причина ненужного потребления энергии. См. Бестиковые ядра, начиная с 2.6. Кое-что. - person tc.; 12.04.2011
comment
Вы знаете, что случилось с анонсированной версией 2.0 PowerTop? Ссылка больше не доступна. - person JJD; 09.10.2011

Energy Efficient Software Guidelines Intel содержит множество полезных информацию, включая ссылку на собственный Application Energy Toolkit. который включает...

2) Приложение для построения графика энергии

Инструмент Application Energy Graphing Tool - это интерактивный инструмент, который может измерять потребление энергии батареей приложением с течением времени, а также регистрировать и графически отображать полученные данные.

Разработчики приложений могут использовать Application Energy Graphing Tool, чтобы помочь им разрабатывать приложения, которые экономят заряд батареи в мобильных компьютерных системах.

person Roddy    schedule 19.12.2010
comment
Я знаком с обоими. Инструментарий представляет собой API, который позволяет вам форматировать входные данные от внешнего измерителя мощности, которого у меня нет. Рекомендации слишком общие и помогают только снизить энергопотребление, а не измерить его. - person Eitan; 20.12.2010

AMD uProf - предоставляет каждому процессу операционной системы единицы абсолютной энергии (мДж) для каждого процесса.

Инструмент оценки мощности платформы Intel ( IPPET) - прототип с абсолютными единицами энергии (мВтч) на процесс.

Intel SocWatch (часть Intel System Studio) - имеет множество низкоуровневых показателей, но без единиц абсолютной энергии (мВтч / мДж) на процесс.

person Oleg Neumyvakin    schedule 24.02.2018