【问题标题】:Disk io queue overflow磁盘 io 队列溢出
【发布时间】:2016-12-20 00:49:29
【问题描述】:

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

这个队列是否(逻辑上)延伸到 DRAM 中?

有些请求会丢失吗?

【问题讨论】:

  • 如果操作系统因为队列已满而无法写入磁盘设备,它将等待并稍后重试。如果设备从不排空队列,操作系统最终会报告某种设备故障。

标签: linux linux-kernel hard-drive


【解决方案1】:

这个队列是否(逻辑上)延伸到 DRAM 中?

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

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

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

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

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

【讨论】:

  • 您答案中的第一行似乎不正确。磁盘设备将重新安排读/写请求以优化磁头移动。如果整个队列都在 ram 中,那么磁盘如何检查您声称驻留在 ram 中的队列?
  • @MikeG 我认为您心中有一种特定类型的设备,它实际上具有在设备自身内存中重新安排访问的能力,这可能吗?我假设我们正在阅读有关软件队列的信息,因为您从未提及哪个设备。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 2010-11-21
    • 2013-11-21
    • 2021-06-15
    • 1970-01-01
    • 2015-05-29
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多