首页 > 解决方案 > 如何测量云环境中虚拟机的功耗?

问题描述

我在云环境(谷歌计算引擎)中运行了一些与区块链相关的容器。我想测量容器或我正在运行的实例的功率/能耗。

有像powerapi这样的工具可以在可以访问真实 CPU 计数器的真实基础架构中执行此操作。这应该可以通过基于 CPU、内存和网络使用情况进行估计来实现。文献中提出了一种这样的模型。

理论上可以做到这一点吗?如果是这样,是否已经存在用于此任务的工具。

标签: amazon-web-servicesgoogle-cloud-platformcloudenergy

解决方案


一个普遍的答案是“不,这是不可能的”。在虚拟机中运行的程序处理虚拟硬件。虚拟化的目标是从物理硬件中抽象出正在运行的程序,而需要访问物理设备来测量能耗。例如,在没有启用处理器关联的情况下,PowerAPI 不太可能由于虚拟 CPU 迁移而能够收集有用的统计信息。允许在一个物理 CPU 上运行多个 vCPU 的时间分片是另一个需要牢记的因素。不用说 RAM、I/O 控制器、存储设备等所消耗的能量。

一个实质性的答案是“不,不可能”。手稿的作者使用 PowerAPI 库来收集 CPU 统计信息,并使用监控代理来计算通过网络传输的字节数。PowerAPI 所依赖的 HWPC 传感器有不同的要求:

“受监控的节点运行未托管在虚拟环境中的 Linux 发行版”

此外,作者强调他们无法测量功耗的绝对值,而是使用百分比来比较某些 Java 类和方法,以推测 CPU 密集型工作负载中能量泄漏的根源。

至于网络 I/O,在其模型中用于估计功耗的字节数在暴露于虚拟来宾的网络接口和网络上的主机硬件端口之间存在显着差异,SDN 堆栈介于两者之间。


推荐阅读