【计算机组成与设计 硬件/软件接口-5】存储器层次结构

在这里插入图片描述

大容量和高速度:开发存储器层次结构

引言

现代计算机为了满足高速度、低价格、大容量的需求,采用的存储结构几乎都是层级结构,从最靠近CPU的寄存器,到下一级集成在芯片上的若干级cache,到内存,到磁盘,到分布式文件系统等。有一些概念需要我们先有底:

  • 块:也称作行,是可存在于或不存在于cache中的信息的最小单元
  • 命中率:在高层存储器中找到目标数据的存储访问比例
  • 缺失率:在高层存储器中没有找到目标数据的存储访问比例
  • 命中时间:访问某存储器层次结构所需要的时间,包括了判断当前访问是否命中还是缺失所需的时间
  • 缺失代价:将相应的块从低层存储器替换到高层存储器所需的时间,包括访问块,将数据逐层传输、将数据插入发生缺失的层和将信息块传送给请求者的时间。

下面的内容将基于上述概念。

存储器技术

存储层次访问时间价格
缓存0.5ns – 2.5nsRMB 2000 – 5000 / GB
主存50ns – 70nsRMB 20 – 75 / GB
磁盘5ms – 20msRMB 0.10–2/GB (HDD) 或 RMB 1–12/GB (SSD)

对于理想寄存器来说,需要满足:访问时间近似于SRAM,存储容量和价格接近于磁盘。目前没有一种存储器能够满足以上要求,必须通过开发存储器的层次结构来实现。

有关于存储技术较为全面的介绍,请参考这里

cache的基本原理

我们都知道,cache缓存来自内存的数据,使得CPU可以在很短时间内就取到所需要的数据。但是,我们还需要了解cache机制的原理。

cache如何组织数据?一般来讲有三种方式:直接映射、组相联和全相联。

直接映射

每个存储器地址仅仅对应到cache中的唯一的一个位置,一般计算公式为:(块地址) 取模 (cache中的块数)。
在这里插入图片描述
由于cache中每个位置可能对应于主存多个不同的地址,如何知道cache中的数据项是否是所请求的字?我们可以在cache中增加一组标记,标记中包含了地址信息,利用这个地址信息,我们就能判断cache中的字是否就是所请求的字。标记只需包含地址的高位,也就是没有用来检索cache的那些位。

我们还需要检查cache块中确实包含的信息为有效。最常用的方法就是增加一个有效位来标记一个块是否含有一个有效地址。如果该位没有被设置,则不能使用该块中的内容。

下面是直接映射的一个例子,假设当前cache为空,共有8块:

  • 初始状态图:
    在这里插入图片描述
  • 现CPU请求地址为22的数据,22的二进制表示为10 110,因此找到cache中索引位为110的块,发现这个时候有效位为0,缓存不命中,因此从内存中将地址为22的数据加载进cache,之后置为有效位,Tag置为高两位。
    在这里插入图片描述
  • 同理,请求地址为26的数据:
    在这里插入图片描述
  • 请求地址为18的数据,18的二进制位为10 010,发现该块是有效的,进一步检查其Tag,发现对不上,因此缓存不命中,将Index为010的块进行更新,这里就不上图展示了。

上面其实就很形象地说明了,我们将一个地址划分为标记域和cache索引,一个简易的逻辑示意图如下:
在这里插入图片描述
只有当Cache对应的Index中的Valid位有效且Tag位与地址高位一致的时候,缓存命中。

cache性能的评估和改进

写直达(Write-Through): 数据写命中时,同时更新cache和主存。
写回(Write-Back): 当写数据命中时,仅更新cache中的数据块。

CPU时间由程序执行的时钟周期数和存储器阻塞的时钟周期数组成。
在这里插入图片描述
下面是一个例子。
【假设指令Cache的缺失率为2%,数据Cache的缺失率为4%,缺失代价为100个clock cycle,处理器的CPI为2,Load/Store占全部36%的指令。则如果配置一个从不发生缺失的理想Cache,处理器的速度快多少?】

发生缺失的时钟周期数为:

  • I-cache: 0.02 × 100 × I = 2 I
  • D-cache: 0.36 × 0.04 × 100 × I = 1.44 I

实际CPI计算为2+2+1.44=5.44
因此,处理机的速度快5.44/2=2.72倍

我们定义:
平均存储器访问时间(AMAT)为:命中时间+ 缺失率 × 缺失代价。

全相联

一个块可以被放置在cache中的任何位置,这要求检查数据是否命中时,需要检索cache中所有的项,每个Cache项都需要比较器(开销大)。

组相联

组相联其实就是直接映射和全相联的一个折中,组相联将cache分成了若干组,这些组采用的是直接映射的方式;而组内包含若干块,这些块采用的是全相联的方式。

相联度

如下图是一个拥有8个块的cache被配置成直接映射、两路组相联、四路组相联、八路组相联的结构
在这里插入图片描述
一般来说,增加相联度可以降低缺失率,但是收益是逐级递减的。缺失率一般和相联度、缓存容量、算法设计有关。这里还要了解一下缺失在计算机系统中分成三类(3C模型):

  • 强制缺失:对从没有在cache中出现的块第一次访问引起的缺失,或称为冷启动缺失
  • 容量缺失:Cache的容量不足以容纳一个程序执行所需的所有块所引起的缺失
  • 冲突缺失:在组相联或者直接映射的cache中,多个块竞争同一个组时而引起的cache缺失,也称为碰撞缺失

下图是多路组相联的Cache结构:
在这里插入图片描述

替换策略

当我们必须将新数据加载到Cache中,而Cache中却又发生已有数据占用的情况,我们需要进行替换:

  • 直接映射:没有别的选择,直接覆盖
  • 组相联:倾向于选择存储Valid位为0的块
    如果Valid都为1,则可以参考最近最少使用原则或随机替换原则进行数据更新。

可信存储器层次(了解)

前面的讨论集中在如何提高存储器层次的性能上,但是不能忘记如果可信性不够,即使速度再快也毫无吸引力。
在这里插入图片描述
可信存储的度量标准:

  • 可靠性:平均无故障时间 mean time to failure (MTTF)
  • 服务中断:平均维修时间 mean time to repair (MTTR)
  • 失效间隔平均时间:MTBF = MTTF + MTTR
  • 可用性:MTTF / (MTTF + MTTR)

虚拟机(了解)

虚拟机最早出现在上世纪60年代,虚拟机:

  • 模拟客户操作系统和机器资源,提升了多个用户之间的隔离,规避了安全和可靠性的问题,有助于资源共享
  • 对性能有影响,适合于现代高性能计算机

虚拟存储器

虚拟存储,这个概念一上来不是很容易就能理解。简单来说,可以理解为利用主存作为二级存储(磁盘)的 “cache”,也就是说内存地址可能会映射到硬盘上去。虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。理解虚拟内存的关键,在于理解:对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,以借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。 在虚拟存储器中,我们之前称呼的“块”,变成了“页”,“缺失”变成了“缺页”。

地址映射

一般来说,页的大小都是固定的。地址映射要做的一件事,就是要将 虚页号映射到物理页号。
在这里插入图片描述
虚拟内存也会发生缺页。如果发生了缺页,则必须从磁盘取回该页,这个过程花费的时间代价是巨大的,因此,对于虚拟存储,我们也要尽量降低缺页率。

页表

页表保存着虚拟地址和物理地址之间转换关系。页表保存在主存中,通常使用虚页号来索引。CPU中的页表寄存器指向物理内存中存储的页表位置。每个程序都有它自己的页表,用来将程序的虚拟地址空间映射到主存中。一个页表的逻辑图如下面图示:
在这里插入图片描述
在这里插入图片描述

缺页故障

如果虚拟页的有效位为0,就会发生缺页故障。控制转移交给OS,OS在下一级存储器层次找到该页,然后决定将其放到主存中。由于我们无法提起获知存储器中的某一页什么时候将被替换出去,因此OS在创建进程的时候会在闪存或磁盘上为进程中所有的页创建空间,这个空间称为交换区。同时,它也会创建一个数据结构来记录每个虚拟页在磁盘上的存放位置。

利用TLB加快地址转换

所谓TLB,可以理解为是页表的Cache。因为页表存放在内存中,访问速度还是太慢;因此,我们把页表的子集放在Cache中,能够加快地址转换的速度。这个子集就是TLB,称为快表。快表的逻辑图示如下:
在这里插入图片描述
当TLB命中时,利用TLB将虚拟地址转换为物理地址是很简单的一件事情。但是处理TLB缺失和缺页要复杂得多。TLB缺失有下面两种可能性之一:

  1. 页在主存中,只需要创建缺失的TLB表项
  2. 页不在主存中,需要将控制权交给OS来解决缺页

一旦OS知道引起缺页的虚拟地址,它必须完成以下三个步骤:

  1. 使用虚拟地址查找页表项,并在磁盘上找到被访问的页的位置
  2. 选择替换一个物理页;如果被选中的页被修改过,需要在把新的虚拟页装入之前将这个物理页写回到磁盘上
  3. 启动读操作,将被访问的页从磁盘上取回到所选择的物理页的位置上

当从磁盘读页操作完成后,OS可以恢复原先引起缺页的进程状态,并且执行从异常返回的指令。

存储器层次结构的一般框架(了解)

存储器层次研究的问题:

  • 块的位置
  • 寻找一个块
  • 缺失时替换
  • 写策略

Cache设计的折中:
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这本最畅销的计算机组成书籍经过全面更新,关注现今发生在计算机体系结构领域的革命性变革:从单处理器发展到多核微处理器。此外,出版这本书的ARM版是为了强调嵌入式系统对于全亚洲计算行业的重要性,并采用ARM处理器来讨论实际计算机的指令集和算术运算,因为ARM是用于嵌入式设备的最流行的指令集架构,而全世界每年约销售40亿个嵌入式设备。与前几版一样,本书采用了一个MIPS处理器来展示计算机硬件技术、流水线、存储器层次结构以及I/O等基本功能。此外,本书还包括一些关于x86架构的介绍。   本书主要特点   ·采用ARMv6(ARM11系列)为主要架构来展示指令系统和计算机算术运算的基本功能。   ·覆盖从串行计算到并行计算的革命性变革,新增了关于并行化的一章,并且每章中还有一些强调并行硬件软件主题的小节。   ·新增一个由NVIDIA的首席科学家和架构主管撰写的附录,介绍了现代GPU的出现和重要性,首次详细描述了这个针对可视计算进行了优化的高度并行化、多线程、多核的处理器。   ·描述一种度量多核性能的独特方法——“Roofline model”,自带benchmark测试和分析AMD Opteron X4、Intel Xeon 5000、Sun UltraSPARC T2和 IBM Cell的性能。   ·涵盖了一些关于闪存和虚拟机的新内容。   ·提供了大量富有启发性的练习题,内容达200多页。   ·将AMD Opteron X4和Intel Nehalem作为贯穿本书的实例。   ·用SPEC CPU2006组件更新了所有处理器性能实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值