6.4.2. 最后期限 I/O 调度程序
最后期限 I/O 调度程序尝试为请求提供保证的延迟。请注意只有当请求进入 I/O 调度程序后方开始计算延迟(这个区别非常重要,因为可能会让程序进入睡眠等待模式以便释放请求描述符)。默认情况下读取比写入的优先权高,因为程序更容易因读取 I/O 而被阻断。
最后期限调度以批形式分派 I/O。一批是一些列连续的读或者写 I/O,按 LBA 顺序递增(单向递增)。处理完每批进程后,I/O 调度程序会检查是否有写请求已等待太久,然后决定是否开始新一批读或者写操作。只在开始新一批时检查过期请求的请求 FIFO 列表。因此,如果选择批写入,且同时有过期的读取请求,那么只有在批写入完成后方可执行读取请求。
可调参数
fifo_batch
- 这样可以决定单一批次中发出的读取或者写入数。默认为
16
。设为更高的数值可获得更好的流量,但也会增加延迟。 front_merges
- 如果您找到负载永远不会生成前合并,则您可以将这个可调参数设定为
0
。除非您已了解这个检查的代价,建议将其设定为默认值,即1
。 read_expire
- 这个可调参数可让您已毫秒为单位设定读取操作速度。默认将其设定为
500
毫秒(即半秒)。 write_expire
- 这个可调参数可让您已毫秒为单位设定写入操作速度。默认将其设定为
5000
毫秒(即五秒)。 writes_starved
- 这个可调参数控制处理单一写入批之前可以处理多少读取批。这个值越高,越倾向于读取操作。