浅析SPDK技术:vhost

本文详细阐述了SPDKvhost的工作机制,涉及设备注册、连接会话和设备启动,以及vhost-blk的具体实现,如创建设备、启动会话和轮询任务。同时介绍了如何在QEMU中配置使用SPDKvhost,包括内存设置、启动应用和vhost-scsi/vhost-blk的配置步骤。
摘要由CSDN通过智能技术生成

SPDK vhost工作机制

在这里插入图片描述

SPDK vhost 作为虚拟机存储的后端,以进程的形式在宿主机上运行,通过轮询的方式从共享的 Ring Buffer 中得到虚拟机中的 IO 请求,并进行处理,最后将处理完的数据同样通过 Ring Buffer 的方式通知虚拟机。整个过程不需要锁的保护,没有中断引入的开销,效率极高。这里面主要涉及到下面几个部分:

  • 虚拟机中的存储前端驱动:根据具体使用的协议不同而不同,可能为 virtio blk,virtio scsi,或直接使用原生的 NVMe driver,主要负责接收 IO 请求,并将请求保存到 Ring Buffer 中,等待后端的处理。另一方面,前端驱动还需要处理后端的完成通知;
  • 共享的 Ring Buffer:虚拟机中的前端驱动与宿主中的存储后端共享的内存,用来在两者之间传输数据,命令和执行结果;
  • SPDK vhost 后端:虚拟机存储的后端实现,真正处理 IO 请求的核心逻辑,通过用户态的存储驱动实现高效的 IO 操作。

SPDK vhost实现

SPDK vhost的软件结构示意如下:
在这里插入图片描述

SPDK vhost设备管理结构

所有类型的SPDK vhost设备统一链入到g_vhost_devies链表中进行管理,包括vhost-blk和vhost-scsi设备,关联的数据结构如下:
在这里插入图片描述

这里:

  • spdk_vhost_dev保存了vhost设备的通用信息,对于类型相关的数据则由vhost-blk或vhost-scsi扩展进行实现;
  • 对于每个vhost设备,可以支持建立多个session,由spdk_vhost_session结构描述,通常对于每个访问vhost-dev的VM都会建立一个session;
  • spdk_vhost_dev_backend结构保存了会话管理的相关处理回调函数。

vhost_dev_register:注册vhost设备

在这里插入图片描述

new_connection:新建连接会话

在这里插入图片描述

start_device:启动设备会话

在这里插入图片描述

SPDK vhost-blk实现

rpc_vhost_create_blk_controller:创建vhost-blk设备

在这里插入图片描述

vhost_blk_start:新建会话

在这里插入图片描述

vdev_worker:vhost-blk轮询任务

在这里插入图片描述

blk_request_complte_cb:blk IO完成

在这里插入图片描述

QEMU配置使用SPDK vhost

启动SPDK vhost应用

首先,配置SPDK使用的大页内存:

HUGEMEM=4096 scripts/setup.sh

接下来,启动SPDK自带的vhost应用程序

build/bin/vhost -S /var/tmp -m 0x3

配置SPDK

创建SPDK bdev设备

scripts/rpc.py bdev_malloc_create 64 512 -b Malloc0
vhost-scsi配置

首先,创建vhost-scsi控制器

scripts/rpc.py vhost_create_scsi_controller --cpumask 0x1 vhost.0

添加SPDK bdev设备到创建的vhost-scsi控制器中

scripts/rpc.py vhost_scsi_controller_add_target vhost.0 0 Malloc0
vhost-blk配置
scripts/rpc.py vhost_create_blk_controller --cpumask 0x1 vhost.1 Malloc0

相关参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值