我有一些虚拟机运行的是 Ubuntu 基于云的映像 14.04-1 LTS 版本。我想查看虚拟机上不同 IO 调度程序的 IO 性能,所以我/sys/block/<drive>/queue/scheduler
在客户操作系统上转到 更改 IO 调度程序。通常,应该有cfq
、deadline
或noop
可供选择。但我看到的是none
。这是否意味着 Canonical 已删除基于云的映像中的 I/O 调度程序,或者none
此处的调度程序是重命名的noop
调度程序?如果系统中没有 I/O 调度程序会发生什么?所有 io 请求都按 FIFO 顺序直接发送到主机?
谢谢您的启发!
答案1
低延迟 IO 调度程序
(对于使用 NVMe 协议而非 SATA 的 SSD,此步骤不是必需的,因为它们会绕过传统的 I/O 调度程序并改用模块
blk-mq
。)默认 I/O 调度程序会将数据排队以尽量减少 HDD 上的寻道,而这对于 SSD 来说不是必需的。因此,请使用
"deadline"
仅确保批量事务不会减慢小事务速度的调度程序:安装sysfsutils
并echo "block/sdX/queue/scheduler = deadline" >> /etc/sysfs.conf
(调整 sdX 以匹配您的 SSD)重新启动或
echo deadline > /sys/block/sdX/queue/scheduler
因此,答案是:none
不是的别名noop
。none
表示“未使用调度程序”。
答案2
似乎在内核 >= 3.13 上none
不再是别名noop
。当blk-mq
输入/输出框架正在使用中;这意味着完全绕过旧的调度程序,因为blk-mq
(现在)根本没有调度程序可供选择。
在早期内核中,none
实际上是 的一个记录不全的别名noop
。请参阅这里更多细节。
答案3
None 不是 noop 的别名。
显示 None 是因为没有使用调度程序。使用 NVMe 协议而非 SATA 的 SSD 会绕过传统的 I/O 调度程序。
答案4
https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers
none (多队列) 多队列无操作 I/O 调度程序。不重新排序请求,开销最小。非常适合快速随机 I/O 设备(如 NVME)。