当前位置: 首页 > 面试题库 >

硬件缓存事件和性能

郭博涉
2023-03-14
问题内容

运行时,perf list我看到了一系列的 硬件缓存事件 ,如下所示:

$ perf list | grep 'cache event'
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]
  node-load-misses                                   [Hardware cache event]
  node-loads                                         [Hardware cache event]
  node-store-misses                                  [Hardware cache event]
  node-stores                                        [Hardware cache event]

这些事件似乎大多基于测试返回合理的值,但是我想知道如何确定将这些事件映射到系统上的硬件性能计数器事件?

也就是说,这些事件肯定是在Skylake CPU上使用一个或多个基础x86 PMU计数器实现的-但是我怎么知道哪个?

您可以查找/sys/devices/cpu/events其他硬件事件,但不能查找“硬件缓存事件”。


问题答案:

用户@Margaret指出注释中的合理答案-阅读内核源代码以查看PMU事件的映射。

我们可以检查arch / x86 / events / intel /
core.c
中的事件定义。我实际上不知道这里的“核心”是否指的是Core体系结构,就大多数定义而言,这是最合适的-
但无论如何,这就是您要查看的文件。

关键部分是此部分,它定义了skl_hw_cache_event_ids

static __initconst const u64 skl_hw_cache_event_ids
                [PERF_COUNT_HW_CACHE_MAX]
                [PERF_COUNT_HW_CACHE_OP_MAX]
                [PERF_COUNT_HW_CACHE_RESULT_MAX] =
{
 [ 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(OP_PREFETCH) ] = {
        [ C(RESULT_ACCESS) ] = 0x0,
        [ C(RESULT_MISS)   ] = 0x0,
    },
},
...

解码嵌套初始化,你得到的L1D-dcahe-load对应MEM_INST_RETIRED.ALL_LOADL1-dcache-load- missesL1D.REPLACEMENT

我们可以用perf仔细检查一下:

$ ocperf stat -e mem_inst_retired.all_loads,L1-dcache-loads,l1d.replacement,L1-dcache-load-misses,L1-dcache-loads,mem_load_retired.l1_hit head -c100M /dev/zero > /dev/null

 Performance counter stats for 'head -c100M /dev/zero':

        11,587,793      mem_inst_retired_all_loads                                   
        11,587,793      L1-dcache-loads                                             
            20,233      l1d_replacement                                             
            20,233      L1-dcache-load-misses     #    0.17% of all L1-dcache hits  
        11,587,793      L1-dcache-loads                                             
        11,495,053      mem_load_retired_l1_hit

       0.024322360 seconds time elapsed

“硬件缓存”事件显示的值与使用我们检查源时猜测的基础PMU事件的值完全相同。



 类似资料:
  • 问题内容: 我试图弄清楚为什么修改后的C程序比未修改的计数器部分运行得更快(我添加了很少的代码行来执行一些其他工作)。在这种情况下,我怀疑“ 缓存效果 ”是主要的解释(指令缓存)。因此,我到达了(https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但是不幸的是,我无法理解其有关缓存未命中的输出的含义。 提供了有关缓存的几个事件: 在哪里可以找

  • 问题内容: 我想在加载图像后创建一个警报框,但是如果将图像保存在浏览器缓存中,则不会触发该事件。 无论图像是否已缓存,如何在加载图像时触发警报? 问题答案: 动态生成图像时,请在之前设置属性。 在最新的Firefox和Chrome版本上进行了测试。 您还可以使用答案在这个岗位,我适合一次性动态生成的图像:

  • 事件 事件:用户与浏览器特定的交互瞬间。 内存和性能 事件处理程序为现代web浏览器提供了交互能力,但有时也不能一味地为页面添加事件处理程序,在JavaScript中,添加到页面中的事件处理程序的数量直接影响着页面整体的运行性能。添加到页面中的事件处理程序越多,那么所占用的内存也多,运行性能就会下降。而且事先指定事件处理程序面导致的DOM访问次数也会增多。对于如何利用好事件处理程序对页面运行性能的

  • 本文向大家介绍JavaScript 事件对内存和性能的影响,包括了JavaScript 事件对内存和性能的影响的使用技巧和注意事项,需要的朋友参考一下 虽说事件处理程序可以为现代 Web 页面添加很强的交互能力,但是不分青红皂白就添加大量的事件处理程序绝对是一种愚蠢的行为。 我们来分析一下:事件处理程序本质上是一种函数,是一种对象,存放在内存中,设置大量的事件处理程序会使内存中的对象变多,Web

  • 英文原文 译者前言 这一章节是我有史以来翻译质量的低谷,一来是我自己也是刚学,半懂不懂,二来本身语言基础各方面也薄弱,三来是笔记本坏掉了,搞个ChromeOS折腾中。 大家凑合看看,看不下去给指出来一下比较不好理解和绕的地方,以及错误的地方,我一定即时修改。 简要介绍 在Kivy开发过程中,事件是最重要的一部分了。如果之前有过GUI图形界面开发的经验的话,你可能对此习以为常了,但对新手来说,这个概

  • 按照一般app的设计,都是主应用,和用户目录下的缓存文件,把用户自定义的或使用生成的文件都放到缓存文件目录里。鉴于此,我们来找找code.app的缓存文件,或许能发现点有用的东西 可参照 https://code.visualstudio.com/docs/customization/userandworkspace 理解 缓存目录详情 目录是 /Users/sang/Library/Applic