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

作者简介 叶小龙,DPDK软件开发工程师,主要从事virtio,ovs-dpdk等相关工作。

文章简介 vDPA是vhost datapath acceleration的缩写,意为vhost数据路径加速,它支持virtio ring兼容设备,可以直接为virtio驱动程序提供数据通路加速功能。本文介绍了vDPA sample的使用方法和基本流程。

背 景 介 绍

在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

命令行格式如下:

./ vdpa [EAL options]  -- [--client] [--interactive|-i] or [--ifaceSOCKET_PATH]

参数解释如下:

-- 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为例说明具体用法:

./ vdpa -c 0x2 -n 4 --socket-mem 1024,1024 \

-w 0000:06:00.3,vdpa=1 -w 0000:06:00.4,vdpa=1\

-- --interactive

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

modprobe vfio-pci

./usertools/dpdk-devbind.py -b vfio-pci06:00.3 06:00.4

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

vdpa> list

device id       device address  queue num       supported features

0               0000:06:00.3    1               0x14c238020

1               0000:06:00.4    1               0x14c238020

2               0000:06:00.5    1               0x14c238020

vdpa> create /tmp/vdpa-socket00000:06:00.3

vdpa> create /tmp/vdpa-socket10000:06:00.4

02启动QEMU

命令行格式如下

qemu-system-x86_64-name vhost-vm1 -enable-kvm -cpu host \

-drivefile=/storage/images/0.7.1/v0.7.1_vm1.qcow2 \

-m2048 -smp 4 -boot c \

-objectmemory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on \

-numanode,memdev=mem -mem-prealloc \

-chardevsocket,id=char0,path=/tmp/vdpa-socket0\

-netdevtype=vhost-user,id=mynet1,chardev=char0 \

-devicevirtio-net-pci,netdev=mynet1,mac=f0:e8:ca:11:ba:01,disable-modern=off \

-nographic\

-serialtelnet::7001,server,nowait \

-vnc0.0.0.0:11

 

qemu-system-x86_64-name vhost-vm1 -enable-kvm -cpu host \

-drivefile=/storage/images/0.7.1/v0.7.1_vm2.qcow2 \

-m2048 -smp 4 -boot c \

-objectmemory-backend-file,id=mem,size=2048M,mem-path=/dev/hugepages,share=on \

-numanode,memdev=mem -mem-prealloc \

-chardevsocket,id=char0,path=/tmp/vdpa-socket1\

-netdevtype=vhost-user,id=mynet2,chardev=char0 \

-devicevirtio-net-pci,netdev=mynet2,mac=f0:e8:ca:11:ba:02,disable-modern=off \

-nographic\

-serialtelnet::7002,server,nowait \

-vnc0.0.0.0:12

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

[root@vm1~]# ping 1.1.1.2

PING1.1.1.2 (1.1.1.2) 56(84) bytes of data

64bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=0.239 ms

64bytes from 1.1.1.2: icmp_seq=2 ttl=64 time=0.285 ms

64bytes from 1.1.1.2: icmp_seq=3 ttl=64 time=0.267 ms

 

[root@vm2~]# ping 1.1.1.1

PING1.1.1.1 (1.1.1.1) 56(84) bytes of data.

64bytes from 1.1.1.1: icmp_seq=1 ttl=64 time=0.613 ms

64bytes from 1.1.1.1: icmp_seq=2 ttl=64 time=0.267 ms

64bytes from 1.1.1.1: icmp_seq=3 ttl=64 time=0.267 ms

03启动QEMU热迁移

vDPA设备支持硬件dirty page logging,所以在热迁移时不需要耗费额外的cpu资源。

 我们假定A是source host,B是destination host,我们分别在上面启动vdpa程序和qemu虚拟机,其中B上的虚拟机的命令行参数与A的保持一致并且添加如下参数使它进入migration-listen模式:

B: -incomingtcp:0:4444 (or other PORT)

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

A: (qemu) migrate -d tcp::4444(or other PORT)

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

640?wx_fmt=gif
vDPA 相关API
  1. 注册vdpa设备

    intrte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, structrte_vdpa_dev_ops *ops)

  2. 移除vdpa设备

    intrte_vdpa_unregister_device(int did);

  3. 根据vdpa地址得到vdpa设备号

    intrte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr);

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

    struct rte_vdpa_device * rte_vdpa_get_device(int did);

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

    int rte_vdpa_get_device_num(void);


一文详解:vDPA sample的使用方法和基本流程_第1张图片

 推荐阅读 

一文详解:vDPA sample的使用方法和基本流程_第2张图片
新年快乐
640?wx_fmt=png

一文详解:vDPA sample的使用方法和基本流程_第3张图片

你可能感兴趣的:(一文详解:vDPA sample的使用方法和基本流程)