预定义的perf 事件列表,如branches cycles LLC-load-misses 由 Linux 内核中 perf 子系统的源代码记录。该列表部分映射到不同 CPU 型号和微架构的各种硬件事件。使用来自andikleen's pmu-tools(如果您的 CPU 是 Intel)的 ocperf.py(和 toplev.py)与来自 Intel 文档的事件名称(ocperf 不是官方的,但它是由 Intel 员工编写并使用 官方列表来自https://download.01.org/perfmon/https://download.01.org/perfmon/readme.txt“这个包包含英特尔处理器的性能监控事件列表”)
对于 x86 和 x86_64 perf,这些(古老的)预定义/通用名称映射到 arch/x86/events 目录,例如对于所有英特尔酷睿微架构检查 arch/x86/events/intel/core.c 并通过其代码名称搜索微架构(Core、Core2、 NHM=Nehalem、WSM=Westmere、SNB=SandyBridge、IVB=IvyBridge、HSW=HaSWell、BDW=BroaDWell、SKL=SKyLake、SLM=SiLverMont 和其他来自lists 和amd)。对于 Skylake,line 394 of intel/core.c of 4.15.8 有结构,我们看到 PREFETCH 计数器未映射到所有缓存(“不支持”)
static __initconst const u64 skl_hw_cache_event_ids
[ C(L1D ) ] = {
[ C(OP_READ) ] = {
[ C(RESULT_ACCESS) ] = 0x81d0, /* MEM_INST_RETIRED.ALL_LOADS */
[ C(RESULT_MISS) ] = 0x151, /* L1D.REPLACEMENT */
},
[ C(OP_WRITE) ] = {
[ C(RESULT_ACCESS) ] = 0x82d0, /* MEM_INST_RETIRED.ALL_STORES */
[ C(RESULT_MISS) ] = 0x0,
...
[ C(LL ) ] = {
[ C(OP_READ) ] = {
[ C(RESULT_ACCESS) ] = 0x1b7, /* OFFCORE_RESPONSE */
[ C(RESULT_MISS) ] = 0x1b7, /* OFFCORE_RESPONSE */
},
[ C(OP_WRITE) ] = {
[ C(RESULT_ACCESS) ] = 0x1b7, /* OFFCORE_RESPONSE */
[ C(RESULT_MISS) ] = 0x1b7, /* OFFCORE_RESPONSE */
},
以及为诸如 OFFCORE_RESPONSE 之类的事件定义额外标志/掩码的额外结构:
static __initconst const u64 skl_hw_cache_extra_regs
[ C(LL ) ] = {
[ C(OP_READ) ] = {
[ C(RESULT_ACCESS) ] = SKL_DEMAND_READ|
SKL_LLC_ACCESS|SKL_ANY_SNOOP,
[ C(RESULT_MISS) ] = SKL_DEMAND_READ|
SKL_L3_MISS|SKL_ANY_SNOOP|
SKL_SUPPLIER_NONE,
},
[ C(OP_WRITE) ] = {
[ C(RESULT_ACCESS) ] = SKL_DEMAND_WRITE|
SKL_LLC_ACCESS|SKL_ANY_SNOOP,
[ C(RESULT_MISS) ] = SKL_DEMAND_WRITE|
SKL_L3_MISS|SKL_ANY_SNOOP|
SKL_SUPPLIER_NONE,
[ C(NODE) ] = {
[ C(OP_READ) ] = {
[ C(RESULT_ACCESS) ] = SKL_DEMAND_READ|
SKL_L3_MISS_LOCAL_DRAM|SKL_SNOOP_DRAM,
[ C(RESULT_MISS) ] = SKL_DEMAND_READ|
SKL_L3_MISS_REMOTE|SKL_SNOOP_DRAM,
},
[ C(OP_WRITE) ] = {
[ C(RESULT_ACCESS) ] = SKL_DEMAND_WRITE|
SKL_L3_MISS_LOCAL_DRAM|SKL_SNOOP_DRAM,
[ C(RESULT_MISS) ] = SKL_DEMAND_WRITE|
SKL_L3_MISS_REMOTE|SKL_SNOOP_DRAM,