Blobstore是位于SPDK bdev之上的Blob管理层,用于与用户态文件系统Blobstore Filesystem (BlobFS)集成,从而代替传统的文件系统,支持更上层的服务,如数据库MySQL、K-V存储引擎Rocksdb以及分布式存储系统Ceph、Cassandra等。以Rocksdb为例,通过BlobFS作为Rocksdb的存储后端的优势在于,I/O经由BlobFS与Blobstore下发到bdev,随后由...
Blob FS在工作状态下会注册两个spdk_io_device,分别是blobfs_md以及blobfs_sync,前者带有md后缀,在Blob FS框架下,这被设计为与元数据(metadata)的操作有关,例如create,后者则是与I/O(read & write)操作有关。两个spdk_io_device绑定在一个reactor 0上,相当于对外提供了两个交互通道。根据前文所述,不同的sp...
blobstore只提供了对象存储功能,SPDK在此基础之上又新增了blobfs来做文件存储,每个文件对应一个blob,并将文件名保存到blob的扩展属性中。不过并没有提供目录树管理功能,因此在blobfs启动的时候需要将所有的blob全部加载到内存,以便在内存中维护filename与blob的映射关系,从而便于文件的lookup检索。 作为文件系统来讲,blobfs...
Vhost target 使得 SPDK 能够为基于 Qemu 的虚拟机或 Kata 容器提供后端存储。Vfio-user 允许 SPDK 将虚拟的 NVMe 设备提供给虚拟机,后者利用现有的 NVMe 驱动程序与设备进行通信。 文件存储服务:SPDK 在其块分配器 Blobstore 上还提供了一个名为 BlobFS 的文件系统。它可作为 MySQL 和 Rocksdb 的存储...
以下是使用 SPDK BlobFS 进行 IO 操作的大致步骤:应用程序调用 blobfs_create, blobfs_read 等函数;从文件系统操作映射到对存储设备的操作;向 NVMe 设备发送指令(技术上讲,是向 NVMe 设备对应的内存区域中写入指令)。相比起 Linux 功能全面、复杂的 IO 栈,使用 SPDK 之后的 IO 步骤显得简单不少。相比之下...
因此在此示例中,记录的事件类型仅限于这两种。值得注意的是,SPDK在NVMe over RDMA、NVMe over TCP、FTL以及ISCSI和Blobfs中提供了更丰富的事件类型。若需深入了解SPDK的trace细节,建议查阅其官方文档,特别是关于NVMe over RDMA Target的trace点细节,详情可访问https://spdk.io/doc/nvmf_tgt_tracepoints.html。
SPDK加速数据库存储引擎。通过实现了RocksDB中的抽象文件类,SPDK的blobfs/blobstore目前可以和Rocksdb集成,用于在NVMe SSD上加速实现RocksDB引擎的使用。该操作的实质是bypass kernel文件系统将完全使用基于SPDK的用户态I/O stack。 SPDK例子 hello-world.c
通过实现了RocksDB中的抽象文件类,SPDK的blobfs/blobstore目前可以和Rocksdb集成,用于在NVMe SSD上加速实现RocksDB引擎的使用。该操作的实质是bypass kernel文件系统将完全使用基于SPDK的用户态I/O stack。此外,参照SPDK对Rocksdb的支持,亦可以用SPDK blobfs/blobstore 整合其他的数据库存储引擎。
虽然目前SPDK提供了非常简单的文件系统blobfs/blostore,但是并不支持可移植操作系统接口,为此使用文件系统的应用需要将其直接迁移到SPDK的用户态“文件系统”上,同时需要做一些代码移植的工作,如不使用可移植操作系统接口,而采用类似AIO的异步读/写方式. 目前SPDK使用比较好的场景有以下几种...
· 中间层为通用块层,实现对不同后端设备的支持,提供对上层的统一接口,包括逻辑卷的支持、流量控制的支持等存储服务。这一层也提供了对Blob(Binary Larger Object)及简单用户态文件系统BlobFS的支持。 · 最上层为协议层,包括NVMe协议、SCSI协议等,可以更好地和上层应用相结合。