cache是什么文件夹 (Cache是怎么组织和工作的)

文章编号:8975 更新时间:2024-02-20 分类:互联网资讯 阅读次数:

资讯内容

我们经常能够看到2-ways,4-ways cache,它是什么意思呢?Cache和内存地址是怎么对应起来的呢?今天我们就介绍这个内容。

cache是什么文件夹Cache是怎么组织

在 CPU 中,Cache Memory 处于 Memory Hierarchy 的最顶端,其下是内存和外存。

那么 CPU 是如何访问 Cache 的呢?和访问内存类似,CPU 微架构也对各级 Cache 地址空间进行了编码,只是这些编码并不能够被软件所体察。为简化起见,我们忽略各级 Cache 的区别,仅仅讨论一般意义上 Cache 的访问。

Cache 的组成和访问方式

在现代大多数处理器中,Cache 被分为很多行(Cache Line),Cache Line 大小不一,从 16 Byte 到 128 Byte 不等,一般大小是 64 个 Byte,我们在这之后都认为 Cache Line 有 64B 组成。我们假设有 512KB 的 Cache,就可以划分成 8192 个 Cache Line。

那么一个地址访问如何映射到 Cache 中去呢?我们都知道地址分为逻辑地址(虚拟地址)、线性地址和物理地址。一个虚拟地址变换成物理地址的简单过程如下图,我就不详细说明了:

变换过程中线性地址到物理地址需要用到页表(page table)。页表由很多项组成,每一项叫一个页表项,整个页表由操作系统维护,并放置在内存中(或磁盘中)。从上文(L1,L2,L3 Cache 究竟在哪里?)我们知道,一次内存访问需要数百个时钟周期,如果每次地址转换都要查看内存页表也太浪费时间了。现代计算机为了加速这一过程,引入了翻译后援缓冲器 TLB。TLB 可以看作页表的 Cache,CPU 每次转换地址都会查看 TLB,如果有了就不用去取内存页表了。

那么 TLB 和 Cache 有什么关系呢?可以说 TLB 命中是 Cache 命中的基本条件。TLB 不命中,会更新 TLB 项,这个代价非常大,Cache 命中的好处基本都没有了。在 TLB 命中的情况下,物理地址才能够被选出,Cache 的命中与否才能够达成。如下图:

n-ways Set-Associative Cache

从前文可以看出知道物理地址,那就能够知道 Cache 命中与否。那么 Cache 地址和物理地址的对应关系有很多种。我们先看两个极端的例子:

直接映射可以理解为每个地址都可以立刻直接且只能映射到某个 Cache Line 上。还是举前面那个 512KB Cache 的例子。假设我们有 1GB 物理内存,我们把它们分成 8192 份,每份就是 128KB。则我们的直接映射 Cache 算法就是每个 128KB 块里面所有的地址都只能映射到相应的 Cache Line 中。我们判断 Cache 命中的算法就很简单,直接地址/128KB,商就是 Cache Line 的地址,如果里面的确是该地址就命中,否则就不明中,简单高效,运算十分迅速。意义图如下:

图片来自 HardwareSecrets

这样做看起来很高效,哪有那些坏处呢?那就是 Cache Miss 率极高,因为数据的相关性和局限性,同一时刻需要用的数据大部分都在附近,会造成 Cache 频繁换进换出,造成颠簸。一个改进的做法是用 interleave,但也会造成 Cache Miss 很大,冷热不均。

全映射就是所有 Cache Line 可以对应说有地址。这样 Cache 就不会造成冷热不均,Cache Miss 减小了很多,但与此同时带来了另外的问题,那就是查找 Cache 命中与否的代价 (Overhead) 很高。一条不命中的寻找,要遍历整个 Cache,才能最终确定下来。

直接映射在 Cache 刚刚发明时大行其道,但随着 Cache 的发展,它的问题也被暴露了出来,于此同时全相连也不是很好的解决办法。人们退而求在两个极端方法直接寻找平衡,提出了 n 路组相联映射 (n-ways Set-Associative mapping):

这里 n 路,是指将 Cache 分成 n 个组(set),每一组对应一个地址。也就是说一个地址可以映射到 n 个 Cache Line 中。我们举个 4 ways 的例子。我们先把 Cache 每 4 个分成一组:

同样的 1GB 内存也做出调整:

标签: 硬件中央处理器设计CPUCPU

本文地址: https://yihaiquanyi.com/article/b4a7baff91672de858bf.html

上一篇:为什么一级比三级耗电量大为什么一级比一级...
下一篇:l2cacheverilogL2Cache终究在哪里L3L1...

发表评论