学习
实践
活动
专区
工具
TVP
写文章

CPU多级缓存

一、什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据。在很多年前,CPU的频率与内存总线的频率在同一层面上。 CPU缓存的概念 CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。 CPU缓存的意义 CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令,从而减少了整机的响应时间。 二、CPU的三级缓存 1. CPU的三级缓存 随着多核CPU的发展,CPU缓存通常分成了三个级别:L1,L2,L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。 带有高速缓存CPU执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 目前流行的多级缓存结构如下图: 三、CPU

59730

CPU缓存缓存的套路

有上面这个局部性原理为理论指导,为了解决二者速度不匹配问题就可以在 CPU 和内存之间加一个缓存层,于是就有了如下的结构: ? 三、何时更新缓存CPU 中引入缓存中间层后,虽然可以解决和内存速度不一致的问题,但是同时也面临着一个问题:当 CPU 更新了其缓存中的数据之后,要什么时候去写入到内存中呢? 比较容易想到的一个解决方案就是,CPU 更新了缓存的数据之后就立即更新到内存中,也就是说当 CPU 更新了缓存的数据之后就会从上到下更新,直到内存为止,英文称之为write through,这种方式的优点是比较简单 上面说的在适当的时候写入内存,如果是单核 CPU 的话,可以在缓存要被新进入的数据取代时,才更新内存,但是在多核 CPU 的情况下就比较复杂了,由于 CPU 的运算速度超越了 1 级缓存的数据 I\O 能力,CPU 厂商又引入了多级的缓存结构,比如常见的 L1、L2、L3 三级缓存结构,L1 和 L2 为 CPU 核心独有,L3 为 CPU 共享缓存

