searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Ceph BlueStore简介

2023-06-21 07:31:53
375
0

BlueStore模块介绍

BlueStore整体架构如下:

图1

RocksDBStore:封装了rocksdb。BlueStore中的元数据持久化到rocksdb,BlueStore的事物依赖rocksdb实现。

BlueFS:为对接rocksdb实现的最小文件系统,通过File、Dir、FileWriter、FileReader实现文件读取。BlueFS可以管理3类磁盘设备,分为BDEV_WAL、BDEV_DB、BDEV_SLOW。

Allocator:磁盘空间分配器,BlueStore最小分配单元为4k(SSD),64k(HDD),BlueFS最小分配单元为1M。默认实现为BitmapAllocator,还有StupidAllocator、AvlAllocator、HybridAllocator、ZonedAllocator等选择,通过配置bluestore_allocator和bluefs_allocator来修改。

KernelDevice:磁盘设备。默认实现为BlockDevice,还有PMEMDevice、NVMEDevice等选择。

BlueStore元数据

BlueStore直接管理裸设备,没有文件系统,操作系统的page cache使用不上,所以需要自己管理元数据和数据的缓存。其管理结构如下:

图2

Collection:即OSD层的PG,数目比较少,全部缓存在coll_map unordered_map中。以前缀PREFIX_COLL持久化在db中。

Onode:对象元数据,部分缓存,存在Collection的OnodeSpace unordered_map中,默认使用lru。以前缀PREFIX_OBJ持久化在db中。

Extent:逻辑空间的off,len属性,对应Blob上的一片逻辑空间。

Blob:物理空间和逻辑空间的转换层,将物理空间上一片不连续的空间转为连续的逻辑空间。

pextent:物理空间的off,len属性,对应盘上真实空间。

Buffer:对象数据,部分缓存,以offset为key存在SharedBlob的BufferSpace map中,默认使用2q管理

BlueStore写状态机

BlueStore的写分为正常写和Deferred写,也有可能2者结合,如下图所示:

图3 Write

图4 DeferredWrite

  • STATE_PREPARE:待提交事物TransContext txc刚创建的状态。如果有未提交的aio,则设置状态为AIO_WAIT,同时提交aio。
  • STATE_AIO_WAIT:通过osr保序aio。设置状态为IO_DONE。
  • STATE_IO_DONE:设置状态为KV_QUEUED。将事物放入kv_queue,待线程bstore_kv_sync处理。
  • STATE_KV_QUEUED:线程bstore_kv_sync将kv_queue中的事物放入kv_committing,然后再向db提交其中的事物,设置状态为KV_SUBMITTED,然后sync一次,最后放入kv_committing_to_finalize,待线程bstore_kv_final处理。
  • STATE_KV_SUBMITTED:线程bstore_kv_final从kv_committing_to_finalize取出事物,设置状态为KV_DONE,将事物放入finisher队列,等待cfin线程回调。
  • STATE_KV_DONE:如果有deferred io,将状态置为DEFERRED_QUEUED,将osr放入deferred_queue;否则,将状态置为FINISHING。
  • STATE_DEFERRED_QUEUED:提交deferred的io,写入完后从deferred_queue移除,将状态置为DEFERRED_CLEANUP,然后将DeferredBatch放入deferred_done_queue队列,线程bstore_kv_sync取出来清理db中的deferred信息,然后放入deferred_stable_to_finalize,线程bstore_kv_final取出来进行clean清理以及析构DeferredBatch。
  • STATE_DEFERRED_CLEANUP:设置状态为FINISHING。
  • STATE_FINISHING:设置状态为DONE,从osr队列中摘掉。
  • STATE_DEFERRED_DONE:事物完成。
0条评论
0 / 1000
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
原创

Ceph BlueStore简介

2023-06-21 07:31:53
375
0

BlueStore模块介绍

BlueStore整体架构如下:

图1

RocksDBStore:封装了rocksdb。BlueStore中的元数据持久化到rocksdb,BlueStore的事物依赖rocksdb实现。

BlueFS:为对接rocksdb实现的最小文件系统,通过File、Dir、FileWriter、FileReader实现文件读取。BlueFS可以管理3类磁盘设备,分为BDEV_WAL、BDEV_DB、BDEV_SLOW。

Allocator:磁盘空间分配器,BlueStore最小分配单元为4k(SSD),64k(HDD),BlueFS最小分配单元为1M。默认实现为BitmapAllocator,还有StupidAllocator、AvlAllocator、HybridAllocator、ZonedAllocator等选择,通过配置bluestore_allocator和bluefs_allocator来修改。

KernelDevice:磁盘设备。默认实现为BlockDevice,还有PMEMDevice、NVMEDevice等选择。

BlueStore元数据

BlueStore直接管理裸设备,没有文件系统,操作系统的page cache使用不上,所以需要自己管理元数据和数据的缓存。其管理结构如下:

图2

Collection:即OSD层的PG,数目比较少,全部缓存在coll_map unordered_map中。以前缀PREFIX_COLL持久化在db中。

Onode:对象元数据,部分缓存,存在Collection的OnodeSpace unordered_map中,默认使用lru。以前缀PREFIX_OBJ持久化在db中。

Extent:逻辑空间的off,len属性,对应Blob上的一片逻辑空间。

Blob:物理空间和逻辑空间的转换层,将物理空间上一片不连续的空间转为连续的逻辑空间。

pextent:物理空间的off,len属性,对应盘上真实空间。

Buffer:对象数据,部分缓存,以offset为key存在SharedBlob的BufferSpace map中,默认使用2q管理

BlueStore写状态机

BlueStore的写分为正常写和Deferred写,也有可能2者结合,如下图所示:

图3 Write

图4 DeferredWrite

  • STATE_PREPARE:待提交事物TransContext txc刚创建的状态。如果有未提交的aio,则设置状态为AIO_WAIT,同时提交aio。
  • STATE_AIO_WAIT:通过osr保序aio。设置状态为IO_DONE。
  • STATE_IO_DONE:设置状态为KV_QUEUED。将事物放入kv_queue,待线程bstore_kv_sync处理。
  • STATE_KV_QUEUED:线程bstore_kv_sync将kv_queue中的事物放入kv_committing,然后再向db提交其中的事物,设置状态为KV_SUBMITTED,然后sync一次,最后放入kv_committing_to_finalize,待线程bstore_kv_final处理。
  • STATE_KV_SUBMITTED:线程bstore_kv_final从kv_committing_to_finalize取出事物,设置状态为KV_DONE,将事物放入finisher队列,等待cfin线程回调。
  • STATE_KV_DONE:如果有deferred io,将状态置为DEFERRED_QUEUED,将osr放入deferred_queue;否则,将状态置为FINISHING。
  • STATE_DEFERRED_QUEUED:提交deferred的io,写入完后从deferred_queue移除,将状态置为DEFERRED_CLEANUP,然后将DeferredBatch放入deferred_done_queue队列,线程bstore_kv_sync取出来清理db中的deferred信息,然后放入deferred_stable_to_finalize,线程bstore_kv_final取出来进行clean清理以及析构DeferredBatch。
  • STATE_DEFERRED_CLEANUP:设置状态为FINISHING。
  • STATE_FINISHING:设置状态为DONE,从osr队列中摘掉。
  • STATE_DEFERRED_DONE:事物完成。
文章来自个人专栏
存储随记
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0