深入理解ceph crush(4)—PG至OSD的crush算法源码分析

一. 前言


上一篇《深入理解crush(3)—Object至PG映射源码分析》,分析了 Object至PG的过程,接下来的一篇是本系列 最重要 的一部分,也是crush的核心,crush算法

二. crush的基本数据结构


在开始分析代码之前,先温习下测试集群的crush map,因为crush 算法是完全按照crush map进行运算的

三. CRUSH 算法源码分析


四. 总结


最后用我们测试集群的rule还原一下选择的过程,看看crushmap有没有什么优化的空间

    rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step choose firstn 0 type osd
        step emit
    }

看看,因为我们只有一个host,所以第一步骤是不是重复的做了三次? 如果我们将选出来的host作为每一次选择osd的入口点,这样是不是就不需要重复去找host啦?理解完选择的原理后,发挥想象力,看看如何定制crushmap能做到更高效,更可靠吧。

五. 参考文档