25540
  • 广告
    关闭

    新年·上云精选

    热卖云产品新年特惠,2核2G轻量应用服务器9元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    写Java也得了解CPUCPU缓存

    本文主要谈谈CPU缓存对Java编程的影响,不涉及具体CPU缓存的机制和实现。 现代CPU缓存结构一般分三层,L1,L2和L3。如下图所示: ? 级别越小的缓存,越接近CPU, 意味着速度越快且容量越少。 可以查看CPU缓存的信息: ? 有了上面对CPU的大概了解,我们来看看缓存行(Cache line)。缓存,是由缓存行组成的。一般一行缓存行有64字节(由上图”64-byte line size”可知)。 所以使用缓存时,并不是一个一个字节使用,而是一行缓存行、一行缓存行这样使用;换句话说,CPU存取缓存都是按照一行,为最小单位操作的。 这意味着,如果没有好好利用缓存行的话,程序可能会遇到性能的问题。

    62410

    CPU缓存和内存屏障

    CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化 例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 ? 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kb L2 Cache (二级缓存) 由于L1高速缓存的容量限制 , 为了再次提高CPU的运算速度, 在CPU外部放置一高速缓存存储器, 即二级缓存 L3 Cache(三级缓存)现在都是内置的, 而它的实际作用既是, L3缓存的应用可以进一步降低内存延迟, 同时提升大数据量计算时处理器的性能 在这种高速缓存回写的场景下, 有一个缓存一致性协议, 多数CPU厂商对它进行了实现. 指令重排的场景: 当CPU缓存时发现缓存区块正被其它CPU占用, 为了提高CPU处理性能, 可能将后面的读缓存命令优先执行.

    65631

    操作系统导论-CPU缓存

    为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可能避免处理器访问主内存的时间开销,处理器大多会利用缓存以提高性能。 L1 Cache(一级缓存) CPU第一层高速缓存,分为数据缓存和指令缓存。 一般服务器CPU的L1缓存的容量通常在32- - 4096KB。 L2 由于L1级高速缓存容量的限制,为了再次提高CPU的运算速度,在CPU外部放置一高速存 储器,即二级缓存。 2 缓存同步协议 多CPU读取同样的数据进行缓存,进行不同运算之后,最终写入主内存以哪个CPU为准? 在这种高速缓存回写的场景下,有一个缓存一致性协议, 多数CPU厂商对它进行了实现。 3 问题 缓存中的数据与主内存的数据并不是实时同步的,各CPU (或CPU核心)间缓存的数据也不是 实时同步。在同一个时间点,各CPU所看到同一内存地址的数据的值可能是不一致的。

    24530

    CPU多级缓存缓存一致性

    CPU多级缓存结构: 为什么需要CPU缓存 因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。 CPU缓存有什么意义 局部性原理: 时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问; 空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问; 缓存一致性(MESI) 用于保证多个 CPU cache之间缓存共享数据的一致 MESI协议中,每个cache的控制器不仅知道自己的操作(local read和local write),每个核心的缓存控制器通过监听也知道其他CPU cache拥有最新数据(最新的cache line(缓存行)),其他CPU拥有失效数据(cache line的状态是invalid),虽然当前CPU中的数据和主存是不一致的,但是以当前CPU的数据为准 ; E(exclusive 独享):只有当前CPU中有数据,其他CPU中没有改数据,当前CPU的数据和主存中的数据是一致的; S(shared 共享):当前CPU和其他CPU中都有共同数据,并且和主存中的数据一致

    6330

    CPU加了缓存后,有人急了~

    Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了~ 我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的~ 虚拟地址翻译 一大早,我们一号车间MMU(内存管理单元)部门的小黑就来到领导办公室 “那可不行,咱们CPU的目标就是要把性能优化到极致,这种方案上了,领导还不得骂死我”,小黑说到。 当天便投入使用,咱们这个CPU的运行效率一下突飞猛进,这缓存的威力可真是太大了。 为了跟我们的一二级缓存相区分,小黑还给他们的地址翻译缓存取了一个响亮的名字:TLB——翻译后备缓冲区。 【完】 相关阅读 主板上这家伙,要当CPU和内存的中间商! 主板上来了一个新邻居,CPU慌了! CPU明明8个核,网卡为啥拼命折腾一号核?

    16830

    利用cpu缓存实现高性能程序

    CPU上增加缓存后,由于CPU缓存CPU核心更近,所以访问速度比主存快得多! 如果我们访问内存时,先把数据读取到CPU缓存再计算,而下次读取到该数据时直接使用缓存(若未被淘汰掉),这在时间和空间上都会降低CPU计算能力的浪费! CPU缓存是分为多级的,原因是热点数据太大了!最快的缓存一定离CPU核心最近,因为体积小所以容量也最小,不能满足以MB计算的热点数据。最终发展出了三级缓存,分别称为L1、L2、L3级缓存。 当然,CPU缓存的大小也远小于主存的大小,如本文最开始的那张图,现在的CPU缓存往往只有几十MB。 可见,如果我们的程序在循环或者热点代码中,能够控制数据规模,使之长期落在CPU缓存中,那么性能就可以提升!怎么判断CPU缓存命中率现在是多少呢?

    79520

    理解CPU缓存的伪共享问题

    CPU是有高速缓存的 , 三级缓存分别是 L1 , L2 , L3 L1缓存最贴近CPU , 所以速度也最快 数据在缓存中是一行一行存储的 , L1缓存一般的一行缓存64字节 一行能缓存64 个字节 , 因为一个变量可能没有64字节大小 , 所以可能会缓存好几个变量 缓存需要保证一致性, 也就是当变量修改的时候 , 缓存必须得失效 , 重新在内存中读取变量加载到缓存里 当一行里有好几个变量的时候 , 其中一个变量修改了 , 这一行的数据都得失效 并且同一时间只允许一个线程操作缓存行 , 当并发比较高修改比较频繁时候 , 缓存的性能就下降了很多 , 这就是伪共享问题 一般解决这个问题是用的内存对齐填充来解决 , 也就是我一个变量占满这一行64字节 , 当然这样也比较浪费缓存 我们常说的局部性原理也与CPU缓存有关 , 当我们使用数组的时候 , 内存地址是连续的 , 这样就很有可能放在一行里 , 每次CPU缓存里读一行就能读到相邻的变量 , 速度会很快

    23410

    CPU知识:主频、核心、线程、缓存、架构

    下面就带大家了解一下CPU知识以及怎么选择合适的CPUCPU有几个重要的参数:主频、核心、线程、缓存、架构。那么他们到底是什么意思,又有啥联系呢?铅锤哥今天就来聊一聊。 | 一、主频 我们常在CPU的参数里看到 3.0GHz、3.7GHz等就是CPU的主频,严谨的说他是CPU内核的时钟频率,但是我们也可以直接理解为运算速度。 | 五、缓存 缓存也是CPU里一项很重要的参数。 由于CPU的运算速度特别快,在内存条的读写忙不过来的时候,CPU就可以把这部分数据存入缓存中,以此来缓解CPU的运算速度与内存条读写速度不匹配的矛盾,所以缓存是越大越好。 绿巨人有力使不出啊 适合图形渲染和视频制作的CPU(多核、大缓存、性能强): 此外,还有AMD二代锐龙R5 2600X、R7 2700/2700X以及Intel八代酷睿i7 8700/K等都很适合,

    20220

    CPU高速缓存与内存屏障

    CPU高速缓存 cpu高速缓存的由来 在CPU的全部取指令周期中(程序计算),至少需要访问一次存储器(也就是我们所说物理内存上的数据) 通常需要多次访问存储器的取操作数或者保存结果,CPU处理计算的速度明显受限于访问存储器的限制 高速缓存分为L1-L3 Cache L1 Cache: 一级缓存CPU第一层高速缓存,分为指令缓存和数据缓存,一般服务器的CPU的L1缓存容量在32-4096kb,现在的L1 Cache都不能直接与内存直连传输数据 在一个多核且每核都有对应的缓存的处理器进行读写操作 假设有一个CPU缓存了主内存上的某一段数据,在另一个CPU上需要对该内存段的数据进行写操作,此时在写数据的CPU更新了缓存而其他CPU并没有更新到缓存 ,这时候便会产生缓存数据的不一致性 缓存一致性约定 如何解决上述的问题,出现缓存数据不一致的原因如下: 多核CPU都有对应的高速缓存,每核缓存的数据都无法共享 这时候我们会想到就是让缓存能够为多核CPU 已修改(Modified)缓存段,属于脏段,表示当前的cpu缓存已经修改过,但是还没有同步到主内存中,为当前的cpu所专有 小结:也就是cpu控制缓存的读写操作,还需要监听其他cpu发生的通知,保证缓存最终数据的一致性

    99530

    JAVA线程-CPU缓存和内存屏障(四)

    ② 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和底层的指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kb。 L2 Cache (二级缓存) 由于L1高速缓存的容量限制, 为了再次提高CPU的运算速度, 在CPU外部放置一高速缓存存储器, 即二级缓存。 具有较大L3缓存的处理器更有效的文件系统缓存行为及较短消息和处理器队列长度. 一般是多核共享一个L3缓存。不管你电脑有多少个CPU,每个CPU都有L1 和 L2,但是L3都是共用的。 如果有4个CPU,都对一个 i 进行修改,都体现在自己的L1 一级缓存里面,我们需要将缓存数据写入到内存里面,在这种高速缓存回写的场景下,有一个缓存一致性协议多数CPU厂家对它进行了实现,也就是多个CPUCPU高速缓存CPU执行指令重排序的问题 1.缓存中的数据与主内存的数据并不是实时同步的, 各CPU缓存的数据也不是实时同步.

    64010

    JAVA 拾遗 — CPU Cache 与缓存

    CPU 缓存架构 左图为最简单的高速缓存的架构,数据的读取和存储都经过高速缓存CPU 核心与高速缓存有一条特殊的快速通道;主存与高速缓存都连在系统总线上(BUS),这条总线还用于其他组件的通信。 简而言之,CPU 高速缓存就是位于 CPU 操作和主内存之间的一层缓存。 为什么需要有 CPU 高速缓存? 上面我们介绍了 CPU 多级缓存的概念,而之后的章节我们将尝试忽略“多级”这个特性,将之合并为 CPU 缓存,这对于我们理解 CPU 缓存的工作原理并无大碍。 缓存行 (Cache Line) 便是 CPU Cache 中的最小单位,CPU Cache 由若干缓存行组成,一个缓存行的大小通常是 64 字节(这取决于 CPU),并且它有效地引用主内存中的一块地址 ,CPU 缓存将会彻底失效,降级为 CPU core 和主内存的直接交互。

    97420

    漏洞预警 | CPU数据缓存机制存在设计缺陷

    安全漏洞公告 近日,来自于谷歌Project Zero安全团队的安全研究人员等报告,在CPU内核中,存在关于数据缓存边界机制的设计缺陷的“Meltdown”、“Spectre”的两个漏洞,漏洞对应的CVE 目前该漏洞的部分测试程序已经在互联网上公开:https://github.com/turbo/KPTI-PoC-Collection 安全漏洞描述 处理器数据缓存边界机制中存在一个缺陷,攻击者可以通过滥用 上下文切换不会立即发生,会强迫处理器转储已缓存的数据、重新从内存中加载相关信息。 当前已经验证存在漏洞的CPU型号如下: Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz (Intel Haswell Xeon CPU) AMD FX(tm)-8320 Eight-Core Processor (AMD FX CPU) AMD PRO A8-9600 R7, 10 COMPUTE CORES 4C+6G (AMD PRO CPU) 谷歌Nexus 5x

    43480

    CPU缓存一致性协议MESI

    CPU 缓存一致性协议 MESI ================ CPU 高速缓存(Cache Memory) ---------------------- CPU 为何要有高速缓存 CPU 在摩尔定律的指导下以每 带有高速缓存CPU 执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到 CPU 的高速缓存 CPU 执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 [007S8ZIlgy1gj6nx2s1i9j30iq0a4gmg.jpg ] 目前流行的多级缓存结构 由于 CPU 的运算速度超越了 1 级缓存的数据 I\O 能力,CPU 厂商又引入了多级的缓存结构。 多级缓存结构 [007S8ZIlgy1gj6nx5wl9rj30im0jgq4r.jpg] 多核 CPU 多级缓存一致性协议 MESI --------------------- 多核 CPU 的情况下有多个一级缓存 CPU 切换状态阻塞解决 - 存储缓存(Store Bufferes) 比如你需要修改本地缓存中的一条信息,那么你必须将 I(无效)状态通知到其他拥有该缓存数据的 CPU 缓存中,并且等待确认。

    65600

    如果CPU缓存足够大的话,是不是可以把系统装进缓存里?

    现在讲下缓存的原理,缓存就是数据交换区,计算机的工作原理是CPU访问的数据都是放置在内存区,如果需要保存操作硬盘来完成,现在常说的运行的程序文件存储在硬盘上,运行的时候在内存上,为了提升效率专门在cpu 上集成一个缓冲区,就是我们说到的缓存cpu缓存作用就是数据交换区,cpu在访问数据的时候第一优先级先把缓存里面的数据取出来,如果没有再从内存中获取,但这个效率就会下降很多,大家都知道缓存是个好东西, 但由于其材质等方面的因素价格要比普通的内存多上好几倍,而且为了不影响cpu的性能体积还不能太大,所以常见的缓存一般都设置的很小,即使很小性能上也会提升许多。 多级缓存的原理如果再次深入学习的话,会变得十分复杂,缓存之间还需要固定的通讯格式,如果再加上多核cpu复杂度又是数量级的提升,所以芯片这块国内还是非常大的弱项,主要这项技术需要一个长时间的积累,不是单靠拿出几年的时间就能突击出来的 所以我们平时在买电脑的时候,一旦想追求点高速度就需要有大的缓存,而且增加一点很小的缓存就能增加不少金钱,所以缓存技术算是cpu里面一项非常重要的技术创新

    59840

    从Java视角理解系统结构(二)CPU缓存

    CPU缓存 网页浏览器为了加快速度,会在本机存缓存以前浏览过的数据; 传统数据库或NoSQL数据库为了加速查询, 常在内存设置一个缓存, 减少对磁盘(慢)的IO. 同样内存与CPU的速度相差太远, 于是CPU设计者们就给CPU加上了缓存(CPU Cache). 如果你需要对同一批数据操作很多次, 那么把数据放至离CPU更近的缓存, 会给程序带来很大的速度提升. 例如, 做一个循环计数, 把计数变量放到缓存里,就不用每次循环都往内存存取数据了. 下面是CPU Cache的简单示意图. ? 缓存行(Cache line) 为了高效地存取缓存, 不是简单随意地将单条数据写入缓存的. 缓存是由缓存行组成的, 典型的一行是64字节. 读者可以通过下面的shell命令,查看cherency_line_size就知道知道机器的缓存行是多大. ? CPU存取缓存都是按行为最小单位操作的.

    49090

    科普:CPU缓存一致性协议

    为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决IO速度和CPU运算速度之间的不匹配问题。 带有高速缓存CPU执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 ? 目前流行的多级缓存结构 由于CPU的运算速度超越了1级缓存的数据IO能力,CPU厂商又引入了多级的缓存结构。 多级缓存结构 ? 多核CPU多级缓存一致性协议MESI 多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。这里就引出了一个一致性的协议MESI。 S: 共享的(Shared) 该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,其它CPU中该缓存行可以被作废(变成无效状态(Invalid

    24330

    科普:CPU缓存一致性协议

    CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。 为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决IO速度和CPU运算速度之间的不匹配问题。 带有高速缓存CPU执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 ? 目前流行的多级缓存结构 由于CPU的运算速度超越了1级缓存的数据IO能力,CPU厂商又引入了多级的缓存结构。 多级缓存结构 ? S: 共享的(Shared) 该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,其它CPU中该缓存行可以被作废(变成无效状态(Invalid

    17310

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 云数据库 Redis

      云数据库 Redis

      云数据库 Redis,数据库缓存,数据库存储,云数据库 云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。 云数据库Redis是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券