Измерьте потребление энергии в Java
Я уже искал ответы, но, похоже, никто не нашел точного ответа на мою проблему. Я хочу измерить потребление энергии виртуальной машиной, когда на виртуальной машине выполняется Java-программа или любая другая программа. Также было бы здорово, если бы мы могли измерить энергопотребление каждого ядра в виртуальной машине. Какой плагин в Java можно использовать для измерения энергопотребления виртуальной машины?
2 ответа
Существует несколько способов измерения энергии виртуальной машины.
Я предполагаю, что вы хотите измерить энергию виртуальной машины вместе с программой, которую она выполняет (если она есть). (Найти энергопотребление виртуальной машины - например, JVM - само по себе и не включая программу, выполняющуюся на ней, гораздо сложнее.)
Есть несколько способов измерения полной энергии от JVM.
- Вы можете измерить со стены. Посмотрите на этот пост.
- Используйте JNI для детализации под JVM и используйте API-интерфейсы PAPI *.
- Используйте JNI для детализации под JVM и используйте зависящие от платформы аппаратные счетчики событий PMU.
- Используйте базовую структуру данных ядра или API.
Во всех случаях наиболее точные результаты будут средними по нескольким образцам / тестам. В компьютерной системе происходит много всего, и большая его часть носит прерывистый характер, например сборка мусора, обработка прерываний и виртуальная машина, поддерживающая фоновые процессы.
Недостаток №1 в том, что ему нужно внешнее оборудование. Кроме того, он включает в себя все, такие как внешние периферийные устройства, память и т. Д. Вы хотите вычислить разницу в потреблении энергии.
Недостатком #2 является то, что API-интерфейсы PAPI являются просто API-интерфейсами, а их реализация скрыта. Поскольку события поддерживаемых процессоров HW постоянно меняются, многие API-интерфейсы PAPI измеряют вещи косвенно и могут давать только очень приблизительные результаты.
Недостатком #3 является то, что события PMU зависят от аппаратного обеспечения по определению. API-интерфейсы PAPI являются попыткой решить эту проблему. Кроме того, более ранние процессоры часто не имели событий PMU энергии.
Недостаток № 4 аналогичен недостатку № 2.
Удачи.
* PAPI, как в интерфейсе прикладного программирования, а не API-интерфейс управления доступом Java.
Ява безопасна. Он защищает вас от чрезмерной интеграции с вашим реальным оборудованием. Я мог бы предложить вам не использовать Java. Вы должны использовать некоторый системный язык (например, bash-скрипт), чтобы получить метаданные с вашего оборудования, а затем записать их в то, что Java может легко прочитать (файл, сокет и т. Д.).