Linux I/O调度器

Linux I/O调度策略

目前Linux主要提供三种IO调度策略:CFQ(Completely Fair Queue,完全公平队列)、DEADLINE和NOOP(No operation),其中:

  • CFQ:按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应,同时对I/O请求进行合并。(CFQ 为所有进程尽量分配等量的带宽,适合于桌面多任务及多媒体应用。)
  • Deadline:DEADLINE算法是基于CFQ实现的,除CFQ原有机制外,它新增超时机制,避免IO饿死的极端情况,同时还对读写请求分别增加了FIFO队列
          FIFO(Read) > FIFO(Write) > CFQ。(DeadLine是一种以提高机械硬盘吞吐量为思考出发点的调度算法,适合业务比较单一并且I/O压力比较重的业务,比如Web服务器,数据库应用等。)
  • NOOP:该算法不会对I/O请求进行排序,只会对I/O请求进行合并。(NOOP 对于闪存设备和嵌入式系统是最好的选择。对于固态硬盘来说使用NOOP是最好的,DeadLine次之,而CFQ效率最低。)

其中,CFQ和DEADLINE主要针对的是机械盘设计的,其对IO请求进行地址重排,可以尽量减少磁盘旋转次数。但对于固态盘,这种机制增加了IO请求在IO队列中的开销。所以,

  • SSD推荐使用NOOP。因为它无需移动电子元件,I/O重排对其是一种不必要的开销,不适合CFQ和Deadline。
  • HDD使用Deadline或CFQ。这调度策略不会有明显性能差异,但在I/O压力较大情况下,CFQ会导致部分进程I/O延迟过高。

查看Linux系统的 I/O调度器

查看系统支持的I/O调度器

查看Linux系统的I/O调度器一般分成两个部分,一个是查看Linux系统整体使用的I/O调度器,另一个是查看某磁盘使用的I/O调度器。

# dmesg | grep -i scheduler
[    1.508820] io scheduler noop registered
[    1.508827] io scheduler deadline registered
[    1.508850] io scheduler cfq registered (default)

查看某块硬盘使用的I/O调度器

# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]

 

修改磁盘的I/O调度器

Linux下更改的I/O调度器很简单,不需要更新内核,无需重启计算机,可以使用shell命令修改

#其中,sdx设置为实际SSD设备
sudo echo noop > /sys/block/sdx/queue/scheduler

 

posted @ 2020-07-19 22:33  shliph  阅读(691)  评论(0编辑  收藏  举报