os 5 io

ddatsh

dev #os

Linux I/O体系七层:

I/O调度器

Linus Elevator

每个设备维护一个查询请求

新请求,能合并就合并

不能合并尝试排序

既不能合并,也没有合适的位置插入,放到请求队列的最后

DeadLine

对Linus Elevator的一种改进,避免有些请求太长时间不能被处理

可以区分读和写操作,分别提供FIFO队列

提高机械硬盘吞吐量为出发点,尽量保证在有I/O请求达到最终期限的时候进行调度,适合业务比较单一并且I/O压力比较重的业务,比如下载,数据库应用等

四个队列分两类,每一类都由读和写两种队列组成

一类队列用来对请求按起始扇区序号进行排序,通过红黑树来组织,称sort_list

另一类对请求按它们的生成时间进行排序,由链表来组织,称fifo_list

CFQ

按I/O请求地址排序,而不是先来后到的顺序来进行响应

以进程为出发点,保证大家尽量公平,分配等量的带宽,适合于桌面多任务及多媒体应用

NOOP

最简单的FIFO队列,所有I/O请求大致按照先来后到的顺序进行操作

最适合于固态硬盘


SSD 经过 I/O 调度层吗?

SSD有多种接口和类型

SSD为SATA或SAS 接口,使用时,要接在SAS或RAID控制器下。这种情况下,Linux内核看到的仍是SCSI设备,SSD读写时,仍然要经过I/O调度层

非SATA/SAS接口的SSD,都不使用I/O调度层

NVMe SSD 驱动架构,可以看出NVMe SSD I/O路径并不经传统的I/O调度层