如何从 IO 调度程序到 scsi 低级驱动程序限制 IO

如何从 IO 调度程序到 scsi 低级驱动程序限制 IO

IO调度器默认的队列深度为128。块设备的队列深度默认为32。 IO 在哪里缓冲。 IO 调度程序是否将所有 IO 发送到 scsi 低级驱动程序,并且驱动程序缓冲 IO。或者其他地方有节流。

答案1

IO调度器是“不节省工作的”。也就是说,他们可以选择不立即发送 IO。有一种称为“idling”的 IO 调度技术。它对于旋转磁盘(即非 SSD)特别有用。 CFQ 和 BFQ 调度程序都使用空闲。


另请记住,write() 调用可以在页缓存中缓冲,然后再作为 IO 请求写回。而在块设备队列下面,可能还有一个设备写缓存。这一切都非常复杂,并会导致各种奇怪的行为:-)。

请注意,并非所有块设备的默认队列深度均为 32,这只是 SATA NCQ 的常见队列深度。 SCSI TCQ 设备可以允许更多,至少标准是这样。 (NVMe 设备绝对可以允许更多,并且也可以有多个并行队列)。

相关内容