【问题标题】:Why does perf_event_open record miss level when using PERF_SAMPLE_DATA_SRC?为什么使用 PERF_SAMPLE_DATA_SRC 时 perf_event_open 记录未命中级别?
【发布时间】:2021-08-18 15:44:15
【问题描述】:

我正在尝试收集有关从内存层次结构中检索与给定存储/加载关联的数据的位置的信息。

当使用perf 收集这些信息并使用perf script 提取它时,我发现我的许多样本都有类似以下的解码数据源信息:

L1 miss|SNP N/A|TLB L2 hit|LCK No
L3 miss|SNP N/A|TLB L1 or L2 hit|LCK No

但是,我对在给定的缓存级别(例如,L1 missL3 missmissed 的样本意味着什么感到困惑。它不应该在某处命中,并且不应该报告该命中吗?

我了解这些信息是由perf 通过perf_event_open 使用PERF_SAMPLE_DATA_SRC 收集的。

查看Linux kernel repo,发现如下commit message,说明这个理解是正确的:

This patch adds PERF_SAMPLE_DATA_SRC.

PERF_SAMPLE_DATA_SRC collects the data source, i.e., where
did the data associated with the sampled instruction
come from. ...

【问题讨论】:

    标签: caching x86 perf


    【解决方案1】:

    这是我挖出来的:

    1. Perf code for stringifying data source information.
    2. Perf struct for holding data source info(传递给字符串化函数的stored in another struct)。
    3. Code for getting the data source information for the x86 architecture.
    4. 此代码符合 Intel 64 和 IA-32 架构软件开发人员手册第 3B 卷(订单号:325384-073US)的“表 18-87. 内存访问信息组”中引用的表。 (特别是Memory Auxiliary Info的条目。)

    从英特尔手册和代码 cmets 可以清楚地看出,样本如何被标记为缓存未命中(即,有时,只知道样本是否在某个缓存级别丢失,但不知道它命中的位置) .话虽如此,尚不清楚为什么会发生这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 2021-01-22
      • 2013-12-09
      • 2016-09-19
      • 2020-07-26
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多