第二章 存储器层次结构设计
存储器层次结构
多级存储器层次结构
典型服务器多级存储器容量和访问速度(2012年)
- CPU寄存器: 1KB/300ps
- L1 cache: 64KB/1ns
- L2 cache: 256KB/3-10ns
- L3 cache: 2-4MB/10-20ns
- (存储器总线)内存: 4-16GB/50-100ns
- (IO总线)磁盘: 4-16TB/5-10ms
典型个人移动设备多级存储器容量和访问速度(2012年)
- CPU寄存器: 0.5KB/500ps
- L1 cache: 64KB/2ns
- L2 cache: 256KB/10-20ns
- (存储器总线)内存: 256-512MB/50-100ns
- 磁盘: 4-16TB/25-50us
缓存缺失场景:
- 强制(Compulsory): 强制缺失,如一个数据块的第一次访问,一定需要将这个数据块调入缓存中
- 容量(Capacity): 容量缺失,如果缓存不能包含程序运行时所需的全部块,定会发生有些块被放弃,然后再被调入
- 冲突(Conflict): 冲突缺失,如果块放置策略不是全相联,定会发生多个块映射到同一个组/块中,需放弃再调入
- 一致性(Coherency): 一致性缺失,多处理器多缓存一致性的缓存刷新。
存储器平均访问时间 = 命中时间 + 缺失率 * 缺失代价
缓存优化方法
6种基本的缓存优化方法
- 增大块以降低缺失率:利用空间局部性,增大块减少强制缺失,但增加了缺失代价,可能增大容量缺失或冲突缺失
- 增大缓存降低缺失率:减少容量缺失,但是可能会延长命中时间
- 提高相联程度降低缺失率:减少冲突缺失,但是可能会延长命中时间
- 多级缓存降低缺失代价:加快缓存命中速度,跟上处理器时钟频率
- 为读取缺失指定高于写入操作的优先级,以降低缺失率
- 缓存索引避免地址转换,降低命中时间
10种缓存性能高级优化方法
- 缩短命中时间
- 增加缓存带宽
- 降低缺失代价
- 降低缺失率
- 通过并行降低缺失代价或者缺失率
小而简单的第一级缓存,缩短命中时间,降低功耗
- 低相联度 -> 缩短命中时间,降低功率
- 缓存命中关键3个步骤:
- 使用地址中的索引确定标记存储器的地址;
- 将读取的标签值与地址进行比较
- 若为组相联,设置多路转换器选择正确的数据项
- 缓存命中关键3个步骤:
- 低相联度 -> 缩短命中时间,降低功率
路预测缩短命中时间
- 减少冲突缺失,保持直接映射缓存命中速度的方法
- 缓存中另外保存了一些位,用于预测下一次缓存访问组中的路或块
实现缓存访问的流水化,以提高缓存带宽
采用无阻塞缓存,提高缓存带宽
- 等待数据缓存返回缺失数据时,处理器可以继续从指令缓存中提取指令 -> 缺失时仍然命中,降低实际缺失代价
- 重叠多次缺失,进一步降低实际缺失代价
采用多种缓存以提高缓存带宽
- 将缓存划分成多个相互独立、支持同时访问的缓存组
关键字优先和提前重启动以降低缺失代价
- 关键字优先:从存储器中请求缺失的字,在其到达缓存后立即发送给处理器
- 提前重启动:以正常顺序提取字,只要块中的被请求字到达缓存,就立即将其发送给处理器
合并缓冲区降低缺失代价
- 直写/写回写合并写入下一层缓冲区
编译器优化降低缺失率
- 循环交换
- 分块
对指令和数据进行硬件预取,降低缺失代价或缺失率
用编译器控制预取,降低缺失代价或缺失率
保护:虚拟存储器和虚拟机
真正的安全和保密需要在计算机体系结构和系统软件方面均有所创新
虚拟内存保护进程
- 分页机制,页表项添加保护性限制来控制进程的读写权限
- TLB(Translation Lookaside Buffer)提升性能
操作系统和体系结构联合起来就能使进程共享硬件而不会相互干扰,体系结构必须限制用户进程能够访问的资源,允许操作系统进程能够访问更多资源:
- 提供至少有两种模式,能够指出当前运行的进程是用户进程还是操作系统进程(内核进程/管理进程)
- 提供部分处理器状态信息,用户进程可以读但是不能写
- 提供用户模式与管理模式的转换机制,即系统调用和返回机制(用户态/内核态转换机制)
- 提供限制存储器访问机制
虚拟机监视器(VMM)的要求:
- VMM必须控制特权状态的访问、地址转换、I/O、异常和中断
缓存数据一致性
- 多处理器程序的性能取决于系统共享数据的性能
- IO缓存一致性问题,通常只有在L1缓存中采用直写方式,L2之后的存储层次中采用写回方式