参考: http://blog.csdn.net/theorytree/article/details/6259104
说明: 显示所有支持的调度策略, 方框内的是当前启用的调度策略
查看当前系统支持的调度算法:
1 2 3 4 |
# dmesg | grep -i scheduler [ 0.605910] io scheduler noop registered [ 0.605916] io scheduler deadline registered (default) [ 0.605974] io scheduler cfq registered |
难道调度算法和设备本身也有关系?从下面来看,阿里云的云盘不支持任何调度策略:
1 2 |
# cat /sys/block/xvda/queue/scheduler none |
但是:
值得一提的是,Anticipatory算法从Linux 2.6.33版本后,就被移除了,因为CFQ通过配置也能达到Anticipatory算法的效果。
查资料发现, 调度策略为 ‘none’ 的现象和阿里云虚拟机没关系,和阿里云云盘没关系,和操作系统版本也没有(直接)关系,仅仅和内核版本有关系, linux内核从3.13开始引入 blk-mq 队列机制,并在3.16得以全部实现,上面看到的非‘none’的情况,内核版本都在3.10之前,为‘none’的情况是被我手动升级内核到4.4.61 的
如何验证是否启用了blk-mq机制?可以通过查看是否存在mq目录,如下:
目录不存在,说明没有启用该机制
存在mq目录,说明使用的是blk-mq机制
参考: https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq)