存储技术

Ch11 存储与性能 - 图1

随机访问存储器

SRAM DRAM
构成 6晶体管/cell 1电容+1晶体管/cell
tran/bit 6 1
持久性 是,只要通电 否,需定期刷新
敏感度 否,抗干扰
速度
成本 昂贵 较SRAM更便宜
应用 cache main memory

非易失存储器

非易失存储器(Nonvolatile Memories),即read-only memory, ROM

存储访问

数据流通过总线在CPU和DRAM主存之间来回

  • 总线:一组并行导线,可携带地址,数据,控制信号,多个设备可共享总线

下方图示说明指令mov A,%rax的内存读事务
image.png

硬盘

组成结构

|
- 由盘片(platters)组成,每个盘片由两面(surfaces)
- 每一个面上有数条磁道(trace)
- 每个磁道被间隙(gap)划分为扇区(sectors)


容量 = 磁盘数盘片数2磁道数扇区数 | image.png | | —- | —- |

性能参数

寻道时间 磁头定位到某trace的用时
- 通常为9ms
旋转延迟
抵达trace后,目标sector旋转到磁头下的时间
-
传输时间
数据读写用时
-
- 解释:
- 1/RPM:每分钟转数的倒数,即1转/1磁道的用时
- 1/(sectors/track):即track/sectors,每个磁道平均扇区数
- 60secs/1min: 单位转换,化为每秒钟
总存取时间
Taccess = 寻道时间+旋转延迟+传输时间
举例 转速7,200 RPM,平均寻道时间9 ms,扇区/磁道 = 400,则

存储器层次结构

image.png 层次 ⭐管理者
register<->cache compiler
L1<->L2 cache中的硬件
cache<->RAM OS
RAM<->disk OS
disk<->remote 程序

cache

高速缓存原理:对于k,每个位于k层的存储设备(小,快)作为k+1层(大,慢)的cache
image.png

  • 缓存命中(cache hit):当程序需要k+1层数据d时,它刚好被缓存在第k层中
  • 缓存不命中(cache miss):
    • 冷缓存/强制不命中/冷不命中(cold cache/compulsory miss/cold miss):第k层是空时导致
    • 冲突不命中(conflict miss):由于算法/放置策略导致
    • 容量不满足(capacity miss):当程序work set大于缓存大小

局部性原理

时间局部性

被引用过的存储器位置在未来可能会被多次引用(通常在循环中)

  • 重复引用会带来时间局部性

    空间局部性

    一个数据对象附近的块更可能会被使用

  • k-步长引用会带来空间局部性,当步长越小,空间局部性越高

对于循环:更小的循环体和更多的循环迭代次数会产生更好的时间+空间局部性

分析以下伪代码的局部性

  1. for (i = 0; i < M; i=i+1) {
  2. for (j = 0 ; j < N; j=j+1) {
  3. sum += data[i][j];
  4. }
  5. }
  • sum具有时间局部性,每次循环都会被访问一次;作为标量没有空间局部性
  • 对于循环,data[][]有较好的空间局部性,内层循环步长为1;但时间局部性较差,每个元素在函数中只会访问一次

存储器山

读吞吐量(read throughput):程序从存储系统中读数据的速率,当在s秒内读取n字节,则读吞吐量为n/s(B/s),单位通常为MB/s
存储器山:编写程序,使用循环发出一系列读请求测试读吞吐量,程序中size表示工作集大小,stride为步长,以不同的size和stride测试读吞吐量,得到吞吐量与时间和空间局部性的二维函数—存储器山

  • ⭐size越小,工作集越小,时间局部性越高
  • ⭐**stride越小,跨度越小,空间局部性越高**

下图为奔腾处理器的存储器山
image.png
解读:

  1. 山脊(ridges):

image.png

  • 图中三条山脊,实际上可见凸起为两条,对应size=16k和512k附近,表示工作集完全在L1和L2缓存中的吞吐量
  • 当吞吐量恰好和L1或L2吻合,达到最大吞吐量
  • 当>512k时,工作集开始存储在主存中,此时吞吐性能大幅下降
  1. 斜坡(slopes):

image.png

  • 随着步长的增加,不同山脊的吞吐量下降,体现了空间局部性变差的影响
  • 注意到即便在主存山脊中,吞吐量最高点也是最低点数倍,说明在时间局部性很差时,空间局部性也很重要

选择题知识点

  1. 关于引用局部性,下列正确的是②

①在compiler帮助下可精确预测未来的引用位置②是典型的程序特性③有数学证明

  1. 在存储器分层中,对应传输最大和最小数据块的层次为:

最大块:主存<->磁盘 最小块:CPU寄存器<->cache

  1. 未来的存储器分层发展趋势为:不会消失
  2. 给定代码

    1. a = b;
    2. c = d;
    3. if (e == 1) return;

    无论变量a,b,c,d,e的位置,都体现了引用(时间)局部性(重复引用)

  3. ⭐管理cache<->主存数据传输:OS

    管理register<->cache:compiler

  4. 存储分级:利用了SRAM的快速和disk的大容量