磁盘io队列溢出

时间:2016-08-12 23:06:35

标签: linux linux-kernel hard-drive

据我所知,磁盘设备有一个存储来自linux内核的读/写请求的队列。当设备没有足够快地耗尽队列(即溢出)时会发生什么?

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

有些请求会丢失吗?

2 个答案:

答案 0 :(得分:2)

  

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

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

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

E.g。想象一下,你有一个程序将数据写入文件。出于这个原因,它调用write系统调用。在操作系统中,转到文件系统驱动程序,它决定哪个磁盘扇区发生了变化。

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

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

答案 1 :(得分:0)

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