一、概述
Linux将设备驱动纳入文件系统的范畴,所以整个结构如下图所示。在IO调度层,有三个核心对象,request、request_queue和IO scheduler(实际上是request_queue中的elevator_t * elevator),其中IO scheduler在Linux kernel 2.6有四种调度算法:noop(no opreation)、CFQ(complete fairness queueing)、deadline和anticipatory。noop是电梯调度算法,但是在高IO request下容易饥饿;CFQ高吞吐,但是如果运行的进程对延迟敏感,这个算法就不太理想;deadline对延迟敏感,但是吞吐没有CFQ好;于是基于deadline出了个anticipatory企图兼顾吞吐和延迟,但是实际不理想,在后续的内核版本中好像就去掉了这个算法。一般是直接用默认的IO调度算法,很少考虑算法的调优,但是某一个算法中的配置调优还是比较多的,相关的调优参数见:https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-io.html