在java中测量能耗



我已经搜索了答案,但似乎没有人对我的问题有确切的答案。我想测量在虚拟机中执行java程序或任何程序时虚拟机的能耗。如果我们能测量虚拟机中每个核心的能耗,那就太好了。Java中的哪个插件可以用来衡量虚拟机的能耗?

有几种方法可以测量虚拟机的能量。

我假设你想测量一个虚拟机的能量以及它正在执行的程序(如果有的话)。(单独查找虚拟机(例如JVM)的能耗,而不包括在其上执行的程序要困难得多。)

有几种方法可以测量JVM的总能量。

  1. 你可以从墙上测量。看看这篇文章
  2. 使用JNI深入JVM并使用PAPI*API
  3. 使用JNI深入JVM并使用依赖于平台的硬件PMU事件计数器
  4. 使用底层内核数据结构或API

在所有情况下,最准确的结果将是几个样本/测试运行的平均值。计算机系统中发生了很多事情,其中大部分都是间歇性的,比如垃圾收集、中断处理和支持后台进程的虚拟机。

#1的缺点是它需要外部硬件。此外,它还包括所有东西,如外部外围设备、内存等。您需要计算能源使用量的差异。

#2的缺点是PAPI API只是API,它们的实现是隐藏的。由于受支持的处理器硬件事件不断变化,许多PAPI API都是间接测量的,只能给出非常近似的结果。

#3的缺点是PMU事件在定义上依赖于硬件。PAPI API试图解决这个问题。此外,早期的处理器通常没有能量PMU事件。

#4的缺点与#2的缺点相似。

祝你好运。

*性能应用程序编程接口中的PAPI,而不是Java访问控制API。

Java是安全的。它可以保护您不与真实硬件集成过多。我可以建议你不要使用Java。您应该使用一些系统语言(例如bash脚本)从硬件中获取元数据,然后将其写入Java可以轻松读取的内容(文件、套接字等)。

最新更新