【华为云技术分享】处理器存储模型概述(2)

上一期中我们介绍了处理器的地址转换机制和访问控制机制,这一期我们将考察处理器中的缓存机制。

一、处理器的缓存机制

计算机中用于存储的硬件设备主要有寄存器、缓存、主存和磁盘,处理器访问它们的速度依次减小。由于处理器对于不同数据的访问有不同的速度要求,计算机中构建了层次化的存储结构。对访问速度要求最高的数据往往放在寄存器中,访问速度要求稍低但对存储容量要求更高的数据放在主存中,对访问速度要求最低但对存储容量要求最高的数据放在磁盘里。缓存作为寄存器和主存的中间层级,可以由一级或多级不同大小的SRAM构成。处理器访问缓存的速度比访问主存更快,使用缓存存储处理器频繁访问的数据可以减少处理器访问主存的次数,从而减少处理器访存消耗的时间。下表列出了2006年时各存储器层次结构的典型参数[1]:

对于具有缓存的计算机来说,处理器在访问主存前会先在缓存中寻找是否有对应的数据。缓存中包含的是主存中内容的一个子集。如果在缓存中找到了处理器需要的块,那么发生缓存命中,否则发生缓存缺失。读操作和写操作都有命中和缺失的现象。写入操作的缓存缺失被称为写入缺失。

缓存可以由多级组成,处理器访问高一级的缓存并发生缓存缺失时,就会访问低一级的缓存。在本文中,我们将CPU越优先访问的缓存称为越高级的缓存。通常低级的缓存比高级的缓存大,以捕获更多的存储器访问,减少缓存缺失。

缓存背后的原理是程序的局域性。计算机程序通常有两种局域性,即时域局域性和空域局域性。时域局域性指被访问的数据在不久的将来还可能被访问;空域局域性指被访问数据附近的数据有可能被访问。用缓存保存被频繁访问的数据集可以减少处理器访问更低级的缓存和主存的次数,从而减少访存时间。

主存中的数据集往往被分成固定大小的单元并存储于缓存中,这些单元被称为块。按照块的映射方式可以将缓存的组织方式分为直接映射、全相联和组相联。如果每个块只能被存储在缓存中的固定位置,那么该缓存采用的组织方式是直接映射;如果一个块可以被存储在缓存中的任意位置,那么该缓存采用的组织方式是全相联;如果一个块可以被存储在缓存中由有限个位置组成的组中,那么该缓存采用的组织方式是组相联。如果一个组中最多可以放置n个块,那么这种组织方式被称为n路组相联。下图给出了三种组织方式的示意图[1]:

为了检查缓存中是否存在对应的块,我们将处理器地址分为块地址和块偏移,块偏移用于块内的索引。块地址被进一步分解为标志位和索引。在组相联中,使用索引定位块可能在的组,然后对比标志位确定块是否存在于缓存中。直接映射可以看成是1路组相联。全相联组织方式中没有索引。处理器地址的分解方式如下图所示[1]:

当发生缓存缺失时,缓存控制器需要用期望数据替换一个已存在缓存中的块。如果采用直接映射的组织方式,则我们的选择是唯一的。在采用组相联和全相联的方式时,缓存中有多个可供选择的块,这时我们需要一个替换策略。常见的替换策略有:

  • 随机策略:在候选块中随机选择需要替换的块,使得被替换的块呈均匀分布。

  • 最近最少使用策略(LRU):在候选块中替换未使用时间最久的块,实现复杂度较高。

  • 先入先出策略(FIFO):在候选块中替换最早进入的块,用于近似最近最少使用策略。

缓存的写入策略有直写(write through)和写回(write back)两种。直写是指信息被写入缓存和低一级的存储器(可能是主存或低一级的缓存)。写回指信息只被写到缓存中,被修改的块在发生替换时才被写入主存储器中。直写策略的优势在于实现简单且易于维护数据一致性。写回策略的优势在于多次写同一个块时不必每次都访问主存,只在块替换时才一次性写回主存,从而节省存储器带宽。

当发生写入缺失时有写入分派(write allocate)和无写入分派(no-write allocate)两种策略。写入分派是指当发生写入缺失的时候,先将缺失块读入缓存中再写入命中。无写入分派指当发生写入缺失时不影响缓存中的内容,而只影响低一级的存储器(可能是主存或低一级的缓存)中的内容。写入分派通常与写回策略一起使用以捕获之后对同一个块的写入操作。无写入分派通常与直写策略同时使用,因为无论后续是否有对同一个块的写入操作,直写策略都要求写低一级存储器,从而使用写入分派的收益较低。

二、结语

本期我们考察了处理器的缓存机制,下一期中我们分析一下ARMv8-A架构中的地址转换机制和访问控制机制。

参考文献

《计算机体系结构量化研究方法(第五版)》

原创文章 1164 获赞 5546 访问量 136万+

猜你喜欢

转载自blog.csdn.net/devcloud/article/details/105627865