Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 我能';看不到性能';s功率/能量核心选项,用于测量功耗_Performance_Linux Kernel_Perf_Energy - Fatal编程技术网

Performance 我能';看不到性能';s功率/能量核心选项,用于测量功耗

Performance 我能';看不到性能';s功率/能量核心选项,用于测量功耗,performance,linux-kernel,perf,energy,Performance,Linux Kernel,Perf,Energy,我的系统使用Intel(R)Xeon(R)Gold处理器和Centos,Linux内核5.5.2版本 性能版本输出为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/' \___ un

我的系统使用Intel(R)Xeon(R)Gold处理器和Centos,Linux内核5.5.2版本

性能版本输出为
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
我看不到
电源/能源核心
选项。 我只有一个
power/energy-pkg
power/energy-ram
选项

有些人有
电源/能量gpu

如何获得
能源核心
能源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
添加了一个uncore PMU以公开Intel RAPL能耗计数器。
perf
中的事件
power/energy core
power/gpu
分别映射到RAPL域PP0PP1。你可以看到这个

要了解RAPL域,请访问《英特尔软件开发人员手册》第3b卷(电源和热管理章节)

这些领域中的每一个都有自己的体系结构功能。这些能力将通过处理器中存在某些非体系结构MSR来表示。但这些域的存在因英特尔处理器型号的不同而异。有些处理器型号将支持所有这些域,有些仅支持少数几个域

perf
尝试探测这些RAPL msr,并按照msr和cstate模块设计,基于处理器型号创建一个
RAPL_模型匹配
设备表

这是一个快照

例如,您可以看到,仅支持域DRAM

static struct rapl_model model_knl = {
    .events     = BIT(PERF_RAPL_PKG) |
                  BIT(PERF_RAPL_RAM),
    .apply_quirk    = true,
};

因此,为了获得其他事件,您必须使用具有不同处理器型号的系统,从而确保所有相关RAPL MSR的存在。您不能只是在现有系统中构建支持,以神奇地使用
energy cores
gpu
事件。

谢谢您的回答。我可以获得perf的许多细节和原理,并知道在我的perf域的linux内核代码中可以找到什么。非常感谢你的帮助。:)我还有一个问题。如何更改MSR寄存器内容?我找到了一个使用“MSR工具”的解决方案。除了使用MSR工具外,还有另一种方法可以更改MSR寄存器?除了MSR工具,您还可以使用其他方法。
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 },
};
static struct rapl_model model_knl = {
    .events     = BIT(PERF_RAPL_PKG) |
                  BIT(PERF_RAPL_RAM),
    .apply_quirk    = true,
};