1 / 91

第 5 章 存储层次 授课教师:车喜龙 chexilong@jlu

第 5 章 存储层次 授课教师:车喜龙 chexilong@jlu.edu.cn. 5.1 存储器的层次结构 5.2 Cache 基本知识 5.3 Cache 性能优化 5.4 主存 5.5 虚拟存储器. 5.1 存储器的层次结构. 5.1.1 从单级存储器到多级存储器 从用户的角度来看,存储器的 三个主要指标: 容量、速度和价格(指每位价格) 人们对这三个指标的要求:容量大、速度快、价格低 三个要求的相互关系 速度越快,每位价格就越高; 容量越大,每位价格就越低,但速度越慢。 存储器系统的设计矛盾 高性能速度要求:容量小,价格高

duff
Download Presentation

第 5 章 存储层次 授课教师:车喜龙 chexilong@jlu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 存储层次 授课教师:车喜龙 chexilong@jlu.edu.cn

  2. 5.1 存储器的层次结构 5.2 Cache基本知识 5.3 Cache性能优化 5.4 主存 5.5 虚拟存储器

  3. 5.1 存储器的层次结构 5.1.1 从单级存储器到多级存储器 • 从用户的角度来看,存储器的三个主要指标: 容量、速度和价格(指每位价格) • 人们对这三个指标的要求:容量大、速度快、价格低 • 三个要求的相互关系 • 速度越快,每位价格就越高; • 容量越大,每位价格就越低,但速度越慢。 • 存储器系统的设计矛盾 • 高性能速度要求:容量小,价格高 • 用户性价比要求:容量大,价格低

  4. 5.1 存储器的层次结构 5. 解决方法: 采用多种存储器技术,构成所谓的存储层次,使得从CPU看来,整个存储系统速度接近于第一层,而容量接近于最后一层。

  5. 5.1 存储器的层次结构 5.1.2 存储层次的性能参数 • 平均每位价格 C • C= 总价格/总容量 • 命中率与失效率 H&F (Hit Rate, Fault Rate) • H=访问命中次数/对存储系统的总访问次数 • F=访问失效次数/对存储系统的总访问次数 • H + F = 1 • 平均访存时间 T • T=命中率 x 命中时间 + 失效率 x 失效时间 • T=命中时间 + 失效率 x 失效开销 • 失效时间= 命中时间 + 失效开销

  6. 5.1 存储器的层次结构 • 存储层次的性能计算例子 • 假设某计算机系统包含两级存储层次M1和M2 • M1的参数:价格C1,访问次数N1,访问时间T1,容量S1 • M2的参数:价格C2,访问次数N2,访问时间T2(包含M2的操作时间和M2向M1传输的时间),容量S2 • 则如何计算整个存储层次的C,H,F, T ? 解: • C = (C1 x S1 + C2 x S2) / (S1 + S2) • F2=H1=N1/ (N1+N2) F1=H2=N2/ (N1+N2) H=H1+H2=1 F=1-H =0 实际只看重 F1和H1 • T = H1 x T1 + (1-H1) x (T1+T2) • 解毕.

  7. 5.1 存储器的层次结构 5.1.3 “Cache-主存-辅存”存储层次

  8. 5.1 存储器的层次结构 “Cache-主存”与“主存-辅存”层次的区别 存储层次 “主存-辅存”层次 “Cache -主存”层次 比较项目 为了弥补主存容量的不足 目  的 为了弥补主存速度的不足 主要由专用硬件实现 主要由软件实现 存储管理实现 访问速度的比值(第一级和第二级) 几百比一 几比一 几十个字节 几百到几千个字节 典型的块(页)大小 CPU对第二级的访问方式 可直接访问 均通过第一级 不切换 切换到其他进程 失效时CPU是否切换

  9. 5.1 存储器的层次结构 数据传递,空间分割与地址计算 • 数据传递 • CPU与Cache之间数据传递的单位:字节 如1B • Cache与主存之间数据传递的单位:块 如4B • 主存与辅存之间数据传递的单位:段或页 如4KB • 整个存储层次以内存为基础进行分割 • 内存空间分为M个页,每个页分为N个块,每个块内有P个字节。 • 内存空间中共有MxN块,MxNxP个字节 • Cache空间分为n个块,cache块大小=内存块大小,n<MxN • 辅存空间分为K个页,辅存页大小=内存页大小,M<K • 主存地址按位划分为3个部分: • {标识Tag,索引Index,偏移Offset} 例{10,01,111} 第9块第7B • Tag和Index的位数随系统结构不同而不同,两个字段拼起来得到的数值,即为该地址所属的内存块地址。 • Offset表示待访问的字节是该块中的第几个字节。

  10. 5.1 存储器的层次结构 5.1.4 存储层次研究的四个问题 • 映像规则 • 当把一个数据集合(块或页)从下一层存储器调入上一层存储器时(更靠近CPU) ,该集合可以放在哪些位置上 • 查找算法 • 当所要访问的数据集合在某一层存储器中时,如何找到该块 • 替换算法 • 当把一个数据集合(块或页)从下一层存储器调入上一层存储器时(更靠近CPU),根据映像规则需要放在特定位置上,但该位置已经被使用,则应该替换掉哪个位置 • 写策略 • 当把一个更新的数据集合写入某一层存储器中时,是否将该更新传递到各个下层存储器中(更远离CPU)

  11. 5.2 Cache的基本知识 Cache特征 • 速度快:可看做是CPU的一部分,访问开销为几个周期 • 容量小:可缓存n个块,n远小于内存总块数MxN(上百vs上万) • 原理:CPU发出访存请求,如果cache中恰好缓存了,则不必访问内存,直接从cache获得数据。 5.2.1映象规则 • 全相联映象 • 直接映象 • 组相联映象

  12. 5.2 Cache的基本知识 • 全相联映象 • 全相联:主存中的任一块可以被放置到Cache中的任意一个位置    • 举例:阅览室位置 ── 每人可以随便坐任意椅子 • 特点:空间利用率最高,冲突概率最低,实现最复杂。 • 主存的第i块 映象到 Cache的第j块,j=1..n • j=任意x,x属于{1,2,…,n} • 内存地址的位分布{标识Tag,索引Index,偏移Offset} • Index共0位, 主存块地址完全由Tag部分构成

  13. 5.2 Cache的基本知识 主存i Cache j=任意x,x属于{1,2,…,n}

  14. 5.2 Cache的基本知识 • 直接映象 • 直接映象:主存中的每一块只能被放置到Cache中唯一的一个位置,每个cache位置被循环分配给内存块 • 对比:阅览室位置 ── 每人只能坐固定椅子 • 特点:空间利用率最低,冲突概率最高,实现最简单。 • 主存的第i块 映象到 Cache的第j块,j=1..n • j=i mod n • 内存地址的位分布{标识Tag,索引Index,偏移Offset} • 假设cache中一共有2m个块,即n=2m • Index共m位,主存块地址由Tag和Index两部分构成

  15. 5.2 Cache的基本知识 主存i Cache j= i mod n 本例中, N=8=23, 则m=3,Index3位 主存块地址 i=Tag+Index 随主存块地址不断增加, 其低3位呈现0-7的循环, 该块在cache中映像位置 也正好会呈现0-7的循环。 因此可以用块地址的低3位来判断对应的cache位置, 即Index功能。

  16. 5.2 Cache的基本知识 • 组相联映象 • 组相联:主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置。每个组被循环分配给内存块 • 对比:阅览室位置 ── 一个桌子对应多把椅子。每人只能坐固定桌子,但可以坐在这个桌子的任意椅子 • 特点:是直接映象和全相联的性能折中 • 全相联 空间利用率最高,冲突概率最低,实现最复杂。 • 直接相联 空间利用率最低,冲突概率最高,实现最简单。 • 主存的第i块 映象到 Cache的第j块,j=1..n • j=任意x,x属于cache的第k分组,k=i mod G (cache组数) • 内存地址的位分布{标识Tag,索引Index,偏移Offset} • 假设cache中一共有2m个块,即n=2m • 假设cache中一共有2p个组,即G=2p p<m,G<n • Index共p位,主存块地址由Tag和Index两部分构成

  17. 5.2 Cache的基本知识 主存i Cache j= 任意x,x属于第k组。 k=i mod G 本例中, G=4=22, 则p=2,Index2位 主存块地址 i=Tag+Index 随主存块地址不断增加, 其低2位呈现0-3的循环, 该块在cache中映像组号 也正好会呈现0-3的循环。 因此可以用块地址的低2位来判断对应的cache组号, 即Index功能。

  18. 5.2 Cache的基本知识 • t路组相联 • 每组中有 t 个块 t=n/G 称为相联度。 • 相联度越高,Cache空间的利用率就越高,块冲突概率就越低,失效率也就越低。 • 大多数计算机的Cache: t ≤4

  19. 5.2 Cache的基本知识 5.2.2 查找算法 • Cache的结构: • 每个cache块对应4项信息,分布在2张硬件表格中 • 2张表条目相等,一一对应 • Data缓存的数据,Tag数据地址的Tag字段 • EF有效位Effective Flag,DF修改位Dirty Flag

  20. 5.2 Cache的基本知识 2. Cache的查找 • 查找原理 • 当CPU访问Cache时,如何确定Cache中是否已经缓存了所要访问的块?若已缓存,如何确定其在cache中的位置?如何获取数据? • 用Cache Lookup Table(目录表)匹配主存地址 • 用Cache Data Table(数据表)获取对应的数据 • 查找方法 • 和谁比?候选位置的确定 • 如何比?匹配条件的判断

  21. 5.2 Cache的基本知识 候选位置的确定 全相联:所有cache块均为候选位置 直接映像:只有一个cache块为候选位置,用index确定 组相联:只有一组cache块为候选位置,用index确定

  22. 5.2 Cache的基本知识 匹配条件的判断 • 全相联 • For any X in Cache, (X.Tag==A.Tag) & (X.EF==1) • 直接映像 • 用indeX计算唯一cache块X, (X.Tag==A.Tag) & (X.EF==1) • 组相联 • 用indeX计算唯一cache组k,for any X in 组k, (X.Tag==A.Tag) & (X.EF==1)

  23. 5.2 Cache的基本知识 3. Cache的查找过程优化 • 基于主候选位置(MRU块)的顺序查找 • 局部性原理,刚刚用过的cache块最可能被复用,即为MRU(Most Recently Used) • 多个候选位置的循环查找,从MRU开始,优于从顺次第一个开始 • 并行查找 • 相联存储器 • 单体多字存储器+比较器

  24. 5.2 Cache的基本知识

  25. 5.2 Cache的基本知识

  26. 5.2 Cache的基本知识 5.2.3 替换算法 • 替换原理:当要从内存新调入一块,而Cache中对应的一个或多个候选位置均已被占满时,替换哪一块? • 直接映象Cache的替换 • 很简单,因为只有一个块,别无选择。 • 组相联和全相联Cache的替换 • 有多个块供选择,主要的替换算法有三种: • 随机法或循环法,实现简单,没有利用局部性 • 先进先出法(FIFO),部分利用局部性 • 最近最少使用法(Least Recently Used, LRU),充分利用局部性

  27. 5.2 Cache的基本知识 对于大容量cache,LRU和随机法的失效率几乎没有差别。

  28. 5.2 Cache的基本知识 5.2.4 写策略 • 访存操作 • 统计结果表明,对于一组给定的程序: • load指令:26%,store指令:9% • “写”在所有访存操作中所占的比例: 9%/(100%+26%+9%)≈7% • “写”在访问Cache操作中所占的比例: 9%/(26%+9%)≈25% 举例:100条指令构成的序列,其中9条st,26条ld 运行时,取指令访存100次,执行指令访存9+26次

  29. 5.2 Cache的基本知识 • 读操作 • 读操作占的比例大,优化能够明显提高性能 • 优化方法:从目录表读Tag与从数据表读Data并行执行,命中与读同时进行 • 无论从内存读还是从cache读,读操作不改变对应存储单元的值 • 写操作 • 虽然写操作占的比例小,但高性能cache也要重视写操作的性能 • 不能采用读操作的优化方法,命中与写只能串行,写比读开销大 • 写操作要改变对应存储单元的值,而且会导致内存和cache内容的不一致,即产生dirty cache块 • 如何保证内存和cache内容的一致性,是写策略解决的问题

  30. 5.2 Cache的基本知识 • 两种写策略 • 写直达法 • 执行“写”操作时,不仅写入Cache,而且也写入存储器 • 易于实现,一致性好,写操作返回较慢 • 优化方法:写入cache后,接着写入写缓冲(WB,Write Buffer,相当于后行写数站),立刻返回,由写缓冲慢慢将数据写入内存。 • 替换写回法 • 执行“写”操作时,只写入Cache,并将对应DF位置1。 • 当任意一个Cache块将要被替换时,检查其DF位 • 如果DF位为1,则先将该Cache块写回存储器,再进行替换动作; • 如果DF位为0,则不用写回存储器,直接进行替换动作  • 对存储器带宽要求较低,写操作返回较快,写内存的开销转移给了cache块替换时写内存的开销

  31. 5.2 Cache的基本知识 • Cache写失效的处理方法 • 当CPU发出一条内存写的指令,且该地址没有命中cache,则发生了cache写失效。 • 经过cache法(按写分配):发生写失效时,先把地址对应的内存块调入Cache,再进行写操作。 • 绕过cache法(不按写分配):发生写失效时,不把地址对应的内存块调入Cache,而是绕过cache直接将数据写入存储器 • 写策略与写失效处理的搭配 • 写直达法+经过cache 不常用 • 写直达法+绕过cache 常用 • 替换写回法+经过cache 常用 • 替换写回法+绕过cache 不常用

  32. 5.2 Cache的基本知识 5.2.5 一个Cache结构实例 DEC的Alpha AXP21064中的内部数据Cache • 容量:8KB = 块大小32B x 块数256 • CPU字宽:每个字64bit,因此一个Cache块含4个字(32*8/64) • 直接映象+写直达+绕过cache+写缓冲器(4个块,块大小32B) • 主存地址34bit={Tag-21bit,Index-8bit,Offset-5bit} • Index位数如何计算?2Index=Cache块总组数=Cache容量/组内块数x每块大小 • Offset位数如何计算?每个块内32B,内存按字节寻址,所以字节偏移Offset为5位CPU每次取一个字,而不是一个字节,第一个字偏移0,第二个字偏移为8,第3个字偏移为16,第4个字偏移24,转成二进制后offset低3位均为000,因此Offset高2位为字偏移

  33. 5.2 Cache的基本知识 数据 Cache 工作 过程 Cache失效怎么办?

  34. 5.2 Cache的基本知识 指令Cache • 以上结构中数据字段存放的是指令字 • 只有读操作,没有写操作 数据Cache • 以上结构中数据字段存放的是数据字 • 既有读操作,又有写操作 混合Cache • 指令cache与数据cache使用同一套硬件 • 对于ld/st指令,取指令和指令执行结构冲突 分离Cache • 指令cache与数据cache各自使用一套硬件 • 针对各自的特点进行优化,并设置不同的参数 • 如容量,相联度等

  35. 5.2 Cache的基本知识 失 效 率 的 比 较 容 量 指令 Cache 数据 Cache 混合 Cache 1 KB 13.34% 3.06% 24.61% 9.78% 2.26% 20.57% 2 KB 4 KB 1.78% 15.94% 7.24% 1.10% 4.57% 8 KB 10.19% 0.64% 6.47% 2.87% 16 KB 32 KB 0.39% 1.99% 4.82% 64 KB 0.15% 3.77% 1.36% 128 KB 2.88% 0.95% 0.02%

  36. 5.2 Cache的基本知识 分离Cache平均失效率如何计算? • 指令Cache的访问百分比×指令Cache的失效率+数据Cache的访问百分比×数据Cache的失效率 容 量 指令 Cache 数据 Cache 混合 Cache 1 KB 13.34% 3.06% 24.61% 2.26% 20.57% 2 KB 9.78% 举例 分离Cache性能 v.s.混合Cache性能 • 2KB混合Cache v.s. 1KB数据Cache+ 1KB指令Cache • 3.06%*指令Cache的访问百分比+24.61%*数据Cache的访问百分比v.s. 9.78%

  37. 5.2 Cache的基本知识 5.2.6 Cache的性能分析 • 失效率 • 平均访存时间 • 存储系统性能的评价指标 • 该指标比失效率更有效 • 计算公式: 平均访存时间 = 命中时间+失效开销×失效率 = 命中时间× 命中率 + (命中时间+失效开销) × 失效率

  38. 5.2 Cache的基本知识 例5.1 假设: (1)一段程序运行时,75%的访存为取指令 (2)取指令的Cache命中时间为1个时钟周期 (3)访存指令的Cache命中时间为1个时钟周期 (4)Cache失效开销为50个时钟周期 (5)分离Cache,指令Cache和数据Cache容量均为16KB (6)混合cache,容量为32KB (7)采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。 问:根据下表的失效率,哪种Cache的失效率更低?平均访存时间各是多少? 容 量 指令 Cache 数据 Cache 混合 Cache 0.64% 6.47% 2.87% 16 KB 32 KB 0.39% 1.99% 4.82%

  39. 5.2 Cache的基本知识 解:(1)分离Cache的总体失效率为:     (75%×0.64%)+(25%×6.47%)=2.10% 32KB混合Cache的失效率只有1.99%,性能更好。 (2)平均访存时间=   指令访存百分比×(指令Cache命中时间+指令失效率×失效开销)+ 数据访存百分比×(数据Cache命中时间+数据失效率×失效开销) 所以,两种结构的平均访存时间分别为: T分离 = 75%×(1+0.64%×50)+25%×(1+6.47%×50)=2.05 T混合 = 75%×(1+1.99%×50)+25%×(1+1+1.99%×50)=2.24 因此,尽管分离Cache的实际失效率比混合Cache的高,但其平均访存时间反而较低。因为分离Cache提供了两个端口,消除了结构冲突。 解毕。

  40. 5.2 Cache的基本知识 • 程序执行时间 程序执行的CPU时间=程序执行的时钟周期数 × 时钟周期时间 (A) 程序执行的时钟周期数=CPU运算的周期数C1+CPU等待数据而停顿的周期数C2 (B) Cache算作CPU一部分,因此Cache命中时间归入C1,Cache失效时间归入C2 C1的计算方法:C1=IC×理想CPI (C) C2有两种计算方法: C2A=读的次数×读失效率×读失效开销+写的次数×写失效率×写失效开销 (D) C2B=总访存次数×失效率R×Cache失效开销 (E) R有2种计算方法: RA=每次访存的平均失效次数=总失效次数/总访存次数 (F)(结构相关) RB=每条指令的平均失效次数=总失效次数/总指令数 (G)(结构无关)

  41. 5.2 Cache的基本知识 例5.2假设Cache失效开销为50个时钟周期,当不考虑存储器停顿时,所有指令的执行时间都是2.0个时钟周期,访问Cache失效率为2%,平均每条指令访存1.33次。试分析Cache对性能的影响。 解:程序执行的CPU时间=程序执行的时钟周期数×时钟周期时间 =(C1+C2)×时钟周期时间 =(IC×CPI+总访存次数×失效率×Cache失效开销)×时钟周期时间 =[IC×CPI +IC ×(总访存次数/IC)×失效率×Cache失效开销]×时钟周期时间 =IC×[CPI +(总访存次数/IC)×失效率×Cache失效开销]×时钟周期时间 =IC×[CPI + 平均每条指令访存次数×失效率×Cache失效开销]×时钟周期时间 有cache,则上式=IC×[2+1.33×2%×50]×时钟周期时间=IC×3.33×时钟周期时间 无cache,则上式=IC×[2+1.33×100%×50]×时钟周期时间=IC×68.5×时钟周期时间 可以看出,Cache的存在,将平均CPI从68.5减少到3.33,程序加速了约20倍。 解毕。

  42. 5.2 Cache的基本知识 • Cache失效开销中的Amdahl定律 • 由前例可知,程序执行的CPU时间=程序执行的时钟周期数×时钟周期时间=IC×实际CPI×时钟周期时间实际CPI=理想CPI + 平均每条指令访存次数×失效率×Cache失效开销 • 理想CPI越低,Cache失效开销在实际CPI中所占的比例越大,即相对影响越大 • Cache失效开销时间=CPU等待数据而停顿的周期数C2×时钟周期时间 • 内存硬件一旦确定,Cache失效开销时间就确定了,因此C2和时钟周期时间形成反比关系,即时钟周期时间越短(时钟频率越高),C2中含有的时钟周期数越多。换句话说: • 时钟频率越高,Cache失效开销在实际CPI中所占的比例越大,即相对影响越大 因此,Cache对于低CPI、高时钟频率的CPU来说更加重要。 那么,是不是平均访存时间越短,CPU的执行时间就越短呢? 例子见下页

  43. 5.2 Cache的基本知识 例5.3比较直接映象Cache和2路组相联Cache对CPU的性能的影响。假设: (1)两种Cache容量均为64KB,块大小都是32字节,命中时间为1个时钟周期,失效开销都是70 ns。 (2)直接映象Cache的失效率为1.4%,2路组相联Cache的失效率为1.0%。 (3)理想Cache(命中率为100%)情况下的CPI为2.0,时钟周期为2ns,平均每条指令访存1.3次。 (4)在n-路组相联Cache中,必须增加一个n:1多路选择器,用于根据标识匹配结果从相应组的块中选择所需的数据。对于组相联Cache,由于多路选择器的存在而使CPU的时钟周期增加到原来的1.1倍。 2-路组相联Cache中的2:1多路选择器见下页图。 先求平均访存时间,然后再计算CPU性能。

  44. 5.2 Cache的基本知识

  45. 5.2 Cache的基本知识 解: 先计算平均访存时间T=命中时间+失效率×失效开销 T1路=2.0+(0.014×70)= 2.98 ns T2路=2.0×1.1+(0.010×70)= 2.90 ns 再计算程序执行的CPU时间 =IC×[CPI +(总访存次数/IC)×失效率×Cache失效等待周期数]×时钟周期时间 =IC×[CPI×时钟周期时间 +(总访存次数/IC)×失效率×Cache失效等待周期数×时钟周期时间] =IC×[CPI×时钟周期时间 +(总访存次数/IC)×失效率×Cache失效开销时间] CPU时间1路 = IC×[2.0×2+(1.3×0.014×70)] = 5.27×IC CPU时间2路 = IC×[2.0×2×1.10+(1.3×0.010×70)] = 5.31×IC 2路组相联Cache平均访存时间较短,CPU的执行时间却较长。 Cache设计时,要以减少CPU的执行时间为最终目标。 解毕。

  46. 5.3 Cache性能优化 Cache性能优化的出发点: 平均访存时间=命中时间+失效率×失效开销 由上式可知,能够从三个方面改进Cache的性能: • 降低Cache失效率(重点介绍) • 减少Cache失效开销(略) • 减少Cache命中时间(略)

  47. 5.3 Cache性能优化 • Cache失效的分类 • 强制性失效(Compulsory miss) (冷启动失效/首次访问失效) • 当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache。 • 容量失效(Capacity miss ) • 如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,又重新被访问。如果单个cache块足够大,则不存在容量失效。 • 冲突失效(Conflict miss) (碰撞失效,干扰失效) • 在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又重新被访问。

  48. 5.3 Cache性能优化 • 三种失效所占的比例

  49. 5.3 Cache性能优化 • 关于失效率的经验规则: • 相联度越高,冲突失效就越少;全相联降低主频 • 强制性失效和容量失效不受相联度的影响; • 强制性失效不受Cache容量的影响,但容量失效却随着容量的增加而减少; • 大小为N的直接映象Cache的失效率约等于大小为N/2的2路组相联Cache的失效率。

  50. 5.3 Cache性能优化 • 降低Cache失效率的典型方法 • 增加块大小(减少强制性失效) • 提高相联度(减少冲突失效) • 增加Cache总容量(减少容量失效) • Victim Cache(减少冲突失效) • 伪相联映像Cache • 硬件预取 • 编译器/程序 控制的预取 • 编译器/程序 优化 • 许多降低失效率的方法会增加命中时间或失效开销 平均访存时间=命中时间+失效率×失效开销

More Related