我正在尝试调试使用 ext4 的系统上的 I/O 延迟问题,但我有点困惑,因为我不太了解它的日志记录。
我特别想知道的是磁盘块实际上在什么时候被写入日志中并且“真正”写入。到目前为止,我的假设是,当rename()
用户进程完成某些元数据操作(例如 a )时,文件系统将确保该操作需要触及的磁盘块位于缓冲区高速缓存中,并在缓存页面上的内存,同时创建记录更改页面的 jbd2 事务,然后在稍后的某个时间点将这些页面写入日志,然后,只有当完成后并且在稍后任意的某个时间点,才将它们写入进入正确的文件系统。如果我在这里的某个地方错了,请纠正我。
假设我在某种程度上是正确的,我想知道什么可能会触发对日志的写入。是当内核的一些更通用的 FS/VM 部分决定是时候刷新脏页了吗?是当日志中没有更多空间来分配更多事务时吗?如果内核需要从缓冲区缓存中回收一些脏页,会发生什么情况?这会强制连续触发日志写入和主写入吗?
另外,标准术语是什么?当我看到一笔交易被称为“已提交”时,更准确地说,这意味着什么?