kernel - 在哪里可以找到 perf 事件文档

标签 kernel document perf manual

在问题cpu cache performance. store misses vs load misses中,没有找到关于在哪里可以找到 perf list 列出的事件文档的答案

我无法通过man perfperf help list找到它,

我看了Intel@64和AMD64的Event文档,事件格式如下 最后一级缓存引用 — 事件选择 2EH,Umask 4FH 那么它在哪里呢?

编辑:明确地说,我想通过 perf list 查找事件列表的文档

最佳答案

预定义的perf事件列表,例如branches cycles LLC-load-misses由源代码记录Linux 内核中的 perf 子系统。该列表部分映射到不同 CPU 型号和微体系结构的各种硬件事件。使用 ocperf.py 会更有用(和 toplev.py)来自 andikleen's pmu-tools (如果您的 CPU 是 Intel),事件名称来自 Intel 文档(ocperf 不是官方的,但它是由 Intel 员工编写的,并使用 https://download.01.org/perfmon/ https://download.01.org/perfmon/readme.txt 中的官方列表“此软件包包含性能监控英特尔处理器的事件列表”)

对于 x86 和 x86_64 perf 这些(古老的)预定义/通用名称映射在 arch/x86/events目录,例如所有 Intel Core 微架构检查 arch/x86/events/intel/core.c并按其代号搜索微体系结构(Core、Core2、NHM=Nehalem、WSM=Westmere、SNB=SandyBridge、IVB=IvyBridge、HSW=HaSWell、BDW=BroaDWell、SKL=SKyLake、SLM=SiLverMont 等来自 listsamd )。对于 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,

关于kernel - 在哪里可以找到 perf 事件文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027207/

相关文章:

linux: 有什么工作是 "gprof"可以做而 "perf"不能做的吗?需要澄清

linux - 到达 fops 内部的 "write"和 "ioctl"

c - N<->1 线程模型如何工作?

c# - 有没有办法在机器上没有word的情况下动态生成word文档

ios - 当我使用 UIDocumentInteractionController 打开时,如何删除文档中的副本和定义?

c - 如何使用perf分析C项目代码?

linux - 在 modprobe.conf 中订购相同类型、相同产品 ID 和相同供应商 ID 的多张卡

linux - 如何理解Linux内核模块的 "Building Separate Files"?

cocoa - "com.apple"自定义文件格式的 UTI

Linux 性能 : is it possible to somehow ignore busy waiting threads?