【问题标题】:Selecting the right Linux I/O scheduler for a host equipped with NVMe SSD?为配备 NVMe SSD 的主机选择合适的 Linux I/O 调度程序?
【发布时间】:2015-02-24 04:35:11
【问题描述】:

我们正在为几台主机用 C++ 编写高并发软件,所有主机都配备一个 ST9500620NS 作为系统驱动器和一个 Intel 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

这与我从 the official doc on kernel.org 中学到的关于选择正确 Linux I/O 调度程序的所有知识相矛盾。

我知道 NVMe 是一个新手,所以现在我不会触及现有的调度程序设置。但我真的对安装程序输入的“无”感到奇怪。如果有人对我在哪里可以找到更多信息或分享您的发现有一些提示,我将不胜感激。到目前为止,我已经花了很多时间在谷歌上搜索,但没有找到任何具体的东西。

【问题讨论】:

    标签: linux linux-kernel scheduler


    【解决方案1】:

    sanne 在 cmets 中给出的答案是正确的:

    “原因是 NVMe 绕过了调度器。你没有使用“noop”实现:你没有使用调度器。”

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

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

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

    【讨论】:

    • 现在我们有了 blk-mq 的 IO 调度器,比如 kyber。使用 kyber,您可以通过限制主机来实现可配置的读取延迟和同步写入。 patchwork.kernel.org/patch/9672023
    【解决方案2】:

    “none”(又名“noop”)是用于此设备的正确调度程序。

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

    【讨论】:

    • 从逻辑上讲,我明白你所说的。也许我应该让自己更清楚——我没有在任何地方看到这个选项“无”。我是否必须深入研究内核代码才能找到它,或者它是否记录在任何地方?
    • 其实我很好奇我把整个linux-3.18.1.tar.xz下载到我的机器上,untarzx-ed tar球,然后进入linux-3.18.1/block,做了一个@ 987654326@ 并查看了noop-iosched.c。我在任何地方都没有看到这个选项名称none。现在我更加疑惑为什么 CentOS Anaconda 安装程序使用了这个看似无证的名称。嘿,Red Hat 的人?
    • 我的环回设备将cat /sys/block/loop*/queue/scheduler 显示为none。您确定您的设备已被识别、连接、正确格式化和/或安装了某些文件系统类型(ext{3,4},btrfs)。但是,从这篇文章Tuning i/o schedulers for ssds 中,应该会显示所有标准调度程序和一个选定的调度程序。至少它应该为您提供一个使用不同调度程序进行测试的选项?
    • 有趣。您使用的是运行 Debian 或 Ubuntu 等衍生产品的机器吗?在我可以访问的所有 RHEL 节点中,我没有看到 /sys/block/loop*。我确实在运行 Ubuntu 12.04LTS 的机器上看到了这种情况,它确实显示了 none。是的。所有设备都在大量使用(一段时间以来,我们一直在使用这些 NVMe 设备运行我们的软件)。他们出现在例如mount, df -h 也输出。无论如何,现在我知道none 可能是noop 的“记录不充分”的别名,我会接受你的回答。感谢您分享您的经验和时间!
    • 原因是NVMe绕过了调度器。您没有使用“noop”实现:您没有使用调度程序。
    猜你喜欢
    • 2010-11-03
    • 2020-05-18
    • 2017-06-02
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多