我看不到用于测量功耗的 perf power/energy-cores 选项
I can't see perf's power/energy-cores option for measure power consumption
我的系统使用 Intel(R) Xeon(R) Gold 处理器和 Centos,Linux 内核 5.5.2 版本
perf 版本输出为 5.5.2-1.el7.elrepo.x86_64
我不会得到每个核心的功耗。
所以我尝试了这个。
>>> sudo perf stat -a -r 1 -e "power/energy-cores/" ./run
event syntax error: 'power/energy-cores/'
\___ unknown term
valid terms: event,config,config1,config2,name,period,percore
Initial error:
event syntax error: 'power/energy-cores/'
\___ unknown term
valid terms: event,config,config1,config2,name,period,percore
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available event
如您所见,发生了错误。
所以我查看了 /sys/bus/event_source/devices/power/events
目录,看看这里有什么事件。
根据结果。
>>> ls /sys/bus/event_source/devices/power/events
energy-pkg energy-pkg.scale energy-pkg.unit energy-ram energy-ram.scale energy-ram.unit
我看不到 power/energy-cores
选项。
我只有 power/energy-pkg
和 power/energy-ram
选项。
有些人power/energy-gpu
。
如何得到energy-cores
和energy-gpu
?
>>> perf list | grep energy
power/energy-pkg/ [Kernel PMU event]
power/energy-ram/ [Kernel PMU event]
>>> sudo perf stat -a -r 1 -e "power/energy-pkg/" -e "power/energy-ram/" ./run
6765
Performance counter stats for 'system wide':
0.06 Joules power/energy-pkg/
0.01 Joules power/energy-ram/
0.001452589 seconds time elapsed
perf
添加了一个非核心 PMU 来公开 Intel RAPL 能耗计数器。 perf
中的事件power/energy-cores
和power/gpu
分别映射到RAPL域PP0和PP1。你可以看到这个here.
static struct perf_msr rapl_msrs[] = {
[PERF_RAPL_PP0] = { MSR_PP0_ENERGY_STATUS, &rapl_events_cores_group, test_msr },
[PERF_RAPL_PKG] = { MSR_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr },
[PERF_RAPL_RAM] = { MSR_DRAM_ENERGY_STATUS, &rapl_events_ram_group, test_msr },
[PERF_RAPL_PP1] = { MSR_PP1_ENERGY_STATUS, &rapl_events_gpu_group, test_msr },
[PERF_RAPL_PSYS] = { MSR_PLATFORM_ENERGY_STATUS, &rapl_events_psys_group, test_msr },
};
要阅读有关 RAPL 域的信息,请访问英特尔软件开发人员手册第 3b 卷(关于电源和热管理的章节)。
这些领域中的每一个都有自己的体系结构功能。这些功能将通过处理器中某些非架构 MSR 的存在来指示。但这些域的存在因不同的英特尔处理器型号类型而异。一些处理器模型将支持所有这些域,一些只支持几个域。
perf
尝试探测这些 RAPL MSR,并根据处理器型号创建 rapl_model_match
设备 table,遵循 msr 和 cstate 模块设计。
快照是 here。
例如,您可以看到 here 仅支持域 Package 和 DRAM。
static struct rapl_model model_knl = {
.events = BIT(PERF_RAPL_PKG) |
BIT(PERF_RAPL_RAM),
.apply_quirk = true,
};
因此,为了获得其他事件,您必须使用具有不同处理器型号的系统,从而确保所有相关 RAPL MSR 的存在。您不能仅仅在现有系统中构建支持来神奇地使用 energy-cores
和 gpu
事件。
我的系统使用 Intel(R) Xeon(R) Gold 处理器和 Centos,Linux 内核 5.5.2 版本
perf 版本输出为 5.5.2-1.el7.elrepo.x86_64
我不会得到每个核心的功耗。 所以我尝试了这个。
>>> sudo perf stat -a -r 1 -e "power/energy-cores/" ./run
event syntax error: 'power/energy-cores/'
\___ unknown term
valid terms: event,config,config1,config2,name,period,percore
Initial error:
event syntax error: 'power/energy-cores/'
\___ unknown term
valid terms: event,config,config1,config2,name,period,percore
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available event
如您所见,发生了错误。
所以我查看了 /sys/bus/event_source/devices/power/events
目录,看看这里有什么事件。
根据结果。
>>> ls /sys/bus/event_source/devices/power/events
energy-pkg energy-pkg.scale energy-pkg.unit energy-ram energy-ram.scale energy-ram.unit
我看不到 power/energy-cores
选项。
我只有 power/energy-pkg
和 power/energy-ram
选项。
有些人power/energy-gpu
。
如何得到energy-cores
和energy-gpu
?
>>> perf list | grep energy
power/energy-pkg/ [Kernel PMU event]
power/energy-ram/ [Kernel PMU event]
>>> sudo perf stat -a -r 1 -e "power/energy-pkg/" -e "power/energy-ram/" ./run
6765
Performance counter stats for 'system wide':
0.06 Joules power/energy-pkg/
0.01 Joules power/energy-ram/
0.001452589 seconds time elapsed
perf
添加了一个非核心 PMU 来公开 Intel RAPL 能耗计数器。 perf
中的事件power/energy-cores
和power/gpu
分别映射到RAPL域PP0和PP1。你可以看到这个here.
static struct perf_msr rapl_msrs[] = {
[PERF_RAPL_PP0] = { MSR_PP0_ENERGY_STATUS, &rapl_events_cores_group, test_msr },
[PERF_RAPL_PKG] = { MSR_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr },
[PERF_RAPL_RAM] = { MSR_DRAM_ENERGY_STATUS, &rapl_events_ram_group, test_msr },
[PERF_RAPL_PP1] = { MSR_PP1_ENERGY_STATUS, &rapl_events_gpu_group, test_msr },
[PERF_RAPL_PSYS] = { MSR_PLATFORM_ENERGY_STATUS, &rapl_events_psys_group, test_msr },
};
要阅读有关 RAPL 域的信息,请访问英特尔软件开发人员手册第 3b 卷(关于电源和热管理的章节)。
这些领域中的每一个都有自己的体系结构功能。这些功能将通过处理器中某些非架构 MSR 的存在来指示。但这些域的存在因不同的英特尔处理器型号类型而异。一些处理器模型将支持所有这些域,一些只支持几个域。
perf
尝试探测这些 RAPL MSR,并根据处理器型号创建 rapl_model_match
设备 table,遵循 msr 和 cstate 模块设计。
快照是 here。
例如,您可以看到 here 仅支持域 Package 和 DRAM。
static struct rapl_model model_knl = {
.events = BIT(PERF_RAPL_PKG) |
BIT(PERF_RAPL_RAM),
.apply_quirk = true,
};
因此,为了获得其他事件,您必须使用具有不同处理器型号的系统,从而确保所有相关 RAPL MSR 的存在。您不能仅仅在现有系统中构建支持来神奇地使用 energy-cores
和 gpu
事件。