powermetrics¶
powermetrics
是一个仅限 Mac 的命令行实用程序,提供许多高质量的电源相关测量。它最适合以精确且易于脚本化的方式获取 CPU、GPU 和唤醒测量(与 活动监视器和 top 不同),尤其是在与 rapl 结合使用时,通过 mach power
命令。本文档描述的是 Mac OS 10.10 附带的 powermetrics
版本。10.9 附带的版本功能较弱。
注意:如果您还没有阅读 电源分析概述,建议您现在阅读。它可以帮助您更好地理解本文档的某些部分。
快速入门¶
powermetrics
提供了大量的测量指标。以下命令包含了其中最常用的指标
sudo powermetrics –samplers tasks –show-process-coalition –show-process-gpu -n 1 -i 5000
--samplers tasks
指示它仅执行每个进程的测量。--show-process-coalition``
指示它对相关进程的联盟进行分组,例如 Firefox 父进程和子进程。--show-process-gpu
指示它显示每个进程的 GPU 测量。-n 1
指示它采集一个样本然后停止。-i 5000
指示它使用 5 秒(5000 毫秒)的样本长度。更改此数字可获得更短或更长的样本。
以下是此类调用的示例输出
*** Sampled system activity (Fri Sep 4 17:15:14 2015 +1000) (5009.63ms elapsed) ***
*** Running tasks ***
Name ID CPU ms/s User% Deadlines (<2 ms, 2-5 ms) Wakeups (Intr, Pkg idle) GPU ms/s
com.apple.Terminal 293 447.66 274.83 120.35 221.74
firefox 84627 77.59 55.55 15.37 2.59 91.42 42.12 204.47
plugin-container 84628 377.22 37.18 43.91 18.56 178.65 75.85 17.29
Terminal 694 9.86 79.94 0.00 0.00 4.39 2.20 0.00
powermetrics 84694 1.21 31.53 0.00 0.00 0.20 0.20 0.00
com.google.Chrome 489 233.83 48.10 25.95 0.00
Google Chrome Helper 84688 181.57 92.81 0.00 0.00 23.95 12.77 0.00
Google Chrome 84681 57.26 76.07 4.39 0.00 23.75 12.97 0.00
Google Chrome Helper 84685 0.13 48.08 0.00 0.00 0.40 0.20 0.00
kernel_coalition 1 128.64 780.19 330.52 0.00
kernel_task 0 109.97 0.00 0.20 0.00 779.47 330.35 0.00
launchd 1 18.88 2.44 0.00 0.00 0.40 0.20 0.00
com.apple.Safari 488 90.60 108.58 56.48 26.65
com.apple.WebKit.WebContent 84679 64.21 84.69 0.00 0.00 104.19 54.89 26.66
com.apple.WebKit.Networking 84678 26.89 58.89 0.40 0.00 1.60 0.00 0.00
Safari 84676 1.56 55.74 0.00 0.00 2.59 1.40 0.00
com.apple.Safari.SearchHelper 84690 0.15 49.49 0.00 0.00 0.20 0.20 0.00
org.mozilla.firefox 482 76.56 124.34 63.47 0.00
firefox 84496 76.70 89.18 10.58 5.59 124.55 63.48 0.00
此样本是在以下程序运行时采集的
Firefox Beta(单进程,从 Mac OS Dock 启动,显示在
org.mozilla.firefox
联盟中。)Firefox Nightly(多进程,从命令行启动,显示在
com.apple.Terminal
联盟中。)Google Chrome。
Safari。
父进程和子进程(在联盟中)的分组很明显。各列的含义如下。
名称:联盟/进程名称。联盟中的进程名称缩进显示。
ID:联盟/进程 ID 号。
CPU ms/s:样本期间联盟/进程每秒使用的 CPU 时间。由于未知原因,进程值的总和通常略高于联盟值。
用户%:该 CPU 时间中在用户空间(相对于内核模式)中花费的百分比。
截止时间 (<2 ms, 2-5 ms):这两列统计了样本期间每秒有多少个“短”计时器唤醒进程中的线程。高频计时器通常具有较短的截止时间,会导致高功耗,应尽量避免。
唤醒次数 (中断, 包空闲):这两列统计了样本期间每秒发生的唤醒次数。第一列统计导致进程中调度线程的中断级唤醒次数。第二列统计“包空闲退出”唤醒次数,这些唤醒会唤醒整个包,而不是单个内核;此类唤醒非常昂贵,此计数是第一列计数的子集。
GPU ms/s:样本期间联盟/进程每秒使用的 GPU 时间。
其他需要注意的事项。
越小越好——即所有这些测量的结果功耗越低。
两个“截止时间”列和两个“唤醒次数”列之间存在一些重叠。例如,触发单个亚 2 毫秒截止时间也可能导致包空闲退出唤醒。
许多这些测量指标也可以通过传递
TASK_POWER_INFO
标志和task_power_info
结构体到task_info
函数来获取。默认情况下,联盟/进程按从多个因素计算出的复合值排序,但可以通过命令行选项更改。
其他测量指标¶
powermetrics
还可以报告背光使用情况、网络活动、磁盘活动、中断分布、设备电源状态、C 状态驻留时间、P 状态驻留时间、服务质量类别和热压力测量。但是,这些指标不太可能用于分析 Firefox。使用 --show-all
选项可以同时查看所有这些指标,但请注意,您需要一个非常宽的窗口才能查看所有数据。
另请注意,powermetrics -h
是比 man powermetrics
更好的命令行选项指南。
mach power¶
您可以使用 mach power
命令以将 powermetrics
与 rapl
结合使用的方式运行,从而为 Firefox、Chrome 和 Safari 中的每一个提供最有用的摘要测量。以下是示例输出。
total W = _pkg_ (cores + _gpu_ + other) + _ram_ W
#01 17.14 W = 14.98 ( 5.50 + 1.19 + 8.29) + 2.16 W
1 sample taken over a period of 30.000 seconds
Name ID CPU ms/s User% Deadlines (<2 ms, 2-5 ms) Wakeups (Intr, Pkg idle) GPU ms/s
com.google.Chrome 500 439.64 585.35 218.62 19.17
Google Chrome Helper 67319 284.75 83.03 296.67 0.00 454.05 172.74 0.00
Google Chrome Helper 67304 55.23 64.83 0.03 0.00 9.43 4.33 19.17
Google Chrome 67301 63.77 68.09 29.46 0.13 76.11 22.26 0.00
Google Chrome Helper 67320 38.30 66.70 17.83 0.00 45.78 19.29 0.00
com.apple.WindowServer 68 102.58 112.36 43.15 80.52
WindowServer 141 103.03 58.19 60.48 6.40 112.36 43.15 80.53
com.apple.Safari 499 267.19 110.53 46.05 1.69
com.apple.WebKit.WebContent 67372 190.15 79.34 2.02 0.14 129.28 53.79 2.33
com.apple.WebKit.Networking 67292 65.23 52.74 0.07 0.00 4.33 1.40 0.00
Safari 67290 29.09 77.65 0.23 0.00 7.13 3.37 0.00
com.apple.Safari.SearchHelper 67371 13.88 91.18 0.00 0.00 0.36 0.05 0.00
com.apple.WebKit.WebContent 67297 0.81 56.84 0.10 0.00 2.20 1.30 0.00
com.apple.WebKit.WebContent 67293 0.46 76.40 0.03 0.00 0.57 0.20 0.00
com.apple.WebKit.WebContent 67295 0.24 67.72 0.00 0.00 0.90 0.37 0.00
com.apple.WebKit.WebContent 67298 0.17 59.88 0.00 0.00 0.50 0.13 0.00
com.apple.WebKit.WebContent 67296 0.07 43.51 0.00 0.00 0.10 0.03 0.00
kernel_coalition 1 111.76 724.80 213.09 0.12
kernel_task 0 107.06 0.00 5.86 0.00 724.46 212.99 0.12
org.mozilla.firefox 498 92.17 212.69 75.67 1.81
firefox 63865 61.00 87.18 1.00 0.87 25.79 9.00 1.81
plugin-container 67269 31.49 72.46 1.80 0.00 186.90 66.68 0.00
com.apple.WebKit.Plugin.64 67373 55.55 74.38 0.74 0.00 9.51 3.13 0.02
com.apple.Terminal 109 6.22 0.40 0.23 0.00
Terminal 208 6.25 92.99 0.00 0.00 0.33 0.20 0.00
首先是 rapl
输出,然后是 powermetrics
输出。除了浏览器进程外,还显示了 WindowServer
和内核任务,因为浏览器通常会在其中触发大量负载。
默认样本周期为 30,000 毫秒(30 秒),但可以使用 -i
选项更改。