继在Akademy 2020上主持的关于软件功耗的BoF会议之后,我对工具进行了一些研究,特别是寻找测量电能消耗的廉价方法。以下是到目前为止的结果。
我们现有的用于提高软件性能的评测工具也隐含地识别了可能会增加功耗的部件,并且我们确实有像Powertop这样的专门工具,能够很好地识别特定类型的功耗。但并不是所有的东西都是可见的,例如CPU/GPU的权衡,或者电源管理选项或显示设置的实际效果。
因此,能够测量墙上插头和整个设备之间的实际功耗似乎是有意义的,至少可以验证我们从其他分析工具做出的假设实际上是成立的。
测量电功率并不完全是一个没有解决的问题,即使在考虑交流电和开关电源的组合时,它也不是完全微不足道的。但是,当添加所有我们想要的约束时,找到一个解决方案并不是简单的:
使用多种设备进行测量,无需修改,覆盖总功耗,理想情况下只需连接电源插头和墙上插座即可。
高时间分辨率:计算硬件的功耗可以非常非常迅速地变化,如果计算硬件的平均耗电量在很长一段时间内保持不变,则可能会隐藏与我们相关的信息。
便宜:为了真正产生影响,我认为我们需要在社区中广泛传播这些设备,而这更有可能是使用价格为10欧元的工具,而不是几千欧元的工具。
对于没有电气工程背景的人来说,操作简单安全:如上所述,这将有助于工具的广泛推广。
奖励:机器可读的测量数据。这可以让我们在此基础上构建更多的软件工具,例如用于检查幂回归的测试自动化或CI集成。
如果你在时间分辨率上做出妥协,每个硬件商店都有相当精确的设备出售,大约10欧元,比如“能源监控器”,通常带有一个小LCD屏幕,显示一段时间内的累计用电量。
如果你在安全性上妥协(或者至少接受相当大的努力来实现安全性),制造DIY测量设备所需的传感器只需几欧元。
今年早些时候,当我在办公室为全面远程操作做准备时,我遇到了一种似乎可以勾选所有这些选项的设备:一个能够运行自由软件固件的无线控制电源插头和一个集成的电源传感器。
为了试一试,我花了大约8欧元一个给自己买了几个Gosund SP111,并用Tasmota替换了他们的固件。手动闪烁指令可能看起来有点可怕,但多亏了他们库存固件中的“机会”,这也可以通过空中TUYA-CONVERT方便地完成。在他们的说明中遵循基于Docker的方法,使得这项工作在第一次尝试时就完成了,对我来说没有任何问题。开箱即用,它已经在其Sweb UI中显示了功率测量,更新间隔为几秒钟。
虽然初始值完全不可信,但通过功率校准程序对此很有帮助。通过MQTT自动读出测量值是可能的,所以这也包括在内。
在这一点上,我正在阅读固件代码,假设它需要调整以允许更高的采样率,但事实证明,我们只需发送正确的MQTT命令就可以将其降低到200ms。以下两个并行运行的原始脚本生成具有各种测量值的CSV流。
蚊子_酒吧-t";-m";-m";3";蚊子_酒吧-t";-m";3";蚊子酒吧-t";cmnd/tasmota/powerres";-m";5";当为真时;是否睡眠200000蚊子_酒吧-t";cmnd/tasmota/status";-m";10";完成
这会将设备设置为以最高可用分辨率报告测量结果,然后以200ms间隔轮询。结果由下一个脚本接收并解压缩。它的输出是可以根据需要重定向的CSV。
ECHO";时间;电压;电流;功率;视在功率;无功功率;因数";time=0蚊子_sub-t';stat/tasmota/STATUS10';|While IFS=read-r line do time=$((time+200))VOLTION=`ECHO$LINE|JQ";.StatusSNS.ENERGY.Voltv";`Current=`ECHO$LINE|JQ";.StatusSNS.ENERGY.Current";`power=`ECHO$LINE|JQ";`power=`ECHO$LINE|JQ";.StatusSNS.ENERGY.Current";`power=`ECHO$LINE|JQ";.StatusSNS.ENERGY.Power";`ApparentPower=`ECHO$LINE|JQ";.StatusSNS.ENERGY.ApparentPower";`RESPECTIVE_POWER=`ECHO$LINE|JQ";.StatusSNS.ENERGY.ReactivePower";`power_factor=`ECHO$LINE|JQ";.StatusSNS.ENERGY.factor";`ECHO";$time;$VOLVAL;$CURRENT;$POWER;$APHERWORY;$POWER_F因子";完成。
有很多方法可以处理CSV数据,但是实时视图被证明是非常有用的。由于数据可能相当嘈杂,所以基本的平滑过滤器也有助于使内容更易于阅读。
KDE的LabPlot可以使用CSV“流”,并为此提供了正确的过滤器。不幸的是,它的过滤器还不能实时应用,所以LapPlot团队向我推荐了一个可以做到这一点的更古老的KDE应用程序:KST。它的滤波器是基于频率的,所以我们需要一个低通滤波器来平滑测量。没有LabPlot生产的IMHO好,但是它可以完成工作。
首先是好消息:这是足够敏感的,可以看到简单的用户交互、省电选项(即,POWERTOP中的好/坏切换)、显示器亮度变化等。
这真是太好了,也就是。然而,报告的值与现实有多接近,以及噪声在多大程度上是感官固有的,也不知道,因为缺乏一个校准的参考来比较这一点。根据网上找到的关于如何通过修改硬件来降低噪音的建议,我不得不假设其中大部分来自传感器。
这里还有很多事情需要进一步研究,无论是关于评估和改进测量的质量和分辨率(例如,通过修改Tasmota固件来提高采样频率,假设这是非常有用的),以及关于确定软件设置或选项的功率影响。
虽然不做我们不需要做的工作当然是更好的方法,但有许多不太明显的问题需要用这个来研究:
默认情况下,我们是否可以启用Powertop提供的更多电源管理选项?他们被淘汰可能有很好的理由,但也许这种选择可以更有针对性地进行?或者,如果是关于用户决定的权衡,也许可以让更多的用户更容易访问?
CPU和GPU上的操作如何比较,或者访问GPU的不同方式?例如,考虑一下这里的各种合成器设置。
我们如何最好地执行长期运行的后台任务?以最快的速度使用所有可用的资源,还是随着时间的推移而变得捉襟见肘?
我们能不能以某种方式使自动屏幕亮度控制变得更智能,例如,通过改进空闲或存在检测?
我们可以通过将深色方案设为OLED屏幕的默认配色方案来节省电能吗?
由于我在这些实验中没有弄坏任何Wifi电源插头,我还有两个备用电源插头可以传递给社区中任何有兴趣研究这一点的人!