【发布时间】:2016-02-14 03:03:00
【问题描述】:
我正在尝试使用自上而下的微架构分析方法 (TMAM) 分析英特尔 Haswell CPU(英特尔® 酷睿™ i7-4900MQ)上的执行情况,如 @ 的 B.1 和 B.4 章中所述987654321@。 (如果需要,我将 B.4 中描述的 Sandy Bridge 公式调整为 Haswell 微架构。)
因此,我使用 Perf 执行性能计数器事件测量。有一些结果我看不懂:
CPU_CLK_UNHALTED.THREAD_PCYCLE_ACTIVITY.CYCLES_LDM_PENDING
这仅适用于少数测量,但仍然很奇怪。 PMU 是否计算 CYCLE_ACTIVITY.CYCLES_LDM_PENDING 的暂停周期?
-
CYCLE_ACTIVITY.CYCLES_L2_PENDING>CYCLE_ACTIVITY.CYCLES_L1D_PENDING和CYCLE_ACTIVITY.STALLS_L2_PENDING>CYCLE_ACTIVITY.STALLS_L1D_PENDING
这适用于所有测量。当 L1D 缓存未命中时,负载会转移到 L2 缓存,对吗?所以之前的负载错过了 L2 也错过了 L1。这里没有计算 L1 指令高速缓存,但 *_L2_PENDING 比 *_L1D_PENDING 大 100 倍甚至 1000 倍,可能不是这样。是否以某种方式单独测量停顿/周期?但比有这个公式:
%L2_Bound =
(CYCLE_ACTIVITY.STALLS_L1D_PENDING - CYCLE_ACTIVITY.STALLS_L2_PENDING) / CLOCKS
因此CYCLE_ACTIVITY.STALLS_L2_PENDING CYCLE_ACTIVITY.STALLS_L1D_PENDING 被假定(公式的结果必须是正数)。 (这个公式的另一件事是它可能应该是CYCLES 而不是STALLS。但这并不能解决上述问题。)那么如何解释呢?
编辑:我的操作系统:Ubuntu 14.04.3 LTS,内核:3.13.0-65-generic x86_64,性能版本:3.13.11-ckt26
【问题讨论】:
-
您的操作系统和 perf 版本是什么?
-
操作系统:Ubuntu 14.04.3 LTS,性能版本:3.13.11-ckt26
-
您是否检查过您的 perf 版本是否与您的内核匹配?
-
我的内核版本是 3.13.0-65-generic x86_64。软件包 linux-tools-common(3.13.0-65.105, all) 和 linux-tools-3.13.0-65-generic(3.13.0-65.105, amd64) 安装在系统上。我想那么 perf 版本是否适合我的内核?或者如何检查我的 perf 版本是否正确?
-
尝试禁用超线程和/或预取,看看会发生什么。同时测量 TLB 未命中。
标签: intel performancecounter cpu-architecture cpu-cache perf