我已经搜索了答案,但似乎没有人对我的问题有确切的答案。我想测量在虚拟机中执行java程序或任何程序时虚拟机的能耗。如果我们能测量虚拟机中每个核心的能耗,那就太好了。Java中的哪个插件可以用来衡量虚拟机的能耗?
有几种方法可以测量虚拟机的能量。
我假设你想测量一个虚拟机的能量以及它正在执行的程序(如果有的话)。(单独查找虚拟机(例如JVM)的能耗,而不包括在其上执行的程序要困难得多。)
有几种方法可以测量JVM的总能量。
- 你可以从墙上测量。看看这篇文章
- 使用JNI深入JVM并使用PAPI*API
- 使用JNI深入JVM并使用依赖于平台的硬件PMU事件计数器
- 使用底层内核数据结构或API
在所有情况下,最准确的结果将是几个样本/测试运行的平均值。计算机系统中发生了很多事情,其中大部分都是间歇性的,比如垃圾收集、中断处理和支持后台进程的虚拟机。
#1的缺点是它需要外部硬件。此外,它还包括所有东西,如外部外围设备、内存等。您需要计算能源使用量的差异。
#2的缺点是PAPI API只是API,它们的实现是隐藏的。由于受支持的处理器硬件事件不断变化,许多PAPI API都是间接测量的,只能给出非常近似的结果。
#3的缺点是PMU事件在定义上依赖于硬件。PAPI API试图解决这个问题。此外,早期的处理器通常没有能量PMU事件。
#4的缺点与#2的缺点相似。
祝你好运。
*性能应用程序编程接口中的PAPI,而不是Java访问控制API。
Java是安全的。它可以保护您不与真实硬件集成过多。我可以建议你不要使用Java。您应该使用一些系统语言(例如bash脚本)从硬件中获取元数据,然后将其写入Java可以轻松读取的内容(文件、套接字等)。