Answers:
CPU利用率有许多方面会影响能耗。这不仅是应用程序消耗多少CPU,而且还取决于它的使用频率和灵活性。后者可以产生更大的影响。
一个需要每10ms 精确唤醒一次以执行几行简单的Obj-C代码的应用程序,与执行数千行代码的同一应用程序相比,其能量影响要大一个数量级,但每秒执行一次,而且效果不佳确切地说是在那一秒内何时进行计算。
苹果可能会使用英特尔的性能计数器,并将其计入您的应用程序。首先阅读英特尔手册,了解电源状态和能源管理,您可能会获得最多的见识。不同的架构之间会有很大的不同。行为不佳的应用程序对Haswell的影响比对“旧” Core 2机器的影响更大。
也可以考虑使用其他资源,例如音频系统,执行磁盘I / O或使用USB设备。一种可能的计费方法会将应用程序专有使用的资源所需的所有能源使用分配给您的应用程序(例如自定义USB设备,访问原先关闭电源的音频系统),并对共享硬件进行某种比例分配。
这一切都始于精确的监控和毫秒级的测量。
例如,英特尔开发了一种工具来监视英特尔CPU参数。
它显示功率,频率和温度。
功耗和温度是频率(速度)或处理的数据量的乘积。
采样率为毫秒,功率以瓦特为单位,它测量CPU的总功率,而“活动”监视器按应用程序/进程将其细分。
这是苹果公司有关电源管理/功耗的文章,其中详细介绍了如何进行电源管理。
总之,使用ms功率测量可以更好地控制总体功耗。
使用上述有关每个应用程序的信息以及由此产生的累计电量,Apple已实现了计时器合并和App Nap功能来管理功耗,结果如下表所示。
要查看上述图表的更多信息,请访问本文。
由于CPU控件的活动包括RAM管理和磁盘读/写,网卡等改进RAM管理,还可以减少因频繁的磁盘R / W活动而产生的功耗。
电源管理涉及很多方面,它们是非常精确的测量和软件设计的结合,可以减少功耗。
一些例子是:
应用小憩功能
计时器合并功能 PDF
似乎没有关于如何计算功耗的任何文档。仅CPU使用率无法可靠地预测功耗。因此,考虑的主要因素是(这些因素与App Nap的观察和控制有所补充):
同样,没有详细说明如何测量这些因素以及用于计算功耗的公式。我们可以通过以下事实做出一些有根据的猜测:每个Mac(以及PC)都在系统内配备了各种传感器。您可以使用诸如硬件监视器之类的工具来实时查看Mac 配备的传感器以及它们正在报告的传感器。
硬件监视器中可用的(并且已经使用了几年)与功耗有关的关键传感器是CPU电压,CPU电流和CPU功率。对于上面列表中的其他元素,没有硬件传感器可以测量功耗。因此,Apple必须根据Mac的型号和底层硬件使用特定的外推因子。
该数字似乎来自程序top
。我找到了以下博客文章,其中更详细地研究了此计算:https : //blog.mozilla.org/nnethercote/2015/08/26/what-does-the-os-x-activity-monitors-energy-impact -实际测量/
在每种情况下,Activity Monitor的“能源影响”都与
top
POWER度量相同。每个迹象都表明这两个在本机上的计算是相同的。
由于top
是开源的,我们可以研究一个实际的公式/代码来计算此数字,博客文章将其总结为:
|elapsed_us| is the length of the sample period
|used_us| is the time this process was running during the sample period
%CPU = (used_us * 100.0) / elapsed_us
POWER = if is_a_kernel_process()
0
else
((used_us + IDLEW * 500) * 100.0) / elapsed_us
正如@Ruskes所暗示的那样,该计算是基于以毫秒为单位测量的过程唤醒。该博客文章提到:
POWER计算是CPU和IDLEW的函数。它与%CPU基本相同,但每次唤醒的“税”为500微秒,内核进程为例外。此功能的值很容易超过100(例如,CPU使用率为零且每秒唤醒3000次的程序的POWER得分为150),因此它不是百分比。实际上,POWER是无单位度量,因为它是两个度量不兼容的单元的半任意组合。
因此,从本质上讲,您可以将数字视为衡量CPU唤醒的指标。