知识卡片
RBD多层级克隆的递归读放大与flatten优化
内容
[[RBD克隆靠CopyUp延迟复制父镜像数据|RBD 的 CopyUp]]在克隆链只有一层时代价很低,但克隆可以套克隆(clone2 的父是 clone1,clone1 的父是 rbd1),此时对 clone2 某个尚未写过的对象发起操作,客户端要先问 clone2(不存在)、再问 clone1(如果也不存在)、再一路问到最初的 rbd1 才能取到数据,每多一层克隆链就多一次递归读放大。flatten 操作的作用是把父镜像对应的快照对象直接物理拷贝一份到当前克隆卷,从此这条克隆链在这个对象上被截断,不再需要向上递归查找。这是”通过一次性预付拷贝成本,消除长期的按需查找开销”的典型权衡——链条越深、访问越频繁,这次预付就越值得。
参考来源
《Ceph源码分析》第9章《Ceph快照和克隆》