更多DPDK相关源码、虚拟化等技术学习资料、开源项目、招聘信息欢迎点击 DPDK开发中文网
介绍
块设备是支持以固定大小的块读取和写入数据的存储设备。这些块通常为512或4096字节。设备可以是软件中的逻辑构造,或者对应于诸如NVMe SSD的物理设备。
块设备层包含单个通用库lib/bdev,以及实现各种类型的块设备的许多可选模块(作为单独的库)。通用库的公共头文件是bdev.h,它是与任何类型的块设备交互所需的全部API。
下面将介绍如何使用该API与bdev进行交互。有关实现bdev模块的指南,请参阅编写自定义块设备模块。
除了为所有块设备提供通用抽象之外,bdev层还提供了许多有用的功能:
响应队列满或内存不足的情况自动排队I / O请求
支持热移除,即使在I / O流量发生时也是如此。
I / O统计信息,如带宽和延迟
设备重置支持,和I / O超时跟踪
基本原语
bdev API的用户与许多基本对象进行交互。
struct spdk_bdev,本指南将其称为bdev,表示通用块设备。struct spdk_bdev_desc,此前称为描述符,表示给定块设备的句柄。描述符用于建立和跟踪使用底层块设备的权限,非常类似于UNIX系统上的文件描述符。对块设备的请求是异步的,由spdk_bdev_io对象表示。请求必须在关联的I / O channel上提交。消息传递和并发中描述了I / O channel的动机和设计。
Bdev可以是分层的,这样一些bdev通过将请求路由到其他bdev来服务I / O. 这可用于实现缓存,RAID,逻辑卷管理等。的BDEV该路线I / O到其他的BDEV通常被称为虚拟的BDEV,或vbdevs的简称。
初始化库
bdev层依赖于头文件include/spdk/thread.h抽象的通用消息传递基础结构。有关完整说明,请参阅