据我了解,磁盘设备有一个队列,用于存储来自 linux 内核的读/写请求。当设备没有足够快地排空队列(即溢出)时会发生什么?
这个队列是否(逻辑上)扩展到 DRAM?
一些请求会丢失吗?
最佳答案
Does this queue extend (logically) into DRAM?
您首先认为队列在哪里?它在 RAM 中。
任何操作系统的 IO 缓冲基础结构只能用于避免阻塞任何试图执行 IO 操作的程序。
例如假设您有一个将数据写入文件的程序。为此,它调用了一个write
系统调用。在操作系统中,它进入文件系统驱动程序,它决定更改哪个磁盘扇区。
现在,更改命令进入 IO 子系统,IO 子系统将命令放入队列中。如果该队列已满,文件系统调用 blocks,即。在队列中有空间之前调用不会完成,这意味着 write
调用会阻塞。
非常简单:只要您的写入设备跟不上,您的写入程序就会在 write
调用中停止。这很合乎逻辑。这就像试图将邮件插入一个装满的邮箱。直到有人在另一端取出邮件,你才能推送新邮件,所以 postman 必须等待。
关于linux - 磁盘io队列溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927561/