BlueStore源码分析之对象IO

前言

BlueStore中的对象非常类似于文件系统中的文件,每个对象在BlueStore中拥有唯一的ID、大小、从0开始逻辑编址、支持扩展属性等,因此对象的组织形式,类似于文件也是基于Extent。

稀疏写

我们知道一个文件的逻辑空间上是连续的,但是真正在磁盘上的物理空间分布并不一定是连续的。同时我们也会使用lseek系统调用,使得文件偏移量大于文件的长度,此时再对文件写入,便会在文件中形成一个空洞,这些空洞中的字节都是0。空洞是否占用磁盘空间是有文件系统决定的,不过大部分的文件系统ext4、xfs都不占磁盘空间。我们称部分数据是0同时这部分数据不占磁盘空间的文件为稀疏文件,这种写入方式为稀疏写。

BlueStore中的对象也支持稀疏写,同时支持克隆等功能,所以对象的数据组织结构设计的会相对复杂一点。

名词解释

•Collection:PG在内存的数据结构。
•bluestore_cnode_t:PG在磁盘的数据结构。
•Onode:对象在内存的数据结构。
•bluestore_onode_t:对象在磁盘的数据结构。
•Extent:一段对象逻辑空间(lextent)。
•extent_map_t:一个对象包含多段逻辑空间。
•bluestore_pextent_t:一段连续磁盘物理空间。
•bluestore_blob_t一片不一定连续的磁盘物理空间,包含多段pextent。
•Blob:包含一个bluestore_blob_t、引用计数、共享blob等信息。

Onode结构

BlueStore的对象内部结构如下图:
在这里插入图片描述
BlueStore的每个对象对应一个Onode结构体,每个Onode包含一张extent-map,extent-map包含多个extent(lextent),每个extent负责管理对象内的一个逻辑段数据并且关联一个Blob,Blob包含多个pextent,最终将对象的数据映射到磁盘上

onode

数据结构主要包含两部分:内存数据结构、磁盘数据结构。
Onode本身和FileStore的对象一样,主要包含四部分:数据、扩展属性、omap头部、omap条目。
omap和扩展属性很类似,只不过扩展属性大小有限制,omap没有限制。BlueStore把扩展属性和Onode一起保存,omap分开保存。

// 内存数据结构
struct Onode {
	// reference count
	std::atomic_int nref;
	
	// onode 对应的PG
	Collection *c;
	
	// onode磁盘数据结构
	bluestore_onode_t onode;
	
	// 有序的Extent逻辑空间集合,持久化在RocksDB。lexetnt--->blob
	//
	// 由于支持稀疏写,所以extent map中的extent可以是不连续的,即存在空洞。
	// 也即前一个e
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值