前面几小节讲述linux文件系统是如何操作IO流的,本小节讲述文件系统的队列机制,主要集中在IO调度器这一层的队列调度上。
1、队列机制
linux中的队列机制主要发生在IO调度器这一层,首先给出IO调度器在整个IO栈的位置,如下图所示。它位于bio块层之下,硬件驱动层之上。pagecache刷新下来的数据会合成对应的bio,同一个任务的多个bio会下发到块层,进行IO调度。
在早期的linux系统中,抽象块层的IO调度由于底层硬件只支持单队列处理模式,因此均采用的是左图的单队列IO调度,只是内部的调度方法有所不同。但由于底层存储介质的不断更新,特别是SSD的出现,多硬件队列已经极为普遍,因此linux3.13之后,内核加入了新的队列机制,称为多队列机制,其主要思想是为每个核配置一个请求队列,从而均衡多核之间的负载,并减少对请求队列的锁竞争。
多队列机制应用的相关paper:http://kernel.dk/blk-mq.pdf
2、传统单队列机制
对于传统的硬件设备,由于一般是处理单通道,因此linux将此硬件实例化为一个请求队列,所有应用程序发送的IO请求将全部提交至该队列中,然后交由该队列进行相应的处理,例如合并,调度等。
问题:当不同的任务并发的执行&#