L1,L2,L3 Cache缓存原理

2023-11-11

一、介绍

CPU缓存(Cache Memory)也被称为Cache,是存储器子系统的组成部分,存放着程序经常使用的指令和数据。从广义的角度上看,Cache是快设备为了缓解访问慢设备延时的预留的Buffer,从而可以在掩盖访问延时的同时,尽可能地提高数据传输率。

二、位置

CPU缓存位于CPU与内存之间的临时存储器,一般在在CPU内核里,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。最初缓存只有一级,二级缓存(L2 CACHE)出现是为了协调一级缓存与内存之间的速度。二级缓存比一级缓存速度更慢,容量更大,主要就是做一级缓存和内存之间数据临时交换的地方用。实际上,现在Intel和AMD处理器在一级缓存的逻辑结构设计上有所不同,所以二级缓存对CPU性能的影响也不尽相同。

三、工作原理

缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

四、为什么要分级

CPU中有L1、L2、L3甚至L4级Cache。为什么搞这么麻烦CPU厂商直接把L1和L2加倍不就好了吗?
最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。


 

 一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

多级CACHE的设计,只是为了一个目的:既快,又成本低。这就是因为主内存不够快,而又必须得控制成本不能让电脑太贵而设计的。也就是说,如果现在主流的内存DRAM够快的话,这几级cache就会完全消失的。

参考:

Cache为什么有那么多级?为什么一级比一级大?是不是Cache越大越好? - 知乎

