为什么建议在 MD RAID(mdadm)中禁用每个磁盘的 NCQ? echo 1 > /sys/block/sdX/device/queue_depth
我在许多有关 RAID 调整的文章中看到过这个技巧,但没有人解释原因。
答案1
感谢您的回答。
维基百科中提到“ NCQ can negatively interfere with the operating system's I/O scheduler, actually decreasing performance
” 并引用了这篇文章
http://www.cs.albany.edu/~sdc/CSI500/Fal10/DiskArmSchedulingPapers/a2-yu.pdf
本文指出Under a random workload, the I/O scheduler should be disabled, that is, noop, and NCQ in charge of scheduling requests entirely; when under a sequential workload, an I/O scheduler should take full charge of scheduling them instead of NCQ. It implies that the type of information that can help scheduling decision can vary according to the workload type.
“
因此,这似乎是顺序工作负载下的问题,但不是在随机工作负载下的问题。
结论是In the long run, we suggest that a new SATA 2 specification should contain a well-defined interface to fully control NCQ mechanism.
“
但是这篇文章比较旧了(2010年3月),我不知道它是否已经解决了。
答案2
NCQ 会对操作系统的 I/O 调度程序产生负面影响,实际上会降低性能;[6] 这在实践中已经在使用 RAID-5 的 Linux 上观察到。[7] NCQ 中没有机制让主机为 I/O 指定任何类型的截止期限,比如可以忽略某个请求而处理其他请求的次数。