SPDK bdev详解

01

简介

在之前的文章《SPDK简述和概览》中我们描述了SPDK应用编程框架的部分内容,基于文中提到的线程模型,SPDK实现了各类子系统、应用服务在调用spdk_app_start方法启动时,除了会按模型初始化线程外,还会对注册的各个子系统进行初始化。

f31271a10676383e583ce644b028d676.png

如上图是SPDK支持的子系统以及子系统间的依赖关系,在SPDK框架中bdev也是作为一个子系统存在,用于提供通用的用户态块存储抽象,和内核的通用块层类似,它会屏蔽底层模块(Module)具体的实现,对外提供统一的接口,当然,对底层模块要求也是需要实现对应的API。

02

SPDK BDEV模型

2.1 g_bdev_mgr

38bc38e3c53a4d0e60909b2c5f2580a4.png

如图,SPDK使用了一个全局结构g_bdev_mgr对内部得块设备进行管理,并将其注册到全局设备,服务启动调用方法spdk_bdev_initialize进行bdev子系统初始化时,会对g_bdev_mgr的全局资源进行分配;

bdev_io_pool: spdk_bdev_io结构得全局缓冲池,默认缓存池大小64k,每个线程局部缓存256个,当对bdev进行操作时,SPDK需要将io封装成spdk_bdev_io结构,就会从线程缓冲区或全局缓冲区中获取;

  •  buf_small_pool: 小于8k数据的全局数据缓冲池,当数据大小小于8k时,会从该缓存池中获取buf,默认池大小为8191;

  • buf_large_pool: 小于64k数据的全局数据缓冲池,当数据大小小于64k时,会从该缓冲池获取buf,默认池大小为1023;

  • zero_buffer: 使用该缓冲区对设备进行填充补零操作;

  • bdev_modules: 保存bdev模块的链式结构,如下图,是SPDK目前支持的模块;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值