注意

本文档适用于 Ceph 开发版本。

BlueStore内部结构

小写策略

  • U: 完整新对象的未压缩写入。

    • 写入新对象

    • kv 提交

  • P: 对现有对象的未压缩部分写入未使用区域。

    • 写入现有对象的未使用块

    • kv 提交

  • W: WAL 覆盖:提交覆盖意图,然后异步覆盖。必须为块大小 = MAX(块大小, 校验和块大小) 对齐。

    • kv 提交

    • wal 覆盖(块对齐)现有对象

  • N: 对新对象的未压缩部分写入。最初利用率低。未来的写入将是PW.

    • 写入新(稀疏)对象

    • kv 提交

  • R+W: 部分读取块,然后 WAL 覆盖。

    • 读取(到块边界)

    • kv 提交

    • wal 覆盖(块对齐)现有对象

  • C: 压缩数据,写入新对象。

    • 压缩并写入新对象

    • kv 提交

可能的未来模式

  • F: 通过将一小块数据写入分片对象(该对象收集我们需要写入的随机、非连续数据片段)来分片扩展空间。

    • 写入分片对象(最小分配大小或更大,但我们只使用其中一块)

    • kv 提交

  • X: 对单个块进行 WAL 读取/修改/写入(类似于传统 bluestore)。无校验和。

    • kv 提交

    • wal 读取/修改/写入

映射

这非常粗略地将写入类型映射到我们遇到给定对象时所做的操作。实际上它更复杂一些,因为有多个对象需要考虑(例如,我们可能能够W进入一个或P进入另一个),但它应该传达一个大致的策略概念。

原始

原始(缓存)

校验和(4 KB)

校验和(16 KB)

压缩(128 KB)

128+ KB(覆盖)写入

U

U

U

U

C

64 KB(覆盖)写入

U

U

U

U

U 或 C

4 KB 覆盖写入

W

P | W

P | W

P | R+W

P | N (F?)

100 字节覆盖写入

R+W

P | W

P | R+W

P | R+W

P | N (F?)

100 字节追加写入

R+W

P | W

P | R+W

P | R+W

P | N (F?)

4 KB 克隆覆盖写入

P | N

P | N

P | N

P | N

N (F?)

100 字节克隆覆盖写入

P | N

P | N

P | N

P | N

N (F?)

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.