SPDK的NBD设备使用和简要分析

NBD是什么
NBD指的是Network Block Device,正如其名字的意思,NBD让用户可以通过网络访问到某个块设备,或者设备镜像。和NFS的区别在于,NFS是直接提供基于网络的文件系统,而NBD是提供基于网络的块设备,你可以你在这个块设备上任意创建文件系统. 通常NBD是有Client端和Server端.并且依赖内核的NBD模块.

SPDK的NBD模块
SPDK自带了一个基于SPDK的NBD模块,其提供的功能是可以将SPDK在本地创建的BDEV通过NBD方式导出到本地,并可以挂载读写.

使用方法简单:

  1. 内核加载nbd模块
    modprobe nbd

2, 已经使用SPDK创建了一个Volume. 名字为lvstor0/lvol1
那么使用SPDK自带的rpc命令可以创建1个NBD设备:

./scripts/rpc.py start_nbd_disk lvstor0/lvol0 /dev/nbd3 

执行成功,返回 /dev/nbd3
3,对/dev/nbd3 进行格式化操作

mkfs.ext4 /dev/nbd3
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 102400000 4k blocks and 25600000 inodes
Filesystem UUID: 43333327-49b3-4b1a-8a5c-1f13d900477b
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968
 
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done

格式化成功,可以挂载并读写了.

4, 停止命令:
rpc.py stop_nbd_disk /dev/nbd0

SPDK的NBD实现分析

  1. 创建流程
    image.png

核心是 注册了一个基于socket的nbd设备,在spdk内创建poller不停的在socket上收包,收到的包再调用spdk的bdev_read和bdev_write等接口下发给spdk的bdev设备. 访问/dev/nbd0 的设备是内核流程,通过socket发送到用户态处理.

# SPDK  nbd 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×