从 章中我们了解到多个磁盘驱动器通过可以通过RAID卡并行传输数据,达到单个的磁盘篇文驱动器几倍、几十倍甚至上百倍的速率。而除了并行传输数据提高系统io性能之外还有 RAID缓存--cache 。cache具有两大功能:
a) 预读:根据一定的预读算法提前将系统将要读取的数据存放到cache中,以便提高命中率,减少磁盘访问。预读有两种方式:
Read Ahead
由于数据在磁盘中经常是以一族连续的扇区组织起来的,所以如把系统所请求的扇区随后的一个扇区里的数据同时读到缓存中。
Pre-Fetch
当RAID卡发现系统要读的是先前已经读过的数据时,便将这一个数据块的数据写到CACHE里。
b) 回写:操作系统发出的一系列写 IO 命令并未真正的执行而是暂时将数据存在CACHE中,然后再一次性的将缓存的中的数据写入磁盘。这样可以达到合并小IO为大IO,同时也可以将多个小的随机IO转换为顺序写IO,减少磁盘寻道时间,提高写入效率。
读缓存虽然可以提高效率,但是也存在数据安全问题,对于WB策略,由于操作系统发出的写IO命令写入到缓存中后即被认为写入成功,而实际上数据是没有被真正写入磁盘的,此时如果掉电,缓存中的数据就会永远的丢失了,对于数据安全性要求极高的数据库应用而言这是不可接受的。目前解决掉电最好的方法是给缓存配备电池,保证存储掉电之后依然有足够的电源将缓存中的数据写入磁盘。说道这里必须介绍一下RAID 卡的三种Write policy:
Write Through :控制器只在数据成功写入磁盘后才发送写入请求完成信号给上层系统,因此WT的数据安全性要高于WB.
Write Back :在数据进入控制器高速缓存但尚未写入磁盘时,控制器会发送写入请求完成信号。回写高速缓存可以改善性能,因为后续的读取请求可以更快地从控制器高速缓存检索数据,而不必从磁盘检索。不过,回写高速缓存也需要数据安全保护磁盘,因为系统故障可能会使数据无法写入磁盘,即使控制器已发送了写入请求完成信号。此时,可能会遗失数据。其它应用程序如果假定数据在磁盘上而采取相应的操作,也可能会遇到问题。
Force Write Back:不管控制器是否有电池,写入高速缓存都会启用。如果控制器没有电池并且使用强制回写式高速缓存,在出现电源故障时就可能会发生数据丢失。