noop-sio-deadline-cfq-bfq io任务调度的区别
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的改进,具体算法比较复杂我就不说了,有兴趣的可以自行google
来源:>
以上就是关于noop-sio-deadline-cfq-bfq要怎样选择全部的内容,包括:noop-sio-deadline-cfq-bfq要怎样选择、deadline自动关机怎么设置、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)