二级缓存是什么意思 为什么要分一二三级缓存-电子发烧友网

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L1,L2,L3 Cache缓存原理 的相关文章

  • Disruptor(一)Disruptor概念和RingBuffer数据结构

    Disruptor是LMAX公司开源的一个高效的内存无锁队列 谈到并发程序设计 有几个概念是避免不了的 1 锁 锁是用来做并发最简单的方式 当然其代价也是最高的 内核态的锁的时候需要操作系统进行一次上下文切换 等待锁的线程会被挂起直至锁释放
  • 《消息队列高手课》缓存策略:如何使用缓存来减少磁盘IO?

    现代的消息队列 都使用磁盘文件来存储消息 因为磁盘是一个持久化的存储 即使服务器掉电也不会丢失数据 绝大多数用于生产系统的服务器 都会使用多块儿磁盘组成磁盘阵列 这样不仅服务器掉电不会丢失数据 即使其中的一块儿磁盘发生故障 也可以把数据从其
  • HIT--ICS计算机系统大作业

    目录 摘要 第1章 概述 1 1 Hello简介 1 2 环境与工具 1 3 中间结果 1 4 本章小结 第2章 预处理 2 1 预处理的概念与作用 2 2在Ubuntu下预处理的命令 2 3 Hello的预处理结果解析 2 4 本章小结
  • redis-cli的安装

    1 下载redis cli 2 解压缩 3 简易配置 4 查看redis Cli的使用说明 5 常规连接指令 redis cli h 目标主机ip地址 p 端口号
  • Redis主从集群

    Redis主从集群 1 集群结构 我们搭建的主从集群结构如图 共包含三个节点 一个主节点 两个从节点 这里我们会在同一台虚拟机中开启3个redis实例 模拟主从集群 信息如下 IP PORT 角色 192 168 150 101 7001
  • java并发编程笔记(四)--JMM内存模型

    1 计算机结构 输入设备 就是我们的鼠标 键盘 存储器 对应的就是我们的内存 缓存 运算器和控制器共同组成了cpu 而输出设备就比如显示屏 打印机 我们重点来聊一下缓存 2 缓存 其实 当我们说计算机运行效率低下 速度慢 往往不是cpu的锅
  • Redis实战篇一 (短信登录)

    Redis企业实战 黑马点评 项目整体架构 项目部署 后端部署 前端部署 短信登陆 基于Session实现登录 集群的Session共享问题 基于Redis实现共享session登录 解决状态登录刷新的问题 登录拦截器的优化 本期学习路线
  • SpringBoot通过@Cacheable实现redis缓存机制

    SpringBoot通过注解实现redis缓存机制 Cacheable 查询 CachePut 修改 CacheEvict 删除 下面展示一些 内联代码片 Cacheable 查询 An highlighted block key 这边以d
  • Spring的三级缓存解决循环依赖

    一 什么是Spring三级缓存 第一级缓存 也叫单例池 存放已经经历了完整生命周期的Bean对象 第二级缓存 存放早期暴露出来的Bean对象 实例化以后 就把对象放到这个Map中 Bean可能只经过实例化 属性还未填充 第三级缓存 存放早期
  • Redis cluster集群搭建

    通过三台虚拟机搭建一个3主3从的cluster集群 1 安装 gcc c 依赖包 yum install gcc c 2 下载安装包并解压 wget https download redis io releases redis 6 0 9
  • redis篇

    一 数据库分类 1 关系型数据库SQL Oracle 不开源收费 高帅富 SQL Server 不开源收费 微软自家的产品 DB2 不开源收费 IBM 的产品 Sybase 不开源收费 微软的小基友 关系破裂后家境惨淡 MySQL 大家都在
  • 关于Mysql线程的基本设置

    客户端发起连接到mysql server mysql server监听进程 监听到新的请求 然后mysql为其分配一个新的 thread 去处理此请求 从建立连接之开始 CPU要给它划分一定的thread stack 然后进行用户身份认证
  • Redis-Sentinel(哨兵模式),看这篇就够了哦

    文章目录 简介 启动并初始化Sentinel 初始化Sentinel服务器 替换普通Redis代码为Sentinel的专用代码 初始化 Sentinel 状态 初始化Sentinel监视的主服务器列表 创建连向主服务器的网络连接 获取主服务
  • 如何保持缓存和数据库中的数据一致

    背景 缓存是软件开发中一个非常有用的概念 数据库缓存更是在项目中必然会遇到的场景 而缓存一致性的保证 更是在面试中被反复问到 这里进行一下总结 针对不同的要求 选择恰到好处的一致性方案 缓存是什么 存储的速度是有区别的 缓存就是把低速存储的
  • Response响应方法详解

    Response 响应 服务器把请求的处理结果告知客户端 在B S架构中 响应就是把结果带回浏览器 响应对象 在项目中用于发送响应的对象 常用状态码 状态码 说明 200 执行成功 302 它和307一样 都是用于重定向的状态码 只是307
  • Redis 7.0 核心技术、实战应用、面试题

    Redis 7 0 核心技术与实战应用 Redis 入门概述 01 Redis 是什么 Redis REmote Dictionary Server 远程字典服务器 官网介绍 https redis io docs about 官网定义 R
  • 4、动态代理的缓存机制

    1 背景 上一节大致介绍了Proxy动态代理的原理 从几个疑问上面分析 这一节介绍一下动态代理的缓存机制 网上的资源比较少 可以怀着下面几个问题阅读源码 为什么要缓存 缓存的内容是什么 哪里调用的缓存 缓存的实现机制 缓存的过期机制 2 属
  • Redis 分布式缓存

    分布式缓存 单点 Redis 的问题及解决 数据丢失 实现Redis数据持久化 并发能力 搭建主从集群 实现读写分离 存储能力 搭建分片集群 利用插槽机制实现动态扩容 故障恢复能力 利用哨兵机制 实现健康检测和自动恢复 RDB RDB全称R
  • 万字整理Redis核心知识点

    1 Redis介绍 Redis 是 NoSQL 但是可处理 1 秒 10w 的并发 数据都在内存中 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql 有各类实现他的实现类 我们常用的是 druid 其中对 re
  • Redis生产环境最佳实践

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文

