Group-Commit-组提交
磁盘 I/O 是昂贵的。如果每个 sys_write 都触发完整的 Log → Commit → Install 流程,性能会极其低下。
xv6 的优化
xv6 允许多个系统调用(多个事务)并发地进行 log_write(只在内存里改)。
只有当:
- 日志空间快满了。
- 或者没有任何正在进行的事务了。 内核才会触发一次真正的磁盘提交。
效果
这就好比凑够一车的乘客再发车。它将多次昂贵的 Synchronous Disk Write 分摊到了多个系统调用上。这就是为什么你在 log.c 里会看到复杂的 outstanding 计数器逻辑。