当前位置: 首页 > 知识库问答 >
问题:

缓存关联性如何影响性能[复制]

鄢子平
2023-03-14

我正在阅读Andrey Akinshin的“Pro.NET基准测试”,有一件事让我困惑(第536页)--解释缓存关联性如何影响性能。在一个测试中,作者使用了ints的3个方阵1023x1023、1024x1024、1025x1025,并观察到对于1024x1024情况下访问第一列的速度较慢。

作者解释(背景信息,CPU是Intel,有32KB内存的L1缓存,是8路联想):

当n=1024时,这个差值正好是4096字节;它等于临界步幅值。这意味着来自第一列的所有元素都匹配L1的相同的八个缓存行。我们并没有真正从缓存中获得性能优势,因为我们不能有效地使用它:我们只有512字节(8个缓存行*64字节缓存行大小),而不是原来的32千字节。当我们在循环中迭代第一列时,相应的元素会从缓存中相互弹出。当n=1023和n=1025时,我们不再有临界步幅的问题:所有元素都可以保存在缓存中,这样效率更高。

因此我的问题是,这里性能问题的真正本质是什么。cache的可访问内存较小,或者整个cache可用,但CPU在解决映射冲突上花费了更多的时间。还是另有原因?

共有1个答案

红砚文
2023-03-14

缓存是介于另外两层之间的一层。在您的例子中,在CPU和RAM之间。在最好的情况下,CPU很少需要等待从RAM中取出一些东西。在最坏的情况下,CPU通常不得不等待。

1024示例遇到了一个糟糕的情况。对于整个列,从RAM请求的所有字都放在高速缓存中的同一个单元中(如果使用双向关联高速缓存,则放在相同的2个单元中)。

同时,CPU并不关心--它向缓存请求内存中的一个字;缓存要么有它(快速访问),要么需要进入RAM(慢速访问)才能获得它。而RAM并不关心--它响应请求,无论请求何时到来。

当它上面的进程(CPU)在某个项被需要空间的其他项冲出缓存之前多次获取该项(字)时,缓存就很有用。

注意:这里说的是CPU->RAM缓存,而不是磁盘控制器缓存、数据库缓存、web站点页面缓存等;他们使用更复杂的算法(通常是散列),而不是“从地址中挑选几个位”。

回到你的问题上...

    null
 类似资料:
  • 问题内容: 我正在对ElasticSearch的单节点集群进行一些基准测试。 我面对这样的情况,更多的分片将至少在单个节点中降低索引性能(延迟和吞吐量) 这些是我的一些数字: 使用1个分片进行索引,每分钟索引+ 6K文档 索引5个分片,每分钟索引+ 3K文档 索引20个分片,每分钟索引+ 1K文档 使用批量API的结果相同。所以我想知道这是什么关系,为什么会这样呢? 注意:我没有资源问题!资源是免

  • 问题内容: 我有这个JavaWeb应用程序,它可以从电子表格上传成千上万的数据,该电子表格是从上到下按行读取的。我用来在服务器端显示应用程序当前正在读取的行。 -我知道要创建一个日志文件。实际上,我正在创建一个日志文件,同时在服务器提示符下显示日志。 还有其他方法可以在提示上打印当前数据? 问题答案: 它可能会影响您的应用程序性能。大小会因您所运行的硬件类型和主机上的负载而异。 可以将其转化为性能

  • 问题内容: 我们已经开始将spring aop用于我们应用程序的各个方面(当前的安全性和缓存)。 我的经理虽然十分了解这种技术的好处,但仍担心该技术对性能的影响。 我的问题是,你是否遇到了使用aop(特别是spring aop)引入的性能问题? 问题答案: 只要你能够控制自己的AOP,我就认为它是有效的。无论如何,我们确实确实存在性能问题,所以通过我们自己的推理,我们无法完全控制;)这主要是因为重

  • 我一直在使用SpringIntegration调用RESTAPI,但是SpringIntegration默认附带的http客户端不支持连接池或可重用性,因此我定制了使用PoolighttpClientConnectionManager 但是现在Spring集成停止在我的类路径中拾取JKS文件,所以我构建了自己的SSL上下文,但是构建这个SSL上下文导致了性能的显著下降 对于100个并发线程, 使用

  • 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗。 本文主要介绍 https 对用户体验的影响。 HTTPS 对访问速度的影响 在介绍速度优化策略之前,先来看下 HTTPS 对速度有什么影响。影响主要来自两方面: 协议交互所增加的网络 RTT(round trip time)。 加解密相关的计算耗时。

  • 我必须使用StackExhange.redis C#在redis缓存中频繁添加N个(独立的)项,每个项都有不同的过期时间,以便在客户端有最小的时间,在服务器端有最小的阻塞和成本。Redis服务器每秒将收到数百个get请求,所以我不想打乱get时间。 我已经阅读了这里的文档并在这里回答。我找不到一个执行此操作的方法。考虑到不同的选择: null

  • ES 内针对不同阶段,设计有不同的缓存。以此提升数据检索时的响应性能。主要包括节点层面的 filter cache 和分片层面的 request cache。下面分别讲述。 filter cache ES 的 query DSL 在 2.0 版本之前分为 query 和 filter 两种,很多检索语法,是同时存在 query 和 filter 里的。比如最常用的 term、prefix、rang

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