注意
本文档适用于 Ceph 开发版本。
BlueStore内部结构
小写策略
U: 完整新对象的未压缩写入。
写入新对象
kv 提交
P: 对现有对象的未压缩部分写入未使用区域。
写入现有对象的未使用块
kv 提交
W: WAL 覆盖:提交覆盖意图,然后异步覆盖。必须为块大小 = MAX(块大小, 校验和块大小) 对齐。
kv 提交
wal 覆盖(块对齐)现有对象
N: 对新对象的未压缩部分写入。最初利用率低。未来的写入将是P或W.
写入新(稀疏)对象
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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.