DRAM 访问的性能计数器

2024-03-21

我想找回DRAM 存取次数在我的应用程序中。准确地说,我需要区分数据和代码访问之间。该处理器是一个Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz (Haswell)。基于英特尔软件开发人员手册,第 3 卷 https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-system-programming-manual-325384.html and Perf, 我可以find and 分类下列内存访问相关 events:

(A)
LLC-load-misses                                    [Hardware cache event]
LLC-loads                                          [Hardware cache event]
LLC-store-misses                                   [Hardware cache event]
LLC-stores                                         [Hardware cache event]
=========================================================================
(B)
mem_load_uops_l3_miss_retired.local_dram          
mem_load_uops_retired.l3_miss  
=========================================================================
(C)
offcore_response.all_code_rd.l3_miss.any_response 
offcore_response.all_code_rd.l3_miss.local_dram   
offcore_response.all_data_rd.l3_miss.any_response 
offcore_response.all_data_rd.l3_miss.local_dram   
offcore_response.all_reads.l3_miss.any_response   
offcore_response.all_reads.l3_miss.local_dram     
offcore_response.all_requests.l3_miss.any_response
=========================================================================
(D)
offcore_response.all_rfo.l3_miss.any_response     
offcore_response.all_rfo.l3_miss.local_dram       
=========================================================================
(E)
offcore_response.demand_code_rd.l3_miss.any_response
offcore_response.demand_code_rd.l3_miss.local_dram
offcore_response.demand_data_rd.l3_miss.any_response
offcore_response.demand_data_rd.l3_miss.local_dram
offcore_response.demand_rfo.l3_miss.any_response  
offcore_response.demand_rfo.l3_miss.local_dram    
=========================================================================
(F)
offcore_response.pf_l2_code_rd.l3_miss.any_response
offcore_response.pf_l2_data_rd.l3_miss.any_response
offcore_response.pf_l2_rfo.l3_miss.any_response   
offcore_response.pf_l3_code_rd.l3_miss.any_response
offcore_response.pf_l3_data_rd.l3_miss.any_response
offcore_response.pf_l3_rfo.l3_miss.any_response

My choices如下面所述:

  • 看来总和是LLC-load-misses and LLC-store-misses将返回wholeDRAM 访问(相当于,我可以使用LLC-misses in Perf).
  • For 仅数据访问,我用过mem_load_uops_retired.l3_miss。 它不包括stores,但似乎是OK (because商店似乎 成为much 频率较低?!).
  • 简单来说,LLC-load-misses - mem_load_uops_retired.l3_miss = DRAM Accesses for Code(因为代码是只读).

这些是不是选择合理的?


我的其他问题:(第二个是最重要的)

  • 什么是local_dram and any_response?
  • 乍一看,似乎,组(C), is a 更高分辨率的版本load的事件组(A)。但我的测试表明,事件former组是更频繁latter。例如,在一个simple基准,数量offcore_response.all_reads.l3_miss.any_response事件是twice像......一样多LLC-load-misses.
  • E组, 属于demand reads(即所有non-prefetched读)。这是否意味着,例如:offcore_response.all_data_rd.l3_miss.any_response - offcore_response.demand_data_rd.l3_miss.any_response = 预取引起的 DRAM 读访问?

D组,包括由以下原因引起的 DRAM 访问事件Read for Ownership操作(对于Cache Coherency协议)。它似乎不相关的我的问题。

组(F),对由以下原因引起的 DRAM 读取进行计数L2-cache 预取器这也是不相关的我的问题。


根据我对问题的理解,我建议在指定处理器上使用以下两个事件:

  • OFFCORE_RESPONSE.ALL_READS.L3_MISS.LOCAL_DRAM:这包括所有可缓存数据读取和写入事务以及所有代码提取事务,无论该事务是由指令(退休与否)或预取或任何类型启动的。每个事件准确地代表对内存控制器的 64 字节读取请求。
  • OFFCORE_RESPONSE.ALL_CODE_RD.L3_MISS.LOCAL_DRAM:这包括对 IMC 的所有代码获取访问。

(我认为对于不可缓存的代码获取请求,这两个事件都不会发生,但我没有对此进行测试,并且文档对此并不清楚。)

通过从第一个事件中减去第二个事件,可以将“数据访问”与“代码访问”分开来测量。这两个事件可以在 Haswell 上的同一个逻辑核心上同时计数,无需复用。

当然,还有其他交易确实会进入 IMC,但不会被上述两个事件中的任何一个计算在内。其中包括:(1) L3 写回、(2) 来自内核的不可缓存的部分读取和写入、(3) 完全 WCB 逐出以及 (4) 来自 IO 设备的内存访问。根据工作负载,类型 (1)、(3) 和 (4) 的访问可能会占 IMC 总访问的很大一部分。

