Group-Commit-组提交

磁盘 I/O 是昂贵的。如果每个 sys_write 都触发完整的 Log Commit Install 流程,性能会极其低下。

xv6 的优化

xv6 允许多个系统调用(多个事务)并发地进行 log_write(只在内存里改)。 只有当:

  1. 日志空间快满了。
  2. 或者没有任何正在进行的事务了。 内核才会触发一次真正的磁盘提交

效果

这就好比凑够一车的乘客再发车。它将多次昂贵的 Synchronous Disk Write 分摊到了多个系统调用上。这就是为什么你在 log.c 里会看到复杂的 outstanding 计数器逻辑。