知识卡片

同步写与AIO两种日志落盘方式的取舍

专业/工作 · 514.b.3

内容

日志落盘提供两种实现:同步方式直接调用写入再 fsync 刷盘,实现简单,但写线程会阻塞在这次 IO 上;异步方式基于 Linux 内核原生 AIO(必须配合 directIO,数据不经过页缓存直接落盘),提交后立刻返回,由专门的完成线程通过 io_getevents 轮询哪些请求已经完成,且必须按序号顺序确认完成(因为并发提交的多条日志可能乱序完成,但日志的正确性要求确认必须按 seq 顺序推进)。AIO 用更复杂的完成态跟踪机制换取了写线程不被阻塞、可以继续处理后续请求的吞吐提升——这是所有异步 IO 场景共同的代价:吞吐和延迟的改善需要额外维护一套完成状态跟踪逻辑来兜底。

参考来源

《Ceph源码分析》第7章《本地对象存储》