知识卡片

环形日志用多个序号指针管理生命周期

专业/工作 · 514.b.2

内容

FileJournal 把日志文件当环形缓冲区使用,用几个递增的序号指针共同刻画日志的生命周期:writing_seq 是正在写入还未完成的最新序号,journaled_seq 是已经确认提交成功的最大序号,last_committed_seq 是已经确认应用到磁盘、可以安全丢弃的日志的最新序号。多条待写日志会先攒在 writeq 队列里,由后台线程一次性合并(prepare_multi_write)成一次磁盘写操作再提交,减少落盘次数;日志同步(committed_thru)清理旧日志时也不做真正的物理删除,只是把 header.start 指针往前移动,让写指针追上后自然覆盖旧数据。三个指针 + 移动指针代替物理擦除,是环形缓冲区管理容量和进度的标准手法,同时批量合并进一步把多次小 IO 压成一次大 IO。

参考来源

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