RAID 控制卡

目前 raid 控制器基本是 LSI 的天下,分下面的几个方面纪录些基本的方面。

* write policy
write policy 决定 raid 控制器是在数据写入到 cache 后还是在写入到磁盘后发出结束写的请求。

对于 write through 来说,进行一次写操作的时间是写入 cache 加上写入磁盘的时间总和,这在很大程度上会影响磁盘的性能,主存的速度比 cache 慢的多。
而对于 write back 来说则不存在写的延时,数据被直接写入 cache,只有当 cache 满了或者需要时才会写入磁盘。当然二者各有利弊。

这里有个简单的伪代码解释了使用 write back 产生的问题:
IF !(using(UPS)) = TRUE
AND !(using(battery_on_RAID_controller)) = TRUE
AND power_feed_halt = TRUE
THEN file_corruption = TRUE.

因此,如果系统不能容忍数据的丢失,使用 write throuth,但这会造成 I/O 的下降,如果要使用 write back,尽量配备 UPS 或者给 RAID 加电池。


* read policy:
raid 配置上的 read policy 决定 raid 卡控制器是否会顺序的读取磁盘的 sector。
read ahead 策略表示当获取数据时,raid 控制器会顺序的读取逻辑磁盘上的 sector。如果数据本身就是顺序写的话,read ahead 可以提高系统的性能。 no read ahead 表示不会使用 read ahead 的策略。
adaptive read ahead 也就是会自适应的 read ahead,其条件是,最近的两次读是顺序读,否则则变成 no read ahead。


* cache policy
cache policy 决定所有的读是否先 buffer 到 cache 中。
cache I/O 表示所有的读先 buffer 到 cache 内存中。
direct I/O 表示读操作不 buffer 到 cache 中。
这里有个测评,主流的配置,direct 完胜 cache。

对于 write policy 来说,是 back 还是 through 要看具体的业务; read policy 选择 adaptive read ahead 无争议;cache 对于所有的 RAID 来说,选择 direct I/O。


* strip size VS stripe size
strip size 是可以配置的,而 stripe 则表示同类的 strips,这个由 strip 以及 RAID level、磁盘的数量决定,这个文档给出的例子是 strip 是 256KiB,stripe 则是 256×3=768KiB。
再比如这个文档中提到的, 4+1 块磁盘做 RAID5,4 块 spindles,1 块做  parity bits。因此 stripe width 就是 4,架设 stripe segment size(strip size) 为128KB,那么 stripe size 则是 4×128=512KB。
LSI 默认是 64KiB 大小的 strip size。看过不少测评,一般比较通用的是将 strip size 设置为 256 或者 512。不过这个对于性能的提升并不是十分的明显。