知识卡片

写操作三阶段流水线设计

专业/工作 · 513.c

内容

OSD 处理一次写请求分三个代价递增的阶段,且分别运行在不同的执行上下文里:阶段一从 [[fast_dispatch与dispatch的性能分级设计|ms_fast_dispatch]] 到入队 op_wq,跑在网络接收线程里,只做最轻量的 OSD 状态和 epoch 检查;阶段二在 op_wq 的线程池里,属于 ReplicatedPG 层,负责检查 PG 和对象状态、把请求封装成事务,这一步只决策”该怎么改”而不真正落盘;阶段三仍在线程池里,由 [[OSD到PGBackend的分层职责设计|PGBackend]] 把封装好的事务分发给从副本,并调用本地存储引擎完成落盘。检查/决策类的轻量工作放在更靠前、开销更小的阶段过滤掉无效请求,真正昂贵的网络分发和磁盘写入被推迟到最后才发生。

参考来源

《Ceph源码分析》第6章《Ceph的数据读写》