Scarlet Serenade

Cache and Buffer

Cache 则是系统两端处理 速度不匹配时的一种折衷策略。因为 CPU 和 memory 之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。

  • 当一个缓存中的数据被多次读取,实际上就减少了该数据从慢速设备中读取的量。
  • 如果某些数据需要产生多次写入,那么使用 cache 就可以只将最终数据写入,导致最终写入数据减少。

Buffer 是系统两端处理 速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发 I/O 的影响,起到流量整形的作用。如果一次写入 4k 对某个设备来说效率最高,那么把 buffer 定为 4k,小数据积攒到 4k 写一次,大数据分割到每个碎片 4k 多次写入,这样就是 write buffer 的用处。

在 read 的场合,本质特性在于 cache 的目标是减少读取总量每次 cache 命中都减小了读取总量。而 buffer 并不能减少读取总量,只能规整化每次读取数据的尺寸大小。

在 write 的场合,两者功能依然没变,但cache 跟 buffer 的功能在写入场合可以融合使用,所以两者可以被混淆,写入缓冲跟写入缓存往往会同时担当规整化写入尺寸以及减少写入次数的功能。

假定以后存储器访问变得跟 CPU 做计算一样快,cache 就可以消失,但是 buffer 依然存在。Translation Lookaside Buffer 名字起错了,其实它是一个 cache.