我正在寻找一个 Linux 实用程序,它允许在我的程序中分析缓存驱逐。
具体来说,我有兴趣找出导致某些缓存行反复从 L2 缓存中逐出的原因。
有什么建议?
最佳答案
您有多种选择,其中一些是免费的。下面我将主要讨论分析 L2 未命中,不一定是 L2 驱逐,因为它们或多或少是相同的。线路被逐出 L2,因为正在引入另一条线路,而另一条线路通常由于 L2 未命中而被引入。
缓存研磨
首先,我会尝试 cachegrind .这基本上是在一种轻量级虚拟机下运行你的二进制文件,它允许它拦截所有内存访问,然后模拟它们对缓存的影响。它可以准确指出缓存未命中发生的位置、谁负责驱逐等。
请务必注意,cachegrind 实际上并没有告诉您硬件缓存发生了什么,而是告诉您在其缓存模型中发生了什么。由于 L1 和 L2 在 Intel x86 上足够简单,因此除非在异常情况下,cachegrind 模型应该是准确的。
Cachegrind 只能模拟两个缓存级别,但现代英特尔有 3 级或有时是 4 级。不过,如果您尝试评估 L2 未命中,这应该不是问题。默认情况下,cachegrind 将 L1 缓存设置为本地 L1 缓存的检测值,并将 LLC 设置为 LLC 的检测值。在您的情况下,您需要覆盖后一个决定以反射(reflect) L2 缓存,而不是 LLC。您可以找到 details in the manual ,但这对于最近的 Intel Broadwell 和更早版本应该是正确的:
--LL=262144,8,64
对于 Skylake 客户/Kaby Lake 和您想要的 friend :--LL=262144,4,64
对于 Skylake-X 服务器,您需要查找新值,因为 L2 已更改。perf .perf record结合 perf report或 perf annotate以确定您的程序中发生未命中的位置。你可以从这样的事情开始:perf record -e mem_load_retired.l2_miss <your process>
这会定期记录 L2 未命中出现的位置。您可以使用 perf report 显示结果它可以让您以交互方式探索结果。还有很多其他选项,例如 --call-graph记录可能有用的完整调用图。perf record始终接近代码中发生某些事情的位置,但它无法帮助您确定发生未命中时正在访问的内存。这通常无关紧要:代码中的位置通常使正在访问的内存变得非常明显。然而,有时情况并非如此:您有一些可能访问大片内存区域的代码,并且您想知道地址以找出发生未命中的原因。perf mem ,它在代码中记录了未命中的位置和未命中的地址。这个工具不像其他工具那么完善,但源至少是可用的,所以你总是可以做一些改进。我详细介绍了这个选项 in another answer .perf 相同的底层性能计数器,但使用基于 GUI 的探索,可能比 perf 更容易跳入。 .它需要更多的自上而下的方法:告诉您问题在哪里并允许您向下钻取,而 perf更多关于“这是原始数据,找出问题所在”。perf 更容易使用但这仍然不是很容易,并且有很多魔法在发生,所以如果出现问题,可能很难调试。cachegrind将无法帮助您,但是 perf can:您可以将输入/替换的 L2 行数与 L2 未命中数进行比较,看看它们是否接近。如果不是,您将不得不使用其他计数器来查看预取是否是原因。
关于linux - 分析缓存驱逐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242919/
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot
目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
一、机器人介绍 此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好
文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分
如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack
我在LinuxMint17.2上。我最近使用apt-getpurgeruby删除了ruby。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,