磁盘io队列溢出

Disk io queue overflow

据我了解,磁盘设备有一个队列,用于存储来自 linux 内核的 read/write 请求。当设备没有足够快地排空队列(即溢出)时会发生什么?

这个队列是否(逻辑上)扩展到 DRAM?

有些请求会丢失吗?

Does this queue extend (logically) into DRAM?

您首先认为队列在哪里?它在 RAM 中。

任何操作系统的 IO 缓冲基础结构只能用于避免阻塞 任何程序试图执行 IO 操作。

例如假设您有一个将数据写入文件的程序。因此,它调用 write 系统调用。在操作系统中,它转到文件系统驱动程序,它决定更改哪个磁盘扇区。

现在,该更改命令进入 IO 子系统,该子系统将命令放入队列中。如果该队列已满,文件系统调用 blocks,即。在队列中有 space 之前调用不会完成,这意味着 write 调用会阻塞。

非常简单:只要您的写入设备跟不上,您的写入程序就会在 write 调用中停止。这很合乎逻辑。这就像试图将邮件推入一个装满的邮箱。直到另一端有人取出邮件,你才能推送新邮件,所以邮递员必须等待。

队列没有扩展到 RAM。有一个带有脏页的磁盘缓存。 OS 真的很想将这些写入磁盘。有些程序甚至可能在等待写入脏页时阻塞。当程序被阻塞时,它们会停止将更多数据写入磁盘。实际上,这是非常自我限制的。