首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式使用perf列表中的perf事件

以编程方式使用perf列表中的perf事件
EN

Stack Overflow用户
提问于 2020-08-30 10:24:53
回答 1查看 296关注 0票数 2

当我在我的Linux系统上运行perf list时,我得到了一个可用性能事件的长长列表。

是否可以使用perf_event_open(2)从另一个进程中以编程方式列出和使用这些事件?也就是说,如何从另一个进程获取此列表并确定要在perf_event_attr中填充的相应值

我不是在寻找使用事件的第三方列表的解决方案,例如。libpfm4或jevents。我知道一些事件可以从/sys/devices/cpu/events/中的文件(以及其他事件类型的类似文件)中重建,但这些只是perf list显示的事件的一小部分。

EN

回答 1

Stack Overflow用户

发布于 2020-09-02 06:33:38

在不使用第三方(或first party)列表的情况下,没有解决方案可以从内核(使用任何系统调用,如perf_event_open(2))获取原始事件的完整列表。Perf工具使用从/sys/bus/event_source/devices/cpu/events和类似的sysfs文件夹扫描的一些基本事件,但它有自己的cpu型号特定事件列表:https://elixir.bootlin.com/linux/v5.5.19/source/tools/perf/pmu-eventsthere is readme file,它指出perf使用jevents (perf有8MB的x86 json事件列表,位于tools/perf/pmu-events/arch/x86)。

此目录的内容允许用户通过其符号名称而不是原始事件代码来指定其CPU中的PMU事件(请参见下面的示例)。该目录中的主程序是“jevents”,它是在构建perf二进制文件之前构建和执行的。'jevents‘程序试图在目录树tools/perf/pmu events/arch/foo中找到并处理JSON文件。

您可以从https://mirrors.edge.kernel.org/pub/linux/kernel/tools/perf/下载perf源代码,并使用一些源代码导航工具检查cmd_list函数builtin-list.c文件(带有一些未记录的选项)。您还可以从这些源代码构建perf工具,并且在构建perf的早期将编译jevents (HOSTCC pmu-events/jevents.oLINK pmu-events/jevents)。

通过从pmu_add_cpu_aliases调用的perf_pmu__find_map (util/pmu.c)、从pmu_lookup、从perf_pmu__find、从perf_pmu__scan、从print_pmu_events从cmd_list ( perf list内置命令的处理程序)调用,可以从表事件( pmu_events_map /pmu.c)中检测当前的cpu模型。

对于5.5 version of perf (来自linux kernel 5.5,因为perf是linux内核的一部分),没有带有描述的原始事件列表转储。有一个未记录的选项perf list --raw-dump,它将打印每个可用监视单元的所有事件的列表,例如pmuperf list --raw-dump pmu |tr ' ' '\n'。此原始转储的输出在不同的perf版本之间不稳定。

perf_events子系统的内核部分在arch/x86/eventskernel/events文件夹中没有完整的事件列表,只有标准性能事件(在sysfs中列出)的映射,如周期或cpu /分支未命中/到特定cpu型号的原始事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63653406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档