cpu内核调度模式! deadline指的不不超越
内核bfq 、cfq、 noop、 dealine的任务调度区别:
任务调度有两种相对的极端,一种是重视并提高前台任务性能,
相对的就是前后台任务均衡调度,这五种调度策略跟两个极端关系是这样:
提高前台任务性能-noop-sio-deadline-cfq-bfq
noop最强调前台性能,bfq最强调前后台性能的均衡,
这里的五个调度策略其实是i/o的调度策略!
noop是最简单的i/o调度策略,本质上就是先来先服务,意思就是哪个进程先请求i/o系统就先为哪个进程服务,有最好的连续存取性能(具体原因下面讲),
bfq会均衡考虑各进程i/o请求的任务量,适当调整完成i/o请求的顺序(也就是说服务顺序和请求顺序不一样),保进程在最短时间内能得到i/o响应(但不保证每
次响应都能完成),也就是有最好的随机存取,延时低。
noop不考虑i/o请求的任务量(通俗点说就是不考虑读写的文件是大还是小),按照i/o请求的顺序依次进行服务。这种策略在pc上的执行过程中主要有两个问题,
第一个是i/o请求任务量很大(要读写的某个文件很大)造成其他i/o请求长期得不到响应,第二个是相邻两次的i/o请求涉及的文件在磁盘上的物理位置较远造成处理这i/o请求时磁头需要频繁移动导致性能严重降低。
第一个应该很好理解,i/o任务量不管大小依次排队,当处理到一个很大的任务时,系统将一直处理下去,后面的请求就得不到响应了,
第二个问题举个例子,有4个相邻的i/o请求分别涉及1、2、3、4这四个文件,
而1、2、3、4分别位于磁盘的内圈、外圈、内圈、外圈,也是说处理这4个请求时磁盘上的磁头必须先移到内圈,
然后移到外圈,接着移到内圈再移到外圈,如此反复导致大量的时间用于移动磁头造成性能降低。
反过来看手机,一般手机上的i/o任务都不会很大,很少有需要连续读几百M甚至更大文件的情况,即便要读通常也是正在玩游戏需要读数据文件(我相信手机上不会有一边上网聊qq,手机后台还有个程序需要连续读几百M文件的情况),这时用户通常希望系统尽快把文件读完从而继续玩游戏。
由于noop在处理大任务时会使后续的i/o请求得不到响应,因此具有较好的连续性能,这个特点正好满足了上面这种用户的求。
关于上面说的第二个问题,由于手机上用的是闪存芯片,也就不存在磁头移动的问题,像其他策略那样考虑磁头的移动问题对于采用闪存芯片的存储介质完全是浪费,所以对于随机性能很好的闪存芯片来说noop是最好的i/o调度策略。
下面看bfq,bfq指的是budgetfair queuing,从名字上就能看出来这个策略对于各i/o请求是公平的(fair),不会有上面说的noop的第一种问题。
这里指的公平就是尽量使各进程的i/o请求都能得到尽快响应不会长期搁置,但因为系统资源有限,所以只能保证尽快响应但不保证可以尽快完成。
不难看出bfq适合多进程同时发出多i/o请求的状况,因为它不会像noop那样无视后续的i/o请求。直观的看就是手机程序开的很多时系统还能对各进程有不错的响应速度,
这就是为什么bfq适合多进程,可以均衡协调前后台任务性能的原因。bfq实际上是cfq的改进!