简述Linux IO调度的算法

本文介绍了四种常见的IO调度算法:noop、cfq、deadline和anticipatory,并详细解释了它们的特点及适用场景。针对不同的存储设备(如SSD和传统硬盘),推荐采用不同的调度算法以优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO调度算法经常是文件系统优化的一个重要内容。


noop(不干涉算法)

noop算法,假设硬盘IO能力是足够的,有一定的IO合并优化,大致按照先来后到的顺序分配IO,适用于SSD,传统硬盘因为存在寻址,在noop算法下,性能会非常差。


cfq (完全公平算法)

cfq算法,给每个进程一个IO队列,然后轮询各个队列,达到公平的效果。适用于传统硬盘,也是长久以来的默认算法。为减少寻址,该算法尝试给IO排序,极端情况可导致IO饥饿,即如果一个程序有大量顺序读写,那么它就会插队,导致其他程序IO饥饿。CentOS 6默认使用cfq算法。


deadline (倒计时算法)

deadline算法,维护读写两个队列,每个队列都有各自的超时时间,确保每个IO在一定时间内可以得到满足,有效防止IO饥饿,适用于传统硬盘,ubuntu以及CentOS 7 都默认使用deadline算法。


查看和修改倒计时参数,详见下面的命令:

1
2
3
4
cat /sys/block/sda/queue/iosched/read_expire
cat /sys/block/sda/queue/iosched/write_expire
echo 500 >/sys/block/sda/queue/iosched/read_expire
echo 1000 > /sys/block/sda/queue/iosched/write_expire


anticipatory(预估分配算法)

anticipatory算法,为了减少IO寻址,在每个IO结束时停留一段时间,如果下一个IO正好发生在硬盘的临近位置,那么可以立即满足。适用于传统硬盘,在大量顺序读写时比较合适。


除了noop,其他三种都为磁盘寻址做了优化,适用于机械硬盘,在不同场合都有自己的用武之地,一般来说,deadline更通用一点。SSD硬盘由于没有机械指针,用noop倒是一个更好的选择。


查看硬盘sda的IO调度器

1
cat /sys/block/sda/queue/scheduler

更换IO调度器,比如deadline

1
echo deadline > /sys/block/sda/queue/scheduler









本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1772986,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值