随机推荐

  • springboot项目避免脏读影响修改数据的几种方法

    文章目录 1 通过sql层面进行行锁 2 通过cas原则 compareAndSwapInt 进行自旋 3 通过synchronized锁住查询跟修改语句 4 通过分布式锁redission 1 通过sql层面进行行锁 1 Update时
  • 引用计数法和可达性分析算法

    一 引用计数法 给对象中添加一个引用计数器 每当有一个地方引用它时 计数器值就加1 当引用失效时 计数器值就减1 任何时刻计数器为0的对象就是不能再被使用的 引用计数法实现简单 判定效率也很高 但是它很难解决对象之间相互循环引用的问题 如下
  • 谈谈我接触过的几个前端框架。

    1 justified gallery框架 jQuery justified gallery插件允许你在一个合理的空间内创建响应式 无限滚动 高品质的画廊 并填充满所有的空间 插件主要特性 无需在意像素 使用一种先进的算法无需剪裁图像进行自
  • 学位真的那么重要吗?上交大博士亲述科研心路,获4万高赞,网友:这是知乎最好的回答...

    点击 凹凸域 马上关注 更多内容 请置顶或星标 学位真的那么重要吗 上交大博士亲述科研心路 获4万高赞 网友 这是知乎最好的回答 十三 转载整理自 时间规划局 量子位 报道 都说读博就像一场赌博 一入红门深似海 从此半点不由人 还时不时曝出
  • JetBrains IntelliJ IDEA Ultimate 2017.2.5 官方旗舰版 windows/mac/Linux

    intellij idea是一款非常强大的java开发工具 软件内置智能代码助手 会对代码进行自动检测 可以大幅度减少程序员的工作量 而且还支持多线程调试 您所有创建的工程都会被记录下来 方便以后查询和使用 功能还有很多等你来体验 因其强大
  • android APK签名过程之CERT.RSA分析

    CERT RSA包含了公钥信息和发布机构信息 具体信息获取可以参考 手动给android APK签名 中第四部分的验证过程
  • 朋友创业2年,估值已达10亿,正招贤纳士,不错的机会

    公司主要成员是来自高通中国的IC创业团队 公司成立两年 估计已经达到10亿人民币 成长速度惊人 截止目前 公司全职员工约60人 预计2022年底公司将成长至100人规模 团队成员中80 以上有硕士或博士学历 其中核心研发人员分别来自清华 北
  • 如何绘制用例图 - How to Draw Use Case Diagram

    如何绘制用例图 use case diagram 用例图是一种UML图 它允许您建模系统功能 即目标 i e goal 以及与这些功能交互的参与者 actor 您可以在 Visual Paradigm 中绘制用例图 并使用事件编辑器 flo
  • Rocketmq 消息过滤简述

    Rocketmq消息过滤是指在消息消费时 消费者Consumer可以对某一主题下的消息按照某种过滤规则进行过滤 只消费自己感兴趣的消息 Rocketmq同时支持在Broker端和Consumer端做消息过滤 Broker端过滤 Broker
  • vscode 做php开发环境配置

    vscode 中安装插件 php server php debug php intellisense Code Runner Composer PHP DocBlocker 在https xdebug org download php 下载
  • Vue工程化开发及vue/cli脚手架

    1 安装 vue cli 安装 Vue CLI 1 安装nodejs https nodejs org en 验证 node v version 使用npm 2 安装vue cli npm install g vue cli 验证 vue
  • pom的dependencyManagement管理下的dependency依赖爆红

    问题描述 新创建maven项目后 在父工程中dependencyManagement时 会报红线错误 刷新后还是报红 例如 mysql version 爆红
  • Python-Unicode

    额 for i in range 10000 print chr i end if i 50 0 print Users star PycharmProjects qq2 venv bin python Users star Pycharm
  • 二分查找题目汇总

    1 Search In Rotated Array 2 Search In Rotated Array if A begin A mid begin skip 就可以了 3 Search For a Range 1 标准二分 左右扩展 最坏
  • Ubuntu22.04 LTS 显卡相关命令

    第一部分查看驱显卡信息 一 查看显卡型号 i表示不区分大小写 lspci grep i nvidia 必须安装好nvidia驱动 nvidia smi L 二 查看显卡驱动版本 cat proc driver nvidia version
  • 支付宝支付接口(即时到账交易接口)

    create direct pay by user 官方参数API文档地址 https doc open alipay com docs doc htm spm a219a 7629140 0 0 dsNjYY treeId 108 art
  • ajax中如何隐藏列,【JS】在chrome等浏览器中,如何隐藏掉ajax请求,使其不会显示在console中...

    由于项目的保密性需要 需要隐藏掉ajax请求接口的地址 请问各位都是怎么做的 回答 纯后端渲染 不用ajax 后端的安全性怎么可能让前端来保证 你最多只能签名一下参数 可以尝试使用中转服务器 假设服务器 B 需要保密 你可以转而请求 A 服
  • Java类加载器

    目录 0 知识储备 JVM内存分区 双亲委派机制 1 Java类加载机制 1 1核心类加载器启动原理 类加载的含义 类加载过程 1 类的加载 2 类的连接 3 初始化 1 2类加载的双亲委派机制 2 类加载器的类型 3 自定义类加载器的实现
  • eclipse svn 忽略 target/.project /.classpath /.settings等 目录

    问题描述 用eclipse同步项目时 会出现target project classpath settings等与代码无关的文件 介绍两种办法 推荐第二种 方法一 在新建项目的时候 在第一次commit 到 SVN 之前 先在项目的根目录设
  • L1,L2,L3 Cache缓存原理

    一 介绍 CPU缓存 Cache Memory 也被称为Cache 是存储器子系统的组成部分 存放着程序经常使用的指令和数据 从广义的角度上看 Cache是快设备为了缓解访问慢设备延时的预留的Buffer 从而可以在掩盖访问延时的同时 尽可