Измерьте потребление энергии в Java

Я уже искал ответы, но, похоже, никто не нашел точного ответа на мою проблему. Я хочу измерить потребление энергии виртуальной машиной, когда на виртуальной машине выполняется Java-программа или любая другая программа. Также было бы здорово, если бы мы могли измерить энергопотребление каждого ядра в виртуальной машине. Какой плагин в Java можно использовать для измерения энергопотребления виртуальной машины?

2 ответа

Существует несколько способов измерения энергии виртуальной машины.

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

Есть несколько способов измерения полной энергии от JVM.

  1. Вы можете измерить со стены. Посмотрите на этот пост.
  2. Используйте JNI для детализации под JVM и используйте API-интерфейсы PAPI *.
  3. Используйте JNI для детализации под JVM и используйте зависящие от платформы аппаратные счетчики событий PMU.
  4. Используйте базовую структуру данных ядра или API.

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

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

Недостатком #2 является то, что API-интерфейсы PAPI являются просто API-интерфейсами, а их реализация скрыта. Поскольку события поддерживаемых процессоров HW постоянно меняются, многие API-интерфейсы PAPI измеряют вещи косвенно и могут давать только очень приблизительные результаты.

Недостатком #3 является то, что события PMU зависят от аппаратного обеспечения по определению. API-интерфейсы PAPI являются попыткой решить эту проблему. Кроме того, более ранние процессоры часто не имели событий PMU энергии.

Недостаток № 4 аналогичен недостатку № 2.

Удачи.

* PAPI, как в интерфейсе прикладного программирования, а не API-интерфейс управления доступом Java.

Ява безопасна. Он защищает вас от чрезмерной интеграции с вашим реальным оборудованием. Я мог бы предложить вам не использовать Java. Вы должны использовать некоторый системный язык (например, bash-скрипт), чтобы получить метаданные с вашего оборудования, а затем записать их в то, что Java может легко прочитать (файл, сокет и т. Д.).

Другие вопросы по тегам