为配备NVMe SSD的主机选择正确的Linux I / O调度程序?

时间:2014-12-27 04:30:24

标签: linux linux-kernel scheduler

我们正在为少数主机编写一个高度并发的C ++软件,所有主机都配备了单个ST9500620NS作为系统驱动器和一个用于数据的英特尔P3700 NVMe Gen3 PCIe SSD卡。为了调整我们的软件,我试图更好地理解系统,我在系统周围挖掘(两个E5-2620 v2 @ 2.10GHz CPU,32GB RAM,运行CentOS 7.0)并且惊讶地发现以下内容:

[root@sc2u0n0 ~]# cat /sys/block/nvme0n1/queue/scheduler 
none

这与我在选择正确的Linux I / O调度程序方面所学到的一切相矛盾,例如来自the official doc on kernel.org

我知道NVMe是一个新手,所以现在我不会触及现有的调度程序设置。但是我对#34; none"由安装人员提出。如果有人提示我可以在哪里找到更多信息或分享您的发现,我将不胜感激。到目前为止,我花了很多时间在Google上搜索没有找到任何具体内容。

2 个答案:

答案 0 :(得分:15)

Sanne在评论中给出的答案是正确的:

"原因是NVMe绕过了调度程序。你没有使用" noop"实施:您没有使用调度程序。"

noop与none不同,noop仍然执行块合并(除非你用nomerges禁用它)

如果您使用的是nvme设备,或者启用了" scsi_mod.use_blk_mq = Y"在编译时或启动时,您绕过传统的请求队列及其关联的调度程序。

blk-mq的调度程序可能会在将来开发。

答案 1 :(得分:8)

"无" (aka" noop")是用于此设备的正确调度程序。

I / O调度程序主要用于排队有限的较慢存储设备(例如,单个机械硬盘驱动器) - I / O调度程序的目的是重新排序I / O请求以获得更早期服务的更重要的请求。对于内部队列非常大且服务速度非常快的设备(如PCIe SSD!),I / O调度程序对您没有任何好处;您最好立即向设备提交所有请求。