首页 > 其他分享 >缓存命中

缓存命中

时间:2024-03-23 11:33:20浏览次数:25  
标签:缓存 L3 命中 数据 CPU 加载

记录我了解的一点点关于缓存命中的知识。
链接: 参考文章链接,大佬的文章,偏底层,我是小白读不懂
链接: 我的博客

内存分布和多级缓存

我们了解最清楚的计算机的储存设备就是硬盘了,那么硬盘和平时所说的CPU之间有什么关系呢?如下图所示,计算机拥有层次分明的储存和运算结构。
image.png
在图中所示的金字塔结构中,越往上的硬件存取数据的速度和计算的速度越快,但是所需要付出的代价也越大。CPU,123级高速缓存和主存,虽然运算速度极快,但是只能在通电的时候使用,当失去电源时,这几个缓存中的数据就会被清空,我们在关机时,未关闭的程序会提示保存就是这个原因,如果不将缓存中的数据保存到磁盘中,断电后这些数据就会消失,再也找不到了。往下的本地二级储存(磁盘)和远程储存服务(比如将文件保存在某个网盘上),即使计算机没有通电也能够保存数据,保存在磁盘上的数据,理论上磁盘不坏,就能将之读取出来。
计算机的三级缓存结构,如图计算机拥有3个高速缓存,老式的CPU可能只有2个。在计算机计算过程中,每一级的储存器都只保存从下一级取出的数据,也就是说,当我们进行某个计算的时候,主存首先去本地磁盘里把需要的数据取出来,如果需要更快的算力,高速缓存L3就会去主存里取数据进行计算,当需要比L3更高的算力时,L2就会去L3里面取出数据进行计算,而作为最高级的寄存器,处理的都是高速运算。
虽然等级越高的硬件运算速度越快,但是容积也越小,成本也越高,L1/L2的大小基本上也就是KB级别的,L3会是MB级别的。例如:Intel Core i7-8700K ,是一个6核的CPU,每核上的L1是64KB(数据和指令各32KB),L2 是 256K,L3有2MB。

缓存命中

由于一些硬件上的原因,上级硬件从下级硬件中加载数据并不是一个字节一个字节的加载,而是一次加载一块内存连续区域的数据,一般来说,一个主流的CPU一次加载是 64 Bytes(也有的CPU用32Bytes和128Bytes),64Bytes也就是16个32位的整型,这就是CPU从内存中捞数据上来的最小数据单位。
那么缓存命中是什么意思呢?简单的说,CPU在计算之前,会先去寻找需要的数据在不在CPU中,如果需要的数据在,就叫缓存命中,如果不在,就叫缓存不命中。
具体我们画图来了解:
假如CPU此时需要进行a+b运算

  • 情况1

根据顺序,CPU需要先找到a,先检查自身,发现a不在自身缓存中,此时就叫a缓存不命中
image.png
a缓存不命中时,cpu去下级缓存中寻找a的地址,并将从该地址开始的64个字节的数据都加载到自身缓存中
image.png
找到a后,CPU还需要b的数据,先检查自身,发现b在自身缓存中,此时就叫b缓存命中

  • 情况2

先前的a和b在相邻的64个字节内,所以CPU将a加载的同时也将b加载了,后续就不用再加载一次b,节省了一次加载数据的时间。但要是a和b的地址相差了64个字节以上呢?那么加载了a之后,b仍然缓存不命中。
image.png
CPU需要再加载一次,才能进行运算
image.png

缓存命中与线性表

知道了缓存命中的机制之后,我们很容易明白,想要加快运算速度,提高缓存命中率也是一个重要手段(毕竟加载数据耗时),这时就可以延申到线性表的两种经典结构,顺序结构和链式结构了。
顺序结构的数据都在地址连续的空间上,加载时缓存命中率肯定会高于地址随机分布在堆中的链表,所以顺序表相对于链表还有一个优点就是缓存命中率高。

以上就是我关于缓存命中率的一些了解了,能力有限,能了解的底层知识不多,以后有能力了再补充。

标签:缓存,L3,命中,数据,CPU,加载
From: https://blog.csdn.net/weixin_69356744/article/details/136963464

相关文章

  • Redis缓存方案设计思路
    Redis缓存方案是一个用于提高系统性能和响应速度的策略,主要通过将数据存储在快速访问的内存数据库中来实现。下面是一个基础的Redis缓存方案的实现步骤和注意事项:一、确定缓存目标1、分析数据:确定哪些数据适合放入缓存,通常是那些读取频繁、更新不频繁的数据。2、热点数据......
  • 后端缓存的使用-问题-方案
    后端缓存的使用-问题-方案更新策略更DB,删Cache问题:中间过程中,可能会有其他进行获取Cache,导致出现不一致删缓存,更DB问题:中间过程中,可能会有其他进行获取Cache,因为不存在缓存,主动拉取,导致DB与Cache出现不一致延迟双删删缓存,更DB,再删缓存.引入了一个......
  • 瑞_Redis_商户查询缓存_什么是缓存
    文章目录项目介绍1短信登录2商户查询缓存2.1什么是缓存2.1.1缓存的应用场景2.1.2为什么要使用缓存2.1.3Web应用中缓存的作用2.1.4Web应用中缓存的成本附:缓存封装工具类......
  • Mybatis缓存相关
    Mybatis半ORM框架一级缓存二级缓存一级缓存Mybatis一级缓存是作用在SqlSession级别的缓存,用于保存相同查询的结果集,从而提高查询速度。在同一个SqlSession中执行相同查询Sql并且参数一致的情况下,第一次查询出的结果会被缓存在一级缓存中(Hashmap实现),在第二次查询时直接从......
  • Mybatis配置-缓存策略
    MyBatis缓存全面详解一、缓存概述1.定义缓存是一种存储技术,用于临时存储最近访问的数据,以便在需要时可以快速访问。通过减少对持久层的访问次数,缓存可以显著提高应用程序的性能和响应速度。2.特点高速访问:缓存的存在减少了对数据库的访问,从而加快了数据的读取速度......
  • mybatis注解开发和事务配置以及mybatis缓存
    MyBatis注解开发注解方式比较简单,但是实际开发不推荐使用注解,使用配置文件的方式,不需要改源代码。@Insert:添加@Update:修改@Delete:删除@Select:查询@Result:实现结果集封装@Results:可以和@Result一起使用,封装多个结果集@One:实现一对一和多对一的结果集封装@Man......
  • 如何在极狐GitLab Runner 添加信任缓存域名证书
    本文作者:徐晓伟GitLab是一个全球知名的一体化DevOps平台,很多人都通过私有化部署GitLab来进行源代码托管。极狐GitLab是GitLab在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。问题参见:场景是极狐GitLabRunner添加MinIO域名host的时候却无法验证......
  • Spring三级缓存及循环依赖的解决
    三级缓存的概念是针对单例bean来说的,原型的bean是每次直接创建新的bean对象,IoC容器中,同一个bean或者其代理对象只能存在一个,不能同时存在 一级缓存存放完整的bean(实例化和初始化都已完成)二级缓存提前曝光的不完整的bean(可能是bean,也可能是bean的AOP代理,未进行初始化) 作用......
  • Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作
    上文Springboot2.7整合jetcache方法缓存我们做了个方法缓存的案例可以将接口内容缓存起来是能大大提高效率的但是我们接口的数据大多来自数据库如果我们调用增删查改它的数据变化了那缓存的内容就会因为没有及时更新变的不准确例如我们这样我们在上面定义了......
  • Spring boot2.7整合jetcache方法缓存
    前面的文章我们讲了springboot整合jetcache做基本字符串数据缓存但是我这里有个这样的逻辑我的domain包下有一个book属性类里面就id和name属性设置了对应的setget函数和一个整体的构造函数packagecom.example.javadom.domain;publicclassboo......