Home | Archive

The Ceph CRUSH algorithm

Allocation algorithm. given an input value, CRUSH deterministically outputs an ordered list of distinct storage targets.

Create a cluster map, which is a tree where the leaves are storage devices; call the internal nodes buckets.

Buckets have associated weights and are of four different types:

This plus implementation of allocation rules, which act as filters.

Allocation algorithm. given an input value, CRUSH deterministically outputs an ordered list of distinct storage targets.

Create a cluster map, which is a tree where the leaves are storage devices; call the internal nodes buckets.

Buckets have associated weights and are of four different types:

  • uniform (children are identical; constant-time allocation)
  • uniform (children are identical; constant-time allocation)
  • list (children are arbitrary weights; we step through it until the current node is heavier than the sum of the remaining)
  • list (children are arbitrary weights; we step through it until the current node is heavier than the sum of the remaining)
  • tree (children have arbitrary weights)
  • tree (children have arbitrary weights)
  • straw (children are assigned numbers which are multiplied by weights, and the "longest straw" is chosen)
  • straw (children are assigned numbers which are multiplied by weights, and the "longest straw" is chosen)

    This plus implementation of allocation rules, which act as filters.