首页 » 互联网 » L1L2L3 Cache究竟在哪里?_内存_是在

L1L2L3 Cache究竟在哪里?_内存_是在

雨夜梧桐 2024-12-21 09:59:43 0

扫一扫用手机浏览

文章目录 [+]

很多人有个疑问,为什么Intel系列CPU在2005年后可以力压AMD十多年?精良的Cache设计和卓越的微架构是紧张的缘故原由。
大多数高层程序员认为 Cache 是透明的,CPU可以很聪明地安排他们书写的程序,不须要关心数据是在内存中还是在Cache里。
他们大概是对的,大部分韶光Cache都可以安静的事情。
但对付操作系统、编译软件、固件工程师和硬件工程师来说,Cache则须要我们特殊关照。
现在越来越多的数据库软件和人工智能引擎也对Cache越来越敏感,须要针对性地优化。
Cache设计和干系知识从而不再是阳春白雪,你大概某一天就会须要理解它。

本系列希望通过将Cache干系领域知识点拆解成大家关心的几个问题,来串起干系内容。
这些问题包括:

L1L2L3 Cache究竟在哪里?_内存_是在 互联网

Cache究竟在哪里?Cache是怎么组织和事情的?什么是n-ways Set-Associative Cache?什么是Cache Coloring (Page Coloring)? 什么是Inclusive Cache或者Exclusive Cache?Cache line淘汰算法有哪些?Cache为什么有那么多级?为什么一级比一级大?是不是Cache越大越好?Cache的同等性是怎么担保的?Cache的属性是谁设定的,怎么设定的?

下面是本系列的第一篇。

什么是Cache?

Cache Memory也被称为Cache,是存储器子系统的组成部分,存放着程序常常利用的指令和数据,这便是Cache的传统定义。
从广义的角度上看,Cache是快设备为了缓解访问慢设备延时的预留的Buffer,从而可以在粉饰访问延时的同时,尽可能地提高数据传输率。
快和慢是一个相对观点,与微架构(Microarchitecture)中的 L1/L2/L3 Cache比较, DDR内存是一个慢速设备;在磁盘 I/O 系统中,DDR却是快速设备,在磁盘 I/O 系统中,仍在利用DDR内存作为磁介质的Cache。
在一个微架构中,除了有L1/L2/L3 Cache之外,用于虚实地址转换的各级TLB, MOB( Memory Ordering Buffers)、在指令流水线中的ROB,Register File和BTB等等也是一种Cache。
我们这里的Cache,是狭义 Cache,是CPU流水线和主存储器的 L1/L2/L3 Cache。

Cache在哪里呢?

大概很多人会不假思虑的说:“在CPU内核里。
”Not so fast!
它也有可能在主板上!
我们先来理解一下Cache的历史。

PC-AT/XT和286时期:没有Cache,CPU和内存都很慢,CPU直接访问内存。
386时期:CPU速率开始和内存速率不匹配了。
为了能够加速内存访问,芯片组增加了对快速内存的支持,这也是在电脑上第一次涌现Cache(只管IBM 360 model系统上已经涌现良久了),也是L1(一级Cache)的雏形。
这个Cache是可选的,低端主板并没有它,从而性能受到很大影响。
而高等主板则带有64KB,乃至高端大气上档次的128KB Cache,在当时也是可以笑傲江湖了。
当时的Cache都是Write-Through,即Cache内容的更新都会急速写回内存中。
486时期:Intel在CPU里面加入了8KB的L1 Cache,当时也叫做内部Cache。
它在当时是Unified Cache,便是不分代码和数据,都存在一起。
原来在386上面的Cache,变成了L2,也被叫做外部Cache。
大小从128KB到256KB不等。
这时增加了Write-back的Cache属性,即Cache内容变动后不急速更新内存,而是在Cache miss的时候再更新,避免了不必要的更新。

586/Pentium-1时期:L1 Cache被一分为二,分为Code和data,各自8KB。
这是由于code和data的更新策略并不相同,而且由于CISC的变长指令,code cache要做分外优化。
与此同时L2还被放在主板上。
后期Intel推出了Pentium Pro ('80686'),L2被放入到CPU的Package上:

奔驰2/3:变革不大,L2还在CPU Die表面,只是容量大了不少。

奔驰4/奔驰D:L2被放入到了Die里面。
这就和现在的L1和L2很相像了,问题来了,多内核呢?第一代奔驰D双核中,L1和L2被两个Die各自霸占。
Netburst的Pentium 4 Extreme Edition高端版乃至加入L3。
但在后期与HT一起随着Netburst架构被放弃。
Core/Core2:巨大的变革发生在L2,L2变成多核共享模式:

现在:L3被加入到CPU Die中,它在逻辑上是共享模式。
而L2则被每个Core单独霸占。
这时L2也常被指做MLC(Middle Level Cache),而L3也被叫做LLC(Last Level Cache):

Haswell/Broadwell:在Iris系列中,一块高速DRAM被放入Package中,叫做eDRAM。

它在平时可以做显存。
也可以被设定为L4缓存:

Cache速率比内存速率快多少?

大家都知道内存都是DRAM,但对Cache是怎么组成就所知不多了。
Cache是由CAM(Content Addressable Memory )为主体的tag和SRAM组成的。
我们今后在系列文章中会详细先容CAM的组成,这里大略比较一下DRAM和SRAM。
DRAM组成很大略:

DRAM

只有一个晶体管和一个电容。
而SRAM就繁芜多了,一个简化的例子:

SRAM

须要6个晶体管。
一个大略的比较如下:

那么速率差距多大呢?各级Cache的延迟差距很大,如下图:

可以看到延迟最低的是Registers和MOB(Memory Ordering Buffers),L1的延迟和CPU core在一个数量级之内(把稳这里并不能大略的认为L1便是3个Cycle,由于有pre-fetch),而DRAM延迟是它的60多倍。

结论

说Cache在CPU的Die里面在现在绝大多数情形下都是精确的。
最新Intel的optane内存会让普通DRAM作为cache,而自己作为真正内存,从而组成两级memory( L2 memory),为这个构造平添了一些变数。
细心的读者大概会创造,Cache演化总的来说级数在增加,新加入的层级在位置上总是涌如今外层,逐渐向内部靠近。
Cache的设计是CPU设计的主要内容之一,我们会在今后的文章中为大家详细先容。

后记如何知道自己CPU的L2、L3的容量多大呢?当然可以用CPU-z,但实在可以有个更加大略的办法,在命令行输入:

wmic cpu get L2CacheSize,L3CacheSize

我的条记本得到这个结果:

想体验一下不要Cache的极限慢速吗?很多BIOS都有设置,可以关掉cache:

标签:

相关文章