ceph bluestore中的磁盘空间管理

Ceph Bluestore通过位图管理和内存分配器直接管理裸磁盘空间,提供四种分配器:stupid、bitmap、AVL和Hybrid。其中,bitmap分配器在性能和空间占用上优于stupid,而Hybrid结合了bitmap和AVL的优势,适用于不同场景。文章深入探讨了位图持久化和各种分配器的工作原理。
摘要由CSDN通过智能技术生成

ceph bluestore摒弃了传统的本地文件系统,而直接使用裸磁盘作为OSD的存储介质,因而需要自行管理磁盘空间的分配与回收

概述

一个设计良好的磁盘空间管理器,需要兼顾空间和时间效率;bluestore中提供了空间管理器FreelistManager来支持空间管理,当前提供了一种基于位图的实现,包含:位图持久化以及内存分配器Allocator两部分。其中,位图的持久化是指将空间分配(置1)和回收(置0)的位图状态持久化到磁盘中,基于rocksdb实现;内存分配器是磁盘位图的一致性视图,用来加速空间分配的速度,基于不同的内存组织形式,包括:stupidbitmap, avlhybrid四种。

位图持久化

bluestore中,当前基于bitmap来实现磁盘空间的分配管理,并将位图持久化到rocksdb中,如下图:
逻辑视图
从下往上看:下层是磁盘,在逻辑上划分为多个固定大小的block(参数为:bdev_block_size, 默认为4KB);上面是空间管理器,最小分配单位为alloc-block(参数为:bluestore_min_alloc_size),需要为block的整数倍,在SSD磁盘上,默认是4KB,在HDD磁盘上,默认是64KB;一个key管理若干个alloc-block,其value记录这些alloc-block的位图状态(参数为:bluestore_freelist_blocks_per_key,默认为128) 。

举个例子,默认情况下:1TB的SSD磁盘, 包含的block数为:1TB/4KB = 256MB个,包含的alloc-block数为:1TB/4KB = 256MB个,包含的rocksdb的key数为:256MB/128 = 2MB个。

至于SSD和HDD采用不同的分配单位,与他们的物理特性有关:HDD由于自身的机械特性原因,在随机IO中性能比较差,所以bluestore会较大的分配块,然后会尝试将多个IO写到相同的块中,以减少随机io,提升性能;而SSD由于特殊的内部结构,随机性能不受类似HDD的机械特性影响,相反为减少写放大,带来空间浪费,应采用较小的块。

bluestore根据请求的<offset, len>以及bluestore_freelist_blocks_per_key,计算需要置位哪些key上的哪些bit,然后通过事务持久化到rocks

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值