从IPU向主机提供的virtio-blk服务看vDPA和LM的实现

Intel目前可以分别提供基于FPGA 和基于ASIC的IPU(Infrastructure Processing Units)解决方案,相应的IPU可以对主机host提供NVMe和virtio-blk两类存储特性的PF(Physical Function)/VF(Virtual Function)。此处将结合IPU向主机导出的virtio-blk的PF/VF使用来进一步剖析vDPA和LM的实现。

Vhost与vDPA的对比

众所周知,Vhost主要是为Qemu等虚拟化应用场景提供IO加速的一种实现:通过Qemu实现VM(Virtual Machine)中使用的virtio设备的模拟和控制面的管理,但IO路径上VM可以直接和Qemu之外的单独的Vhost Target交互。一般情况下Vhost Target侧(或者叫backend---后端) 主要是通过软件的方式来实现,即实际可能没有真正的virtio-blk的硬件设备存在。对软件实现的Vhost Target而言,各种类型的存储资源如Malloc bdev、AIO bdev、Ceph RBD bdev等等均可以用来作为其的实际后端存储。VM发出的IO由Vhost的软件进行处理然后再与后端实际的存储资源进行交互,例如图1所示基于SPDK实现的Vhost scsi Target (目前用户态的Vhost 框架是由DPDK定义的,SPDK中Vhost scsi和Vhost blk都是基于DPDK定义的用户态框架进一步的扩展实现) 实际就是通过共享了VM中分配的virtqueue内存的方式来实现IO的传递,并且由Vhost中创建的poller来不断轮询virtqueue vring中各个avail entry指向的IO,然后再对具体的后端bdev进行读写。

bd7c66d185f3177638bc4dc1fa3c4135.jpeg

图1. 基于SPDK实现的Vhost scsi Target实现举例

在Vhost定义的实现框架下经过扩展,就产生了vDPA的技术,也即vDPA实际是一种特殊的Vhost实现----就本文讨论的场景就是将一个对主机而言具有真正virtio-blk功能的硬件设备的PF/VF应用于Vhost的软件框架中(vDPA的用户态实现目前主要依托于DPDK中定义的Vhost的软件框架,其相应的驱动存在于DPDK代码中,要支持新的硬件需要添加实现相应的vDPA驱动逻辑,可参考DPDK源码中/dpdk/drivers/vdpa目录下的代码实现),在通过软件完成控制面的握手和virtqueue地址等信息设置后,实现VM在数据面直接和virtio-blk硬件设备通信,不需要vDPA软件来处理VM发出的具体的IO----“例如先将VM中分配的virtqueue的地址信息设置给实际的virtio-blk设备,后续只需要更新vring的avail_idx并通过寄存器通知硬件设备”。这样在vDPA的使用中完成控制面初始化后,便可以在IO操作后写寄存器通知设备读取IO并执行,而IO对应的完成消息则由Qemu产生中断通知VM,或者由VM软件对vring的used_idx项进行不断轮询。最终IO的实际存储由virtio-blk硬件设备来完成,例如对于IPU提供的virtio-blk特性则可能是通过网络传送到了远端的存储。基于DPDK中Vhost框架实现的用户态vDPA驱动的整体结构可以如图2所示。

afa7d882170a20bf7d72fe96932b4f7f.png

图2. 基于

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值