如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中

     2023-02-22     289

关键词:

【中文标题】如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中【英文标题】:How to catch the L3-cache hits and misses by perf tool in Linux 【发布时间】:2013-08-11 13:20:58 【问题描述】:

有什么方法可以通过 Linux 中的 perf 工具捕获 L3 缓存命中和未命中。根据perf list cache的输出,支持L1和LLC缓存。根据perf源码中perf_evsel__hw_cache数组的定义:

const char *perf_evsel__hw_cache[PERF_COUNT_HW_CACHE_MAX]
                                [PERF_EVSEL__MAX_ALIASES] = 
  "L1-dcache", "l1-d",         "l1d",          "L1-data",              ,
  "L1-icache", "l1-i",         "l1i",          "L1-instruction",       ,
  "LLC",       "L2",                                                   ,
  "dTLB",      "d-tlb",        "Data-TLB",                             ,
  "iTLB",      "i-tlb",        "Instruction-TLB",                      ,
  "branch",    "branches",     "bpu",          "btb",          "bpc",  ,
  "node",                                                              ,
;

LLC 是 L2-cache 的别名。我的问题是如何通过 Linux 中的 perf 工具捕获 L3 缓存命中和未命中。提前致谢!

【问题讨论】:

你的 CPU 是多少?较新版本的 perf 和 linux 内核可能支持某些 CPU 上的 L3 缓存事件。您确定“LLC”是 L2 的别名而不是 L3 的别名(真正的含义可能在 perf 代码的内核部分中定义)? 【参考方案1】:

如果硬件有 L3 缓存,那就奇怪 LLC(Last Level Cache)配置为“L2”。但我还不知道 perf 的内部结构,也许这些设置是通用的。

我认为您唯一的解决方案是使用“原始硬件事件”(参见“性能列表”末尾,以“rNNN”开头的行)。这提供了对硬件寄存器的描述进行编码的机会。

perf 用户指南和教程仅提及“要测量硬件供应商文档提供的实际 PMU,请传递十六进制参数代码”。我不知道 Intel 的语法是什么,以及此架构上是否有不同的性能监视器实现。你可以从这里开始:

http://code.google.com/p/kernel/wiki/PerfUserGuide#Hardware_events

【讨论】:

页面 bnikolic.co.uk/blog/hpc-prof-events.html 建议在 libpfm4 (perfmon2) 实用程序 showevtinfocheck_events 的帮助下搜索和使用原始性能事件【参考方案2】:

我在使用原始事件计数器方面取得了更大的成功,直接查看英特尔软件开发人员手册了解详细定义。

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

来自部分: 18.2.1.2 预定义的架构性能事件

r412e "LLC Misses" 可能是您想要的

perf stat -e r412e <command>

(请注意,对我来说,这给出的数字与使用 -e cache-misses 的数字相同。)

【讨论】:

要获得系统范围的 L3 缓存未命中率,只需执行以下操作:sudo perf stat -a -e LLC-loads -e LLC-load-misses -e LLC-stores -e LLC-store-misses -e LLC-prefetch-misses,它会打印出未命中和总引用。该比率是 L3 缓存未命中率。【参考方案3】:

要获得系统范围的 L3 缓存未命中率,只需执行以下操作:

$ sudo perf stat -a -e LLC-loads,LLC-load-misses,LLC-stores,LLC-store-misses,LLC-prefetch-misses sleep 5


Performance counter stats for 'system wide':

    24,477,266,369      LLC-loads                                                     (22.65%)
     1,409,470,007      LLC-load-misses           #    5.76% of all LL-cache hits     (29.79%)
        88,584,705      LLC-stores                                                    (30.32%)
        10,545,277      LLC-store-misses                                              (30.03%)
       150,785,745      LLC-prefetch-misses                                           (34.71%)

      13.773144159 seconds time elapsed

这会打印出未命中数和总引用数。该比率是 L3 缓存未命中率。

在 wiki 上查看完整的事件列表:https://perf.wiki.kernel.org/index.php/Tutorial#Events

【讨论】:

请问什么是 LLC-prefetch-misses 以及如何使用它们来计算 L3 缓存未命中率?到目前为止,我的计算很简单(LLC-load-misses+LLC-store-misses)/(LLC-loads+LLC-stores)

如何使用 linux perf 工具进行代码理解

】如何使用linuxperf工具进行代码理解【英文标题】:Howtouselinuxperftoolforcodecomprehension【发布时间】:2015-08-0716:50:17【问题描述】:我对“perf”记录调用图的能力着迷,并试图了解如何使用它来理解新的代码库。我在调试模式下编... 查看详情

如何在 LINUX 中通过 CRONTAB 调度脚本 [重复]

】如何在LINUX中通过CRONTAB调度脚本[重复]【英文标题】:HowtoschedulescriptthroughCRONJOBinLINUX[duplicate]【发布时间】:2014-08-0916:15:31【问题描述】:我创建了一个脚本来解析我已经存在的文件。我想在其中应用cronjob,我想在每分钟后自... 查看详情

捕获文件在 C# 中通过蓝牙发送

】捕获文件在C#中通过蓝牙发送【英文标题】:CapturefilessendoverbluetoothinC#【发布时间】:2018-12-0316:23:24【问题描述】:我正在创建一个WPF应用程序,用于通过蓝牙发送和接收文件。我正在使用32feet库。我可以使用ObexObjectPush蓝牙... 查看详情

analyselinuxkernelbyusingperf(代码片段)

...:枚举perf支持的所有的事件,可以在各种perf命令中通过-e选项选择对应的事件。[root@VM-centos~]#perflistListofpre-definedevents(tobeusedin-e):alignment-faults[Softwareevent]bpf-output[Softwareevent]context-switchesORcs[Softwareevent]cpu-clock[Soft 查看详情

analyselinuxkernelbyusingperf(代码片段)

...:枚举perf支持的所有的事件,可以在各种perf命令中通过-e选项选择对应的事件。[root@VM-centos~]#perflistListofpre-definedevents(tobeusedin-e):alignment-faults[Softwareevent]bpf-output[Softwareevent]context-switchesORcs[Softwareevent]cpu-clock[Soft 查看详情

如何在linux中通过命令查看域名对应的ip

...也可以在Linux系统中通过命令进行查询。本教程主要讲解如何在Linux系统中通过命令查看域名对应的IP地址,主要讲解以下5个命令:dig命令它是一个功能强大且灵活的命令行工具,用于查询DNS名称服务器。它执行DNS查询,并显示... 查看详情

如何在 Linux tclsh 中通过光标键获取命令历史记录

】如何在Linuxtclsh中通过光标键获取命令历史记录【英文标题】:HowtogetCommandhistorybycursorkeyinLinuxtclsh【发布时间】:2011-03-0318:16:51【问题描述】:可以在TCLshell(tclsh)中使用光标键(如向上箭头键)获取命令历史记录。我正在使用li... 查看详情

如何在 Turbo C/C++ 中通过引用传递字符串

】如何在TurboC/C++中通过引用传递字符串【英文标题】:HowtopassastringbyrefrenceinTurboC/C++【发布时间】:2013-10-1313:39:24【问题描述】:[我正在使用以下代码voidfix_filename(char[],char[],int);intmain()inti;chark,l[100];cin>>i;fix_filename(l,"books",i)... 查看详情

我可以使用 MediaRecorder 在 Android 中通过捕获静音检测来录制音频吗?

】我可以使用MediaRecorder在Android中通过捕获静音检测来录制音频吗?【英文标题】:CanIuseMediaRecordertorecordaudiowithcapturesilencedetectioninAndroid?【发布时间】:2021-01-2801:25:22【问题描述】:我使用MediaRecorder录制音频,是否可以在用户... 查看详情

如何在 Linux 中通过 C/C++ 以另一个用户身份创建文件?

】如何在Linux中通过C/C++以另一个用户身份创建文件?【英文标题】:HowtocreatefileasanotheruserviaC/C++inLinux?【发布时间】:2019-12-2113:01:48【问题描述】:LinuxC/C++有open或fopenAPI,但创建的文件属于进程uid。如果我们想改变这个文件的... 查看详情

g++ 不允许在 lambda 中通过引用对 const 对象进行广义捕获?

】g++不允许在lambda中通过引用对const对象进行广义捕获?【英文标题】:g++won\'tallowgeneralizedcaptureofconstobjectbyreferenceinlambda?【发布时间】:2015-11-0208:23:54【问题描述】:这被g++(4.9.3和5.2.0)拒绝,但被clang3.5.0接受:intmain()constintc... 查看详情

perf--linux下的系统性能调优工具,第1部分

...orks/cn/linux/l-cn-perf1/Perf简介Perf是用来进行软件性能分析的工具。通过它,应用程序可以利用PMU,tracepoint和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题(perthread),也可以用来分析内核的性能问题... 查看详情

linux 的 perf 实用程序如何理解堆栈跟踪?

】linux的perf实用程序如何理解堆栈跟踪?【英文标题】:Howdoeslinux\'sperfutilityunderstandstacktraces?【发布时间】:2016-07-0901:43:42【问题描述】:Linux的perf实用程序被BrendanGregg用于为c/c++、jvm代码、nodejs代码等生成火焰图。Linux内核本... 查看详情

linux系统性能监控分析工具perf(代码片段)

文章目录一、perf工具下载1.在centos7下离线安装2.安装flex3.安装bison二、设置环境变量三、用MobaXterm在linux和windows之间上传/下载文件1.连接服务器2.上传文件3.下载四、perf原理1.perf的使用2.perf简单介绍3.常用命令格式1.perflist2.perftop3.... 查看详情

perf使用

参考:  官网  http://www.brendangregg.com/perf.html  IBM  Perf--Linux下的系统性能调优工具,第1部分  https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/perflist–  查看详情

如何在 mac osx 中通过 ant 脚本杀死节点服务器

】如何在macosx中通过ant脚本杀死节点服务器【英文标题】:howtokillanodeserverviaantscriptinmacosx【发布时间】:2014-08-0308:10:51【问题描述】:在windows中我们可以使用<targetname="stopnode"description="Stopsallinstancesofnode"><execexecutable="taskk... 查看详情

Linux perf 工具运行问题

】Linuxperf工具运行问题【英文标题】:Linuxperftoolrunissues【发布时间】:2017-07-2523:20:42【问题描述】:我正在使用perf工具对我的一个项目进行基准测试。我面临的问题是我在我的机器上运行perf工具会自动运行,一切正常。但是,... 查看详情

如何在 Python 中通过 HTTP 提供来自 UDP 流的数据?

】如何在Python中通过HTTP提供来自UDP流的数据?【英文标题】:HowtoservedatafromUDPstreamoverHTTPinPython?【发布时间】:2011-04-1515:28:25【问题描述】:我目前正致力于通过网络公开遗留系统中的数据。我有一个(旧版)服务器应用程序,... 查看详情