基于上述原因,在新一代的CPU设计当中增加了缓存模块,其目的就是降低访问内存数据的时延。使用Cache提升性能的原理在于数据访问的局部性特点,分别是区域局部性和时间局部性。
Spatial Locality:对于刚被访问的数据,其相邻的数据在将来被访问的概率高。
Temporal Locality:对于刚被访问的数据,其本身在将来被访问的概率高。
操作系统缓存
在操作系统层面很多地方都用到了缓存。而操作系统缓存的原理与CPU缓存基本一致,也就2个局部特性。在操作系统中***的缓存恐怕就是文件系统的页缓存了吧。同样参考一下图2,可以看到访问磁盘的时延是内存时延的10万倍,因此Linux操作系统中所有文件系统都采用缓存来提升其读写性能。
除了上面内存访问性能与磁盘访问性能的差异因素外,另外一个因素是机械磁盘随机访问与顺序访问的性能差异。以企业级SATA磁盘为例,随机写的带宽不到1MB/s,而顺序写可以轻松的达到100MB/s,差异多达100倍。产生如此大差异的原因主要是机械磁盘读写数据需要寻址,寻址所消耗的时间占整个请求时间的比例很大。
鉴于上述2个因素的考量,大多数文件系统都实现了基于内存的缓存。这样,用户对于文件系统的访问性能得到了大幅的提升。缓存的主要从两方面提升访问文件系统的性能,一方面是降低对磁盘的直接访问,另外一个方面是将对磁盘的随机访问尽量转换为顺序访问。
对于***个方面,文件系统数据写入缓存后即认为数据写入成功,向上层返回结果。由于访问内存的性能是访问磁盘性能的10万倍。因此,性能自然可以得到极大的提升。如图3所示的上半部分逻辑,写请求依次将数据写入缓存中。对于读请求也有类似的处理,文件系统中称为预读,也就是将数据提前读取到缓存,从而降低访问磁盘的频度。