看来 LLC-load-misses 和 LLC-store-misses 的总和将 返回整个 DRAM 访问(相当于,我可以使用 LLC-misses 在性能中)。

请注意以下事项:

  • 事件LLC-load-misses is a perf映射到本机事件的事件OFFCORE_RESPONSE.DEMAND_DATA_RD.L3_MISS.ANY_RESPONSE.
  • 事件LLC-store-misses被映射到OFFCORE_RESPONSE.DEMAND_RFO.L3_MISS.ANY_RESPONSE.

这些不是您想要的事件,因为:

  • The ANY_RESPONSE位指示针对任何单元(而不仅仅是 IMC)的请求都可能发生该事件。
  • 这些事件对 L1 数据预取和页面遍历请求进行计数,但不对 L2 数据预取进行计数。您通常需要对消耗内存带宽的所有预取进行计数。

对于仅数据访问,我使用了 mem_load_uops_retired.l3_miss。确实如此 不包括商店,但似乎还可以(因为商店似乎很多 频率较低?!)。

使用过程中存在很多问题mem_load_uops_retired.l3_miss哈斯韦尔:

  • 在某些情况下,此事件不可靠,因此如果有替代方案,则应避免使用此事件。否则,分析方法应考虑此事件计数的潜在不可靠性。
  • 该事件仅针对来自退役负载的请求而发生,并且忽略推测负载和所有存储,这可能很重要。
  • 以有意义的方式对这个事件和其他事件进行算术并不容易。例如,您建议做“LLC-load-misses - mem_load_uops_retired.l3_miss= 代码的 DRAM 访问”不正确。

local_dram 和any_response 是什么?

并非所有在 L3 中丢失的请求都会发送至 IMC。一个典型的例子是内存映射的 IO 请求。您说过您只想要发送至 IMC 的核心发起请求,所以local_dram是正确的位。

乍一看,组(C)似乎是更高分辨率的版本 (A)组的负载事件。但我的测试表明,事件 前一组比后一组出现的频率要高得多。例如,在一个 简单的基准,数量 offcore_response.all_reads.l3_miss.any_response 事件是 许多是 LLC 负载未命中。

这是正常的,因为offcore_response.all_reads.l3_miss.any_response包含LLC-load-misses并且可以很容易地变得更大。

组 (E) 属于按需读取(即所有非预取读取)。 这是否意味着,例如: offcore_response.all_data_rd.l3_miss.any_response - offcore_response.demand_data_rd.l3_miss.any_response = DRAM 读取 预取导致的访问?

没有为什么:

  • the any_response如上所述,
  • 此减法仅导致 L2 数据加载预取,而不是所有数据加载硬件和软件预取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DRAM 访问的性能计数器 的相关文章

  • 写组合缓冲区位于哪里? x86

    Write Combine 缓冲区在物理上是如何连接的 我见过说明许多变体的框图 L1 和内存控制器之间 CPU 的存储缓冲区和内存控制器之间 CPU 的 AGU 和 或存储单元之间 它依赖于微架构吗 写缓冲区在不同的处理器中可以有不同的目
  • X-RequestDigest:运行共享点页面记录的 Web 测试时出现错误

    我已成功记录并重播我的 sharepoint webtest 但一两周后 当我在 Visual Studio 中重播它时 我收到 403 FORBIDDEN 错误 我了解 X RequestDigest 的证书 令牌详细信息已过期 需要在我
  • 测量 x86-64 中的 TLB 未命中处理成本

    我想估计运行 Linux 的 x86 64 Intel Nehalem 计算机上由于 TLB 未命中而导致的性能开销 我希望通过使用一些性能计数器来获得这个估计 有人知道估计这个的最佳方法是什么吗 谢谢 阿尔卡 如果您可以访问基于 West
  • 线程的cpu使用率

    如何在c 中获取 net中线程的cpu使用率 Check 如何获取Windows上每个线程的CPU使用率 win32 https stackoverflow com questions 1393006 how to get the cpu
  • 如何在 Gattle 中注入恒定数量的用户?

    我不清楚如何控制加特林中的封闭工作负载模型 如果我使用constantConcurrentUsers 像这样 myScenario inject constantConcurrentUsers 40 during 2 minutes 我认为
  • 使用 rdmsr/rdpmc 提高分支预测精度

    我试图了解分支预测单元在 CPU 中如何工作 我用过papi还有linux的perf events但他们都没有给出准确的结果 对于我的情况 这是我的代码 void func int arr int sequence len for int
  • 计算 Amd Zen 2 处理器上的 L3 缓存访问事件

    我试图找出与 perf stat 命令一起使用的事件来计算 AMD Zen 2 处理器上的 L3 缓存访问次数 根据 PPR http developer amd com wordpress media 2017 11 54945 PPR
  • 在 Core i7 Mac 上禁用睿频加速?

    有没有什么方法可以在运行 Mac OS X 的 Core i7 mac 上以编程方式禁用 Turbo Boost 我需要能够在代码优化等过程中出于基准测试目的执行此操作 如果做不到这一点 任何可以禁用 启用 Turbo Boost 的实用程
  • 安装apk时INSTALL_FAILED_NO_MATCHING_ABIS

    我尝试将我的应用程序安装到 Android L Preview Intel Atom 虚拟设备中 但失败并出现错误 INSTALL FAILED NO MATCHING ABIS 这是什么意思 INSTALL FAILED NO MATCH
  • 没有 lodctr 的 C++ 性能计数器

    我有点习惯 C 应用程序创建性能计数器的方式 只需实例化新的PerformanceCounter对象 并使用它 我现在被迫使用非托管 C C 并且我对 API 和提供的示例的易用性感到非常不满意 我的主要痛苦是需要使用 lodctr 加载清
  • 为什么我的性能计数器不会改变?

    我一定在这里做错了什么 我创建了一个自定义性能计数器 如下所示 string counterCategory Test Category string counterName Test Counter if PerformanceCount
  • PhantomJS CPU(核心)受限吗?

    我开始做一些基于并行浏览器的测试 并想看看在达到 100 CPU 之前我可以在 EC2 大型机器上并行运行多少个浏览器 我正在使用 JMeter webdriver 插件来实际运行浏览器 对于 FireFox 实际上每个 CPU 核心有 1
  • 性能计数器的性能影响是什么

    当考虑使用性能计数器作为我公司的基于 NET 的站点时 我想知道使用它们的开销有多大 我是否想让我的网站不断更新其计数器 或者我最好只在测量时更新 设置性能计数器的开销通常不够高 无需担心 设置共享内存区域和一些 NET 对象 以及 CLR
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 分布式模式下的 JMeter 摘要报告

    我正在分布式模式 2个从站 主站 下运行Jmeter性能测试 在我的测试脚本中我配置了摘要 报告应将一些数据保存到 csv 文件 此文件位置配置有固定名称 reports summary csv 值 当我从主站成功连接到两个从站时 测试在从
  • 具有独特矩阵转置问题的 2D 分块

    我有类型的复杂值数据struct complex double real 0 0 double imag 0 0 以 3 阶张量的形式组织 底层容器具有与内存页边界对齐的连续内存布局 The natural slicing directio
  • 如何使用JMeter对网站进行负载测试

    我想在 JMeter 中创建一个脚本来模拟100 位用户在 3 4 分钟内访问我们的网站 我们需要测试我们的应用程序是否可以允许 25 000 个用户 天 即每小时 1 100 个用户 为此我做了这个 Jmeter 测试 这是结果 这是图表
  • 性能统计与性能记录

    我对之间的区别感到困惑perf record and perf stat当涉及到对页面错误 缓存未命中以及其他任何事件进行计数时perf list 我在下面有两个问题 问题 1 的答案可能也有助于回答 问题 2 但我明确地写出了它们 以防它
  • 返回地址预测堆栈缓冲区与堆栈存储的返回地址?

    一直在阅读 Agner Fog 的 Intel AMD 和 VIA CPU 的微架构 他在第 34 页描述了 返回地址预测 http www agner org optimize microarchitecture pdf http www

随机推荐

  • 滚动到 div 中的某个元素

    我有一个绝对定位的 div 它充当页面中心的模式窗口 模式窗口可垂直滚动 右侧有一个滚动条 页面本身也可以垂直滚动 右侧有一个滚动条 我希望能够单击链接并使模式窗口滚动到链接的项目 我几乎可以使用 target scrollIntoView
  • 检查后在 Gradle 插件中运行任务

    我在 Groovy 下编写了一个 Gradle 插件buildSrc as package test import org gradle api Plugin import org gradle api Project class Samp
  • Java 精确计算 - 使用选项

    我试图对 JAVA SQL 中精确计算的选项进行一些简洁的概述 到目前为止 我找到了以下选项 使用双打 接受他们的缺点 不行 use BigDecimals 在复杂的公式中使用它们对我来说是有问题的 use String format De
  • 将函数应用于列表中所有数据帧的某些列,然后为列赋值

    类似问题已回答here https stackoverflow com questions 22002838 same function over multiple data frames in r 我有一个数据框列表 即 1000 如下所
  • 增强 qi::rule 上的精神语义动作

    我一直在阅读语义动作 我有一个如下所示的规则 property rule identifier rule gt gt lit L gt gt type specification rule gt gt lit L gt gt alnum g
  • Emacs:如何将杀戮环从系统剪贴板中分离出来?

    默认情况下 Emacs 23 x 似乎会将被删除的内容复制到删除环和系统剪贴板 是否可以将杀戮环和剪贴板分开 例如 ctrl k 将内容放入终止环 cmd x 将内容放入系统剪贴板并保留终止环 这在中讨论过这个线程 http lists g
  • 如何在每个测试方法之前和之后执行sql脚本

    有一个 Sqlspring中的注释允许执行sql测试方法前后的代码 Test Sql init sql Sql scripts clean sql executionPhase Sql ExecutionPhase AFTER TEST M
  • 与 Kotlin 泛型的混淆

    我是 Kotlin 的新手 我正在尝试编写一些相当简单的代码 但是我不知道如何使用泛型来使其工作 我有一个Handler代表事物处理程序的特征 我无法更改处理程序的代码 因为它来自库 trait Handler
  • 当我构建多个 ProductFlavors 时,使用 Facebook SDK INSTALL_FAILED_CONFLICTING_PROVIDER

    我正在构建一个包含多个 Android 应用程序productFlavors 并使用Facebook SDK v4 1进行登录和分享内容 问题是 当我尝试在已安装相同应用程序 但风格不同 的设备上安装应用程序时 会引发错误 它不允许我安装第
  • 如何向 Quill.js 添加新格式(
    标签)?

    我想添加一个按钮来添加 hr 标记到quill js 测试版 http beta quilljs com docs quickstart editor 这里的fiddle https jsfiddle net Lgxkj4ag div sp
  • 如何多次发送文件

    有两个 C 项目 一个项目用于客户端 另一个项目用于服务器 第一步是运行服务器 然后选择一个目标文件夹 然后运行客户端项目 选择一些text txt发送到服务器的目标文件夹 只有客户端可以向服务器发送文件 Demo 1 choosing f
  • 为什么有些资源文件放在META-INF目录下

    我想知道为什么有些资源文件放在JAR中的META INF目录下 我总是将像 test properties 这样的资源放在根目录下 将它们放入 META INF 有什么好处吗 许多 Java EE API 都有一个约定 即当您将特定的配置
  • iText,Font、BaseFont 和 createFont() 发生了什么?

    关于 font 和 basefont 的情况对我来说有很多谜团 尤其是当涉及到构造函数时 iText 网站提供了这一行作为新字体的示例代码 BaseFont unicode BaseFont createFont c windows fon
  • Rails 4 - 如何使用枚举?

    我正在尝试在 Rails 4 上制作一个应用程序 我发布了这个问题并得到了一些建议 Rails 4 Simple Form 如何保存键和显示值 https stackoverflow com questions 36539924 rails
  • 如何使用 OpenCV 交换图像中的蓝色和红色通道

    我在交换图像的通道 特别是红色和蓝色 时遇到了一些问题 我正在使用 Opencv 3 0 0 和 Python 2 7 12 以下是我交换频道的代码 import cv2 img cv2 imread input car1 jpg The
  • 逗号运算符重置此

    在下面code https www typescriptlang org play src var 20x 20 3D 20 7B 20f 3A 20function 20 20 7B 20return 20this 20 3D 3D 3D
  • 将图像缩略图添加到网格布局中?

    我有一个图像列表 我需要将小缩略图添加到框架中 我目前有框架SpringLayout 如何使用滚动窗格在某些网格中添加缩略图 如时尚 照片列表可能很大 所以我需要一个滚动窗格 我不知道如何处理这个问题SpringLayout 我知道如何添加
  • 如何在Python中将pptx导出为图像(png、jpeg)?

    我用 Python 开发了一段小代码来生成 PPTX 文件 但我还想生成一张 PNG 或 JPEG 格式的幻灯片图片 from pptx import Presentation from pptx util import Inches im
  • 为 Blazor WASM 保存时重新编译 .razor 文件

    有没有办法让 Blazor WebAssembly 重新编译 razor文件更改 更新然后保存时 我已经习惯了这种情况在传统的 ASP NET Core MVC razor 视图以及客户端框架 如 Angular 中发生 在 ASP NET
  • DRAM 访问的性能计数器

    我想找回DRAM 存取次数在我的应用程序中 准确地说 我需要区分数据和代码访问之间 该处理器是一个Intel R Core TM i7 4720HQ CPU 2 60GHz Haswell 基于英特尔软件开发人员手册 第 3 卷 https