searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

SPDK在云存储的应用简介

2022-12-15 15:47:01
74
0

        SPDK(Storage Performance Development Kit)是由Intel公司开发并开源的存储开发框架。SPDK提供了一系列工具和库以方便开发者实现高性能的,可扩展的,用户态的存储应用。SPDK已经被各大云厂商广泛地用于提升云存储的性能上,SPDK的核心思想也越来越被大家认可。

        SPDK的核心思想主要为:1. SPDK采用用户态驱动访问物理存储设备,避免了访盘时频繁的用户态和内核态切换开销,且使得零拷贝成为可能。2.采用轮询机制处理物理存储设备IO完成事件,不再依赖中断机制,如此能够获得更小的IO时延。3.使用更高效的线程间消息机制,避免IO路径上的锁。在实际应用中,SPDK有两种典型应用场景:场景一,SPDK提供的vhost应用和QEMU结合以缩短虚机侧到存储后端的IO路径,该方式相对传统通过QEMU SCSI内核驱动方式接入存储后端有更小的时延。场景二:存储后端使用SPDK的用户态Nvme驱动读写物理Nvme SSD存储设备,该方式相同传统通过内核libaio接口读写物理Nvme SSD存储设备有更大的性能提升。

        接下来让我们来创建一个使用SPDK Malloc Bdev块设备的虚拟机,并用fio测试其性能吧。

步骤一,下载SPDK源码并编译:git clone下载SPDK源码https://github.com/spdk/spdk.git,切换到稳定分支,比如v22.09.x,执行脚本scripts/pkgdep.sh安装编译依赖,执行./configure;make完成编译和链接,生成二进制文件./build/bin/vhost

步骤二,配置系统大页内存,并挂载大页内存文件系统:

echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

mount -t hugetlbfs hugetlbfs /dev/hugepages

步骤三,下载qemu源码https://github.com/qemu/qemu.git,并编译生成./build/qemu-system-x86_64二进制文件

步骤四,启动SPDK vhost进程,创建SPDK Malloc bdev设备,并绑定socket

./build/bin/vhost -S /var/tmp -m 0x1 -g -s 4096

./scripts/rpc.py bdev_malloc_create -b Malloc1 10240 512

./scripts/rpc.py vhost_create_blk_controller vhost.1 Malloc1

步骤五,启动qemu进程,运行虚拟机

./build/qemu-system-x86_64 --enable-kvm -smp sockets=1,cores=2 -m 4G -hda /tmp/Fedora33.qcow2 -usb -usbdevice tablet -vnc :52 -object memory-backend-file,id=mem,size=4G,mem-path=/dev/hugepages,share=on,prealloc=yes,dump=off -numa node,memdev=mem -chardev socket,id=char0,path=/var/tmp/vhost.1 -device vhost-user-blk-pci,chardev=char0

步骤六,通过VNC登录虚拟机,使用fio测试磁盘性能

fio --group_report -name=test -ioengine=libaio -bs=4k -direct=1 -numjobjs=8 -iodepth=128 -rw=randwrite -filename=/dev/vda

       通过上述实践流程,我们可以看到单个SPDK Malloc Bdev虚拟卷的性能是非常优秀的,而且这还只是单个物理核的能力。SPDK通过用户态驱动,轮询,高效的核间消息机制让存储软件能够匹配上全闪存储硬件的速度,为释放全闪存储硬件的性能提供了可靠的应用层软件参考方案。

0条评论
0 / 1000
邢****典
4文章数
0粉丝数
邢****典
4 文章 | 0 粉丝
邢****典
4文章数
0粉丝数
邢****典
4 文章 | 0 粉丝
原创

SPDK在云存储的应用简介

2022-12-15 15:47:01
74
0

        SPDK(Storage Performance Development Kit)是由Intel公司开发并开源的存储开发框架。SPDK提供了一系列工具和库以方便开发者实现高性能的,可扩展的,用户态的存储应用。SPDK已经被各大云厂商广泛地用于提升云存储的性能上,SPDK的核心思想也越来越被大家认可。

        SPDK的核心思想主要为:1. SPDK采用用户态驱动访问物理存储设备,避免了访盘时频繁的用户态和内核态切换开销,且使得零拷贝成为可能。2.采用轮询机制处理物理存储设备IO完成事件,不再依赖中断机制,如此能够获得更小的IO时延。3.使用更高效的线程间消息机制,避免IO路径上的锁。在实际应用中,SPDK有两种典型应用场景:场景一,SPDK提供的vhost应用和QEMU结合以缩短虚机侧到存储后端的IO路径,该方式相对传统通过QEMU SCSI内核驱动方式接入存储后端有更小的时延。场景二:存储后端使用SPDK的用户态Nvme驱动读写物理Nvme SSD存储设备,该方式相同传统通过内核libaio接口读写物理Nvme SSD存储设备有更大的性能提升。

        接下来让我们来创建一个使用SPDK Malloc Bdev块设备的虚拟机,并用fio测试其性能吧。

步骤一,下载SPDK源码并编译:git clone下载SPDK源码https://github.com/spdk/spdk.git,切换到稳定分支,比如v22.09.x,执行脚本scripts/pkgdep.sh安装编译依赖,执行./configure;make完成编译和链接,生成二进制文件./build/bin/vhost

步骤二,配置系统大页内存,并挂载大页内存文件系统:

echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

mount -t hugetlbfs hugetlbfs /dev/hugepages

步骤三,下载qemu源码https://github.com/qemu/qemu.git,并编译生成./build/qemu-system-x86_64二进制文件

步骤四,启动SPDK vhost进程,创建SPDK Malloc bdev设备,并绑定socket

./build/bin/vhost -S /var/tmp -m 0x1 -g -s 4096

./scripts/rpc.py bdev_malloc_create -b Malloc1 10240 512

./scripts/rpc.py vhost_create_blk_controller vhost.1 Malloc1

步骤五,启动qemu进程,运行虚拟机

./build/qemu-system-x86_64 --enable-kvm -smp sockets=1,cores=2 -m 4G -hda /tmp/Fedora33.qcow2 -usb -usbdevice tablet -vnc :52 -object memory-backend-file,id=mem,size=4G,mem-path=/dev/hugepages,share=on,prealloc=yes,dump=off -numa node,memdev=mem -chardev socket,id=char0,path=/var/tmp/vhost.1 -device vhost-user-blk-pci,chardev=char0

步骤六,通过VNC登录虚拟机,使用fio测试磁盘性能

fio --group_report -name=test -ioengine=libaio -bs=4k -direct=1 -numjobjs=8 -iodepth=128 -rw=randwrite -filename=/dev/vda

       通过上述实践流程,我们可以看到单个SPDK Malloc Bdev虚拟卷的性能是非常优秀的,而且这还只是单个物理核的能力。SPDK通过用户态驱动,轮询,高效的核间消息机制让存储软件能够匹配上全闪存储硬件的速度,为释放全闪存储硬件的性能提供了可靠的应用层软件参考方案。

文章来自个人专栏
存储
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0