一文详解:vDPA sample的使用方法和基本流程

作者简介 叶小龙,DPDK软件开发工程师,主要从事virtio,ovs-dpdk等相关工作。
文章简介 vDPA是vhost datapath acceleration的缩写,意为vhost数据路径加速,它支持virtio ring兼容设备,可以直接为virtio驱动程序提供数据通路加速功能。本文介绍了vDPA sample的使用方法和基本流程。
原文地址:DPDK与SPDK开源社区

背 景 介 绍

在DPDK 18.05 release中,我们增加了IFCVF vDPA驱动程序以支持Intel FPGA 100G VF设备。 IFCVF具备HW vhost数据路径加速器的功能,它支持实时迁移并与virtio 0.95和1.0兼容。IFCVF的数据通路与virtio环兼容,所以它可以作为硬件的vhost后端,通过DMA直接发送/接收virtio前端的网络包,它的优势是不需要耗费额外的线程来发送/接收数据,从而极大的节省主机的cpu资源。
在DPDK 18.11中,我们新增了vDPA sample,用来说明如何将vdpa设备注册到vhost lib中,从而利用vDPA驱动的功能实现vhost数据路径加速。

01 启动vDPA

命令行格式如下:

参数解释如下:
–client: 表示以client mode运行vdpa,在client mode下,QEMU负责创建unix domain socket,这种模式下可以支持vdpa重连
–iface: 指定unix domain socket的路径前缀,比如/tmp/vhost-user-,这样vdpa创建出来的socket file是/tmp/vhost-user0,/tmp/vhost-user1, ….
–interactive: 表明以命令行交互的形式运行vdpa,目前支持4个内置命令
1. help: 显示帮助信息
2. list: 列出系统当前可用的vDPA设备
3. create: 创建新的vdpa端口,输入参数是socket file name和vDPA设备地址
4. quit: 退出vdpa程序

我们以ifc vf devices为例说明具体用法:

需要注意的是这里0000:06:00.3和0000:06:00.4是vDPA设备的pci地址,我们需要事先将它们绑定到vfio-pci驱动。

接着我们可以用交互方式创建两个vdpa端口:

02 启动QEMU

命令行格式如下

我们可以用如上命令创建两个VM,然后通过简单的ping来验证网络连通性。

03 启动QEMU热迁移

vDPA设备支持硬件dirty page logging,所以在热迁移时不需要耗费额外的cpu资源。
我们假定A是source host,B是destination host,我们分别在上面启动vdpa程序和qemu虚拟机,其中B上的虚拟机的命令行参数与A的保持一致并且添加如下参数使它进入migration-listen模式:

然后在A的qemu控制台启动热迁移:

可以用“info migrate“来查看migrate的实时状态。

vDPA 相关API

注册vdpa设备

intrte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, structrte_vdpa_dev_ops *ops)

移除vdpa设备

intrte_vdpa_unregister_device(int did);

根据vdpa地址得到vdpa设备号

intrte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr);

根据设备号得到vdpa设备结构体

struct rte_vdpa_device * rte_vdpa_get_device(int did);

得到当前系统可用的vdpa设备总数

int rte_vdpa_get_device_num(void);

发表评论

电子邮件地址不会被公开。 必填项已用*标注