- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在对一些算法运行一些基准测试,并分析它们的内存使用情况和效率(L1/L2/TLB 访问和未命中),其中一些结果对我来说非常有趣。
考虑到包含缓存层次结构(L1 和 L2 缓存), 的数量不应该是L1 缓存未命中 与的数量一致L2缓存访问 ?我发现的一种解释与 TLB 相关:当虚拟地址未映射到 TLB 时,系统会自动跳过某些缓存级别中的搜索。
这看起来合法吗?
最佳答案
首先,包容性缓存层次结构可能并不像您想象的那么普遍。例如,我认为当前的任何英特尔处理器(不是 Nehalem,不是 Sandybridge,可能是 Atoms)都没有包含在 L2 中的 L1。 (不过,Nehalem 和 Sandybridge 也可能将 L1 和 L2 都包含在 L3 中;使用英特尔当前的术语,LLC 中的 FLC 和 MLC。)
但是,这并不一定重要。在大多数缓存层次结构中,如果您有一个 L1 缓存未命中,那么该未命中可能会在 L2 中查找。是否包容都没有关系。否则,您必须有一些东西告诉您您关心的数据(可能)不在 L2 中,您不需要查看。尽管我设计了执行此操作的协议(protocol)和内存类型 - 例如一种仅缓存在 L1 而不是 L2 的内存类型,对于图形之类的东西很有用,在这种情况下,您可以获得在 L1 中组合的好处,但是您要重复扫描大型阵列,因此在 L2 中缓存不是一个好主意.我目前不知道有人在运送它们。
无论如何,以下是 L1 缓存未命中数可能不等于 L2 缓存访问数的一些原因。
你没有说你在什么系统上工作——我知道我的答案适用于 Intel x86,比如 Nehalem 和 Sandybridge,它们的 EMON 性能事件监控允许你计算 L1 和 L2 缓存未命中等。它可能会也适用于任何具有缓存未命中硬件性能计数器的现代微处理器,例如 ARM 和 Power 上的那些。
大多数现代微处理器不会在第一次缓存未命中时停止,而是继续尝试做额外的工作。这通常被称为投机执行。此外,处理器可能是有序的或无序的,但尽管后者可能会给您带来更大的 L1 未命中次数和 L2 访问次数之间的差异,但这不是必需的 - 您甚至可以在-订单处理器。
简短回答:许多这些推测性内存访问将访问相同的内存位置。它们将被压扁和组合。
性能事件“L1 缓存未命中”可能是[*] 计算未命中 L1 缓存的(推测性)指令的数量。然后分配一个硬件数据结构,在英特尔称为填充缓冲区,在其他一些地方分配一个未命中状态处理寄存器。同一高速缓存线的后续高速缓存未命中将错过 L1 高速缓存但命中填充缓冲区,并将被压缩。只有其中一个,通常是第一个将被发送到 L2,并计为 L2 访问。)
顺便说一下,可能有一个性能事件:Squashed_Cache_Misses。
也可能有性能事件 L1_Cache_Misses_Retired。但这可能会低估,因为推测可能会将数据拉入缓存,而在退休时可能永远不会发生缓存未命中。
([*] 顺便说一句,当我在这里说“可能”时,我的意思是“在我帮助设计的机器上”。几乎可以肯定。我可能需要检查定义,查看 RTL,但如果没有。几乎可以保证。)
例如。假设您正在访问字节 A[0], A[1], A[2], ... A[63], A[64], ...
如果 A[0] 的地址等于 0 模 64,则 A[0]..A[63] 将在同一缓存线中,在具有 64 字节缓存线的机器上。如果使用这些的代码很简单,很可能所有这些都可以投机发布。 QED:64 次推测内存访问,64 次 L1 缓存未命中,但只有 1 次 L2 内存访问。
(顺便说一句,不要指望这些数字非常干净。每个 L2 访问您可能不会获得 64 次 L1 访问。)
还有一些可能性:
如果 L2 访问的次数大于 L1 缓存未命中的次数(我几乎从未见过,但有可能),您可能会遇到使硬件预取器混淆的内存访问模式。硬件预取器尝试预测您将需要哪些缓存行。 如果预取器预测得不好,它可能会获取您实际上并不需要的缓存行。 通常情况下,计算 Prefetches_from_L2 或 Prefetches_from_Memory 的性能会有所不同。
一些机器可能会在它们被发送到 L2 之前取消导致 L1 缓存未命中的推测访问。但是,我不知道英特尔这样做。
关于caching - 当 L1 未命中与 L2 访问有很大不同时……与 TLB 相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475118/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我卡在了一个点上,我无法进步,很抱歉这个愚蠢的问题。我为此进行了很多搜索,但我不知道我错过了什么。请帮助我。 我研究了 python 中的模块和类。现在我想使用 python 和 apt 进行一些操作
我在 Kong 有服务,我已经为该服务设置了代理缓存插件。 curl -X POST http://localhost:8001/plugins --data "name=proxy-cache"--
ASP.NET Core 提供内存缓存和响应缓存。 假设该应用程序是 ASP.NET Core WebAPI,它通过配置的响应缓存中间件将 SQL 数据库中的数据传送给用户。 在什么情况下也使用内存缓
我最近遇到了以下面试问题: You need to design a system to provide answers to factorials for between 1 and 100. Yo
我的 Javascript (JS) 代码遇到了一些麻烦,因为我有时需要在同一个函数中多次访问相同的 DOM 元素。还提供了一些推理here . 从性能的角度来看,是一次性创建一个 jQuery 对象
仅使用 Cache 终端,我使用或查看什么实用程序函数或 Global 来查找存在于 Cache 数据库中的所有 Globals 的列表? 再次仅在缓存终端中使用,我使用或查看什么实用程序功能或全局以
我的 Javascript (JS) 代码遇到了一些麻烦,因为有时我需要在同一个函数中多次访问同一个 DOM 元素。还提供了一些推理here . 从性能的角度来看,是先创建一个jQuery对象然后缓存
来自 RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1 no-cache If the no-cach
大多数 CDN 服务器对经常访问的内容使用缓存。 场景:假设有人上传了一张非常热门的图片,并且来自同一位置的许多用户 (1000) 试图访问该图片。 问题:假设网络服务器收到一个请求,首先检查它的缓存
我的 Javascript (JS) 代码遇到了一些麻烦,因为有时我需要在同一个函数中多次访问同一个 DOM 元素。还提供了一些推理here . 从性能的角度来看,是先创建一个jQuery对象然后缓存
如果我将服务器响应设置为:Cache-Control: private,no-cache,max-age=900 ? 如果标题是这样的,会发生什么:Cache-Control: public,no-c
我有一个类需要在缓存中存储数据。最初我在 ASP.NET 应用程序中使用它,所以我使用了 System.Web.Caching.Cache。 现在我需要在 Windows 服务中使用它。现在,据我了解
我遇到了和这个人一样的问题:X-Drupal-Cache for Drupal 7 website always hits MISS ,并且找不到出路。 我正在运行 Drupal 7 - 新闻流 和
我已将 Laravel 设置为使用 Redis 作为缓存。当我使用 Cache::('my_var', 'my_val'); 然后通过 CLI 检查 Redis 以查看 key 是否已创建时,我可以验
我在 Windows Azure 云上有一个应用程序,并且正在使用 Windows Azure 共置缓存。 有时,当我发布网站/web服务时,调用DataCacheFactory.GetCache方法
我正在阅读 documentation for Apollo server-side caching ,但看不到任何关于缓存通常如何加密的内容。 我需要的是一个以响应中包含的对象 ID 为键的缓存,而
Hibernate\Grails 中最好的缓存策略是什么?是否缓存所有实体和查询以及如何找到最佳解决方案? 这是我的 hibernate 配置。 hibernate { cache.use_sec
我收到错误 'Nuget.Proxy Cache' 的类型初始化器抛出异常 尝试连接到 Nuget 官方包源时。我在公司网络后面,但是我怀疑问题是连接性。 有任何想法吗? 最佳答案 我有同样的问题。我
我是一名优秀的程序员,十分优秀!