BlueStore 架构及原理分析

作者&投稿:尔博 (若有异议请与网页底部的电邮联系)
~

Ceph 底层存储引擎经过了数次变迁,目前最常用的是 BlueStore,在 Jewel 版本中引入,用来取代 FileStore。与 FileStore 相比,Bluesore 越过本地文件系统,直接操控裸盘设备,使得 I/O 路径大大缩短,提高了数据读写效率。并且,BlueStore 在设计之初就是针对固态存储,对目前主力的 SATA SSD 有着更好的支持(相比 FileStore),同时也支持 Nvme SSD 超高速固态。在数据的处理上,BlueStore 选择把元数据和对象数据分开存储,使用高速设备来保存元数据,能够起到性能优化作用。

书中介绍了块、COW、RWM 等内容,这里也直接拿来主义。

基于以上设计,BlueStore 的写策略综合运用直接写、COW 和 RMW 策略。
注意:

再结合图1.1 ceph_bluestore 架构图,我们需要引入第二层观念:

Ceph 较新版本中,把 设备 模块单独放到 blk 文件夹中。

后续还有 pmem、spdk、zoned 设备,这里不再列出

aio 封装了 libaio 相关操作,具体有三个结构:
• aio_t:一次 io 操作,pwrite,pread,不写到磁盘
• io_queue_t:io 提交队列,基本不使用,只用作基类
• aio_queue_t:继承自 io_queue_t,提交 io 操作,真正在此写入磁盘

简单介绍 ceph 中 libaio 使用流程:

相关方法有:
init():初始化
shutdown():关闭
pwritev():预备写,后续通过 submit_batch() 完成实际写入磁盘操作
preadv():预备读,后续通过 submit_batch() 完成实际写入磁盘操作
submit_batch():按批次提交 io 任务
get_next_completed():获取已经完成 IO 的 aio_t,用于 aio_thread() 回调函数

BlockDevice 是所有块设备的基类,定义了块设备必备的一些接口,比如 read、write等。在 src/blk/BlockDevice.h 中还定义了 IOContext,用作封装传递 io 具体操作,其中保存着每次 aio 操作的list:pending_aios 和 running_aios,前者表示等待队列,后者表示正在 io 操作的队列,同时还创建两个原子数分别用于表示这两个队列中 aio_t 的数量。
BlockDevice提供创建块设备实例的接口,通过识别 device_type 来创建不同的块设备,如 kernel device。
BlockDevice BlockDevice::create(
CephContext
cct, const string& path, aio_callback_t cb,
void *cbpriv, aio_callback_t d_cb, void *d_cbpriv);
->
create_with_type(device_type, cct, path, cb, cbpriv, d_cb, d_cbpriv);
-> 根据类型创建 device
new KernelDevice(cct, cb, cbpriv, d_cb, d_cbpriv)
-> 创建以下线程
aio_thread:
discard_thread
aio_thread :作用1. 感知已经完成的 io。2. 唤醒等待的 io 或者调用回调函数,具体根据IOContext创建时是否提供了 priv 参数(BlueStore 指针)来决定使用哪种操作,如果提供了,则调用回调函数BlueStore::TransContext::aio_finish()或者BlueStore::DeferredBatch::aio_finish()(根据AioContext 类型)。
discard_thread :这是针对 SSD discard 操作的线程,可以通过 cat /sys/block/sda/queue/discard_granularity 命令查看设备是否支持 discard 操作。discard 在 bluestore 中 分为两步:第一步:BlkDev{fd_directs[WRITE_LIFE_NOT_SET]}.discard((int64_t) offset, (int64_t) len); 调用系统函数对指定位置做 discard。第二步:discard_callback() 回调 shared_alloc.a->release(),告诉 Allocater 需要回收的部分(标记为 free)。

mkfs 作用是在磁盘第一次使用 bluestore 时,写入一些用户指定的配置到磁盘第一个块——超级块(大小可配置,一般为: BDEV_LABEL_BLOCK_SIZE 4096),这样后续使用该磁盘时,可以直接读取配置项。 之所以需要固化这些配置项,是因为 bluestore 使用不同的配置项对于磁盘数据的组织形式不同,如果前后两次上电使用不同的配置项访问磁盘数据有可能导致数据发生永久损坏。对已经 mkfs 过的磁盘再次使用该函数,则会对磁盘做一次 meta 数据检查。
以下为 LABEL_BLOCK 块中存储的数据,主要有 osd id、设备大小、生日时间、设备描述以及一组元数据 map。

mkfs() 主要是初始化 bluestore_bdev_label_t,并写入到磁盘的第一个4K块中,同时建立块设备链并预分配指定大小的空间。同时BlueStore层次的mkfs()里面调用了Bluefs的Bluefs::mkfs(),并且也固化了bluefs的信息位于磁盘的第二个4K块。
以下给出mkfs详细步骤。

开启块设备。此函数用于创建block设备实例(slow设备),并初始化某些配置。WAL和DB设备由BlueFS自行管理,不在此处开启。
BlockDevice:create()函数在2.2节中详细介绍过了,主要作用是打开块设备,获取句柄,用于后续的数据读写操作。
discard用于SSD设备的空间回收,其作用在2.2节中介绍过。
_set_max_defer_interval()设置了max_defer_interval参数,此参数的作用是在MempoolThread线程中定时提交延迟写(try->deferred_try_submit()),默认为3。
set_cache_size()从配置中获取所有cache相关的参数,包括cache总空间,onode内存使用比率、kvdb内存使用比率、hdd、ssd内存使用比率等。




江洲区19535439681: ...菊花是一种良好的观赏植物,并具有一定的药用价值,科研人员通过组织培养技术可实现某些珍稀菊花品种的快速繁殖.(l)进行组织培养所依据的原理是 - ... -
仉菁复方:[答案] (l)植物组织培养的原理是植物细胞的全能性;配制MS固体培养基的母液时,无机物中的大量元素应浓缩10倍,微量元素浓缩100倍.配制好的培养基在分装后需进行高压蒸汽灭菌处理. (2)接种前,外植体的消毒一般要用到70%的酒精和0.1%的氯化...

江洲区19535439681: 电磁波是否由于放电现象的产生而产生回答者顺便再提供一下电磁波发生器结构图及原理说明 -
仉菁复方:[答案] 电磁波是由振荡电路产生的.放电会产生电磁波,我给你说了电磁波产生的原因你就明白了. 振荡电路的电场不断变化,就产... 当这个电磁波遇到金属,就会产生感应电动势,当然也就有了电流,这就是所谓的电信号,这就是无线电原理.总而言之,只...

江洲区19535439681: 眼睛是心灵的窗户,视觉是人体获得信息的重要来源.请根据如图1眼球结构、近视眼成像及矫正原理示意图,分析回答相关问题:(1)分析眼球的结构可知... -
仉菁复方:[答案] (1)虹膜中央有2瞳孔,瞳孔的大小可以调节,能够控制进入眼球内的光线:看强光时瞳孔缩小,看弱光时瞳孔扩大,强光下瞳孔缩小,减少进入眼内的光量,以保护视网膜不受过强的刺激;弱光下瞳孔扩大,增加进入眼内的光...

江洲区19535439681: 从输导组织的结构和组成分析,为什么说被子植物比裸子植物更高级 -
仉菁复方:[答案] 裸子植物木质部一般主要由管胞组成,管胞担负了输导与支持双重功能.被子植物的木质部中,导管分子专营 输导功能,木纤维专营支持功能,所以被子植物木质部分化程度更高.而且导管分子的管径一般比管胞粗大,因此输水效率更高,被子植物更...

江洲区19535439681: 英语句式结构解析askI ask him why.这里是ask的双宾结构吗?可以用why?那我能不能说ask him the reason? -
仉菁复方:[答案] 是双宾语结构. 你也可以这样理解 He was late for the meeting. - I asked him why (he was late) = I asked him the reason (why he was late).

江洲区19535439681: 观察菜豆种子和玉米种子的结构图,分析回答下列问题:(1)写出图中各部分的结构名称:[1]___;[2]___;[4]___;[6]___;[8]___;[11]___;(2)新植物体的幼体是... -
仉菁复方:[答案] (1)如图所示各部分的结构名称为:1是胚轴,2是胚根,3是种皮,4是胚芽,5是子叶,6是果皮和种皮,7是胚芽,8是胚轴,9是胚根,10是胚乳,11是子叶. (2)种子的主要部分是胚,而胚是由胚根、胚轴、胚芽和子叶组成的,能发育成新个体.在...

江洲区19535439681: 区块链技术的架构模型是什么? -
仉菁复方: 金窝窝网络分析如下:从区块链的本质出发,以发展的眼光看待区块链的架构和架构未来的发展,关注于主要业务和技术能力,给出一个全面而高度概括的区块链架构模型. 这是一个面向链合约服务的高阶架构模型,体现了未来基于区块链实现高度自动化、智能化、公平守约的虚拟社会生产关系的能力.

江洲区19535439681: 1. 对照人体消化系统结构模式图,认识各部分的结构和功能,并据图分析作答: (1) 人的消化系统由___ - 和 - __ - 两部分组成.其中结构①〜⑦合称___... -
仉菁复方:[答案] 1.⑴消化道 消化腺 消化道 咽 食道 25〜30 胃 小肠(2) 唾液腺 肝脏 胰腺 胃腺 肠腺 消化腺 ⑨ 肝脏 胆汁

江洲区19535439681: 学完大数据可以做什么 -
仉菁复方: 如果你是合格的2113大5261数据开发技术人员,那4102当然有高薪的工作1653,并不是回说你学完了之后就一定答有高薪工作的,那需要看你学习怎么样.大数据 目前大数据培训相对其他培训项目要好就业,因为其他语言还是技能培训都是有一定的市场基础的,而大数据在最近两年才大力发展,并且在各领域蔓延,因此所产生的人才缺口巨大,而在企业中真正对大数据技能比较强力的技术人才,又特别的少;应用越来越广,技术人才却产生较慢,刚培训的人员,只能适应基本的软件操作和理论基础;还达不到企业要完成复杂业务的技术需求;所以培训入门快,拿薪资快,但只是一时,进入企业,不努力学习是跟不上发展与用人需求的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网