blobstore可看作是SPDK对外提供的一个对象存储系统,存储引擎构建在SPDK所管理的块设备之上,所采用的磁盘布局结构如图所示。
superblock主要记录了如下属性信息 (1) base info 信息包括:cluster_size(blob的块存储单元大小,默认1M),size(blobstore的容量),io_unit_size(硬盘支持的原子in-place-update大小,md_page大小采用该阈值) (2) 各种bitmap信息 其中mask_start记录了bitmap数据的起始lba,mask_len为lba个数(参考bs_load_read_used_pages)
与Ext4的磁盘布局结构相比较,used_blobids相当于定义了inode槽位,而used_clusters则相当于定义了block槽位。所不同的是Ext4的inode长度是固定不变的,扩展属性还有文件块信息都是通过额外的block进行存储的,inode只是记录对应块的存储位置。而blobstore则将所有的元数据信息全部保存到了inode区域(blob内部),因此其空间长度是不确定的,需要多个md_page进行保存,对应的数据组织结构如图所示。
每个blob的元数据由多个md_p