文章目录

  • 第7章 存储系统
  • 7.5 减少命中时间
  • 7.5.1 容量小、结构简单的Cache
  • 7.5.2 虚拟Cache
  • 7.5.2.1 物理Cache
  • 7.5.2.2 虚拟Cache
  • 7.5.3 Cache访问流水化
  • 7.5.4 踪迹 Cache
  • 7.5.5 Cache优化技术总结


第7章 存储系统

7.5 减少命中时间

背景:

  • 命中时间直接影响到处理器的时钟频率。
  • 在当今的许多计算机中,往往是Cache的访问时间限制了处理器的时钟频率

7.5.1 容量小、结构简单的Cache

为了有效地减少Cache的命中时间,可以采用容量小、结构简单的Cache。

Cache命中访问过程中最耗时的部分:

  • 用块地址的索引部分访向标识存储器
  • 读出标识并与地址进行比较

使用容量小、结构简单的Cache的原因:

  • 硬件越简单,速度就越快
  • 小容量Cache对减少命中时间有益

实现小容量Cache的方案:

  1. 使Cache容量足够小,以便可以与处理器做在同一芯片上,避免因片外访问而增加时间开销
  2. 折中方案:把Cache的标识放在片内,而把Cache的数据存储体放在片外,这样既可以实现快速标识检测,又能利用独立的存储芯片来提供更大的容量。

保持Cache结构的简单性:

  • 采用直接映像Cache
  • 直接映像Cache的主要优点是可以让标识检测数据传送同时进行,从而有效地减少命中时间。

7.5.2 虚拟Cache

在采用虚拟存储器(OS中的虚拟内存)的计算机中,每次访存都必须进行虚实地址的转换,即将CPU发出的虚地址转换为物理地址,这一般是由存储管理部件(MMU)完成的。

在介绍虚拟Cache之前,需要先介绍物理Cache的概念

7.5.2.1 物理Cache

物理Cache

  • 使用物理地址进行访问的传统Cache
  • 标识存储器中存放的是物理地址,进行地址检测也是用物理地址。

一次访存过程:

  1. 当CPU要访问存储器时,给出一个虚拟地址,由MMU中的地址转换部件把该地址转换为主存物理地址。
  2. 然后再用这个物理地址去访问Cache。
  • 如果要访问的数据或指令在Cache中被找到,则Cache命中。
  • 否则不命中,用这个物理地址去访问存储器,取出一块数据或指令装入Cache

Loki 只对标签做索引 索引标识名_Loki 只对标签做索引

根据使用物理Cache访存的过程不难看出,物理Cache的缺点是:

  • 地址转换和访问Cache串行进行,访问速度很慢。
7.5.2.2 虚拟Cache

虚拟Cache

  • 可以直接用虚拟地址进行访问的Cache。
  • 标识存储器中存放的是虚拟地址,进行地址检测用的也是虚拟地址。

一次访存过程:

  1. 当CPU要访问存储器时,把虚拟地址同时送给Cache和MMU
  • 如果Cache命中,Cache根据该虚拟地址把CPU所需的数据或指令取出,送给CPU
  • 如果Cache不命中,就要用经过MMU转换得到的主存物理地址访问主存,读出相应
    的块,装人Cache中。

Loki 只对标签做索引 索引标识名_数据_02

优点:

  • 在命中时,不需要地址转换,省去了地址转换的时间。
  • 不命中时,地址转换和访问Cache也是并行进行的,其速度比物理Cache快很多。

使用虚拟Cache存在的问题:

  1. 当进行进程切换时需要清空Cache
  • 新进程的虚拟地址可能与原进程的相同,但它们所指向的物理空间却不同

解决该问题的一种办法:

  • 在地址标识中增加一个进程标识符字段(PID)这样多个进程的数据就可以混合存放于Cache
    中,由PID指出Cache中的各块是属于哪个程序的。
  • 为了减少PID的位数,PID经常是由操作系统指定的。对于每一个进程,操作系统从循环使用的几个数字中指定一个作为其PID。
  • 这种方法有时也需要清空Cache,这种情况仅发生在当某个PID被重用的时候,即该PID以前已被分配给了某个进程,现又把它分配给另一个进程的时候。
  1. 操作系统和用户同时对同一物理地址访问采用两种以上不同形式虚拟地址访问,这些地址称为同义别名
  • 可能导致同一个数据在虚拟Cache中存在两个副本
  • 在物理Cache中不会发生,因为物理Cache首先会把虚拟地址转换到同一物理地址,从而找到同一个物理Cache块

解决方法:

  • 反别名法
  • 页着色,例如Sun公司的UNIX要求所有别名的地址最后18位都相同
  1. I/O通常使用物理地址,所以为了与虚拟Cache打交道,需要把物理地址映像为虚拟地址。

⚠️虚拟索引+物理标识

兼顾虚拟Cache的好处与物理Cache的优点(折中)

思想:

  • 标识是物理的地址
  • 虚地址的页内位移作为访问cache的索引(页内位移不作虚→实地址转换)
  • CPU发出访存请求后,在进行虚→实地址转换时,并行进行标识的读取,在完成地址转换后,再进行地址检测(把转换得到的物理地址与标识进行比较)

局限性:

  • Loki 只对标签做索引 索引标识名_数据_03容量受到限制
  • Loki 只对标签做索引 索引标识名_Loki 只对标签做索引_04

实现大容量Cache并使得索引位较少:

  • 采用提高相联度的方法
  • 原理:Cache的容量 = Loki 只对标签做索引 索引标识名_Loki 只对标签做索引_05

7.5.3 Cache访问流水化

  • 对第一级Cache的访问按流水方式组织
  • 访问Cache需要多个时钟周期才可以完成

说明:

  • 实际上不能减少Cache的命中时间,但是可以提高访问Cache的带宽

7.5.4 踪迹 Cache

背景:

  • 开发指令级并行性时,当要每个时钟周期流出超过4条指令时,要提供足够多条彼此互不相关的指令是很困难的。

踪迹 Cache

  • 存放CPU所执行过的动态指令序列
  • 包含了由分支预测展开的指令,该分支预测是否正确需要在取到该指令时进行确认。

优点:

  • 能够提高指令Cache的空间利用率。

缺点:

  • 地址映象机制复杂
  • 相同的指令序列有可能被当作条件分支的不同选择而重复存放

7.5.5 Cache优化技术总结

为了描述方便,引入以下记号:

  • “+”号:表示改进了相应指标。
  • “-”号:表示它使该指标变差。
  • 空格栏:表示它对该指标无影响。
  • 复杂性:0表示最容易,3表示最

Cache优化技术总结1——减少不命中率的方法


优化技术

不命中率

不命中开销

命中时间

硬件复杂度

说明

增加块大小

+

-

0

实现容易;Pentium 4 的第二级Cache采用了128字节的块

增加Cache容量

+

1

被广泛采用,特别是第二级Cache

提高相联度

+

-

1

被广泛采用

伪相联Cache

+

2

MIPS R10000的第二级Cache采用

牺牲Cache

+

2

AMD Athlon采用了8个项的Victim Cache

硬件预取指令和数据

+

2~3

许多机器预取指令,UltraSPARC Ⅲ预取数据

编译器控制的预取

+

3

需同时采用非阻塞Cache;有几种微处理器提供了对这种预取的支持

用编译技术减少Cache不命中次数

+

0

向软件提出了新要求;有些机器提供了编译器选项

Cache优化技术总结2——减少不命中开销的方法


优化技术

不命中率

不命中开销

命中时间

硬件复杂度

说明

使得读不命中优先于写

+

-

1

在单处理机上实现容易,被广泛采用

写缓冲合并

+

1

与写直达合用,广泛应用,例如21164,UltraSPARC Ⅲ

两级Cache

+

2

硬件代价大;两级Cache的块大小不同时实现困难;被广泛采用

请求字处理技术

+

2

被广泛采用

非阻塞Cache

+

3

在支持乱序执行的CPU中使用

Cache优化技术总结3——减少命中时间的方法


优化技术

不命中率

不命中开销

命中时间

硬件复杂度

说明

容量小且结构简单的Cache

+

0

实现容易,被广泛采用

流水化Cache访问

+

1

被广泛采用

虚拟Cache技术

+

2

对于小容量Cache来说实现容易,已被Alpha 21164和UltraSPARC Ⅲ采用

踪迹Cache

+

3

Pentium 4 采用