1edbed86dSXiaolong Ye.. SPDX-License-Identifier: BSD-3-Clause 2edbed86dSXiaolong Ye Copyright(c) 2018 Intel Corporation. 3edbed86dSXiaolong Ye 4edbed86dSXiaolong YeVdpa Sample Application 5edbed86dSXiaolong Ye======================= 6edbed86dSXiaolong Ye 7edbed86dSXiaolong YeThe vdpa sample application creates vhost-user sockets by using the 8edbed86dSXiaolong YevDPA backend. vDPA stands for vhost Data Path Acceleration which utilizes 9edbed86dSXiaolong Yevirtio ring compatible devices to serve virtio driver directly to enable 10edbed86dSXiaolong Yedatapath acceleration. As vDPA driver can help to set up vhost datapath, 11edbed86dSXiaolong Yethis application doesn't need to launch dedicated worker threads for vhost 12edbed86dSXiaolong Yeenqueue/dequeue operations. 13edbed86dSXiaolong Ye 14edbed86dSXiaolong YeTesting steps 15edbed86dSXiaolong Ye------------- 16edbed86dSXiaolong Ye 17edbed86dSXiaolong YeThis section shows the steps of how to start VMs with vDPA vhost-user 18edbed86dSXiaolong Yebackend and verify network connection & live migration. 19edbed86dSXiaolong Ye 20edbed86dSXiaolong YeBuild 21edbed86dSXiaolong Ye~~~~~ 22edbed86dSXiaolong Ye 23edbed86dSXiaolong YeTo compile the sample application see :doc:`compiling`. 24edbed86dSXiaolong Ye 25edbed86dSXiaolong YeThe application is located in the ``vdpa`` sub-directory. 26edbed86dSXiaolong Ye 27edbed86dSXiaolong YeStart the vdpa example 28edbed86dSXiaolong Ye~~~~~~~~~~~~~~~~~~~~~~ 29edbed86dSXiaolong Ye 30edbed86dSXiaolong Ye.. code-block:: console 31edbed86dSXiaolong Ye 32e2a94f9aSCiara Power ./dpdk-vdpa [EAL options] -- [--client] [--interactive|-i] or [--iface SOCKET_PATH] 33edbed86dSXiaolong Ye 34edbed86dSXiaolong Yewhere 35edbed86dSXiaolong Ye 36edbed86dSXiaolong Ye* --client means running vdpa app in client mode, in the client mode, QEMU needs 37edbed86dSXiaolong Ye to run as the server mode and take charge of socket file creation. 38edbed86dSXiaolong Ye* --iface specifies the path prefix of the UNIX domain socket file, e.g. 39edbed86dSXiaolong Ye /tmp/vhost-user-, then the socket files will be named as /tmp/vhost-user-<n> 40edbed86dSXiaolong Ye (n starts from 0). 417875e78bSDavid Marchand* --interactive means run the vDPA sample in interactive mode: 42edbed86dSXiaolong Ye 43*443b949eSDavid Marchand #. help: show help message 44*443b949eSDavid Marchand 45*443b949eSDavid Marchand #. list: list all available vDPA devices 46*443b949eSDavid Marchand 47*443b949eSDavid Marchand #. create: create a new vDPA port with socket file and vDPA device address 48*443b949eSDavid Marchand 49*443b949eSDavid Marchand #. stats: show statistics of virtio queues 50*443b949eSDavid Marchand 51*443b949eSDavid Marchand #. quit: unregister vhost driver and exit the application 52edbed86dSXiaolong Ye 53edbed86dSXiaolong YeTake IFCVF driver for example: 54edbed86dSXiaolong Ye 55edbed86dSXiaolong Ye.. code-block:: console 56edbed86dSXiaolong Ye 57e2a94f9aSCiara Power ./dpdk-vdpa -c 0x2 -n 4 --socket-mem 1024,1024 \ 58db27370bSStephen Hemminger -a 0000:06:00.3,vdpa=1 -a 0000:06:00.4,vdpa=1 \ 59edbed86dSXiaolong Ye -- --interactive 60edbed86dSXiaolong Ye 61edbed86dSXiaolong Ye.. note:: 62edbed86dSXiaolong Ye Here 0000:06:00.3 and 0000:06:00.4 refer to virtio ring compatible devices, 63edbed86dSXiaolong Ye and we need to bind vfio-pci to them before running vdpa sample. 64edbed86dSXiaolong Ye 65edbed86dSXiaolong Ye * modprobe vfio-pci 66edbed86dSXiaolong Ye * ./usertools/dpdk-devbind.py -b vfio-pci 06:00.3 06:00.4 67edbed86dSXiaolong Ye 68edbed86dSXiaolong YeThen we can create 2 vdpa ports in interactive cmdline. 69edbed86dSXiaolong Ye 70edbed86dSXiaolong Ye.. code-block:: console 71edbed86dSXiaolong Ye 72edbed86dSXiaolong Ye vdpa> list 73edbed86dSXiaolong Ye device id device address queue num supported features 74edbed86dSXiaolong Ye 0 0000:06:00.3 1 0x14c238020 75edbed86dSXiaolong Ye 1 0000:06:00.4 1 0x14c238020 76edbed86dSXiaolong Ye 2 0000:06:00.5 1 0x14c238020 77edbed86dSXiaolong Ye 78edbed86dSXiaolong Ye vdpa> create /tmp/vdpa-socket0 0000:06:00.3 79edbed86dSXiaolong Ye vdpa> create /tmp/vdpa-socket1 0000:06:00.4 80edbed86dSXiaolong Ye 81edbed86dSXiaolong Ye.. _vdpa_app_run_vm: 82edbed86dSXiaolong Ye 83edbed86dSXiaolong YeStart the VMs 84edbed86dSXiaolong Ye~~~~~~~~~~~~~ 85edbed86dSXiaolong Ye 86edbed86dSXiaolong Ye.. code-block:: console 87edbed86dSXiaolong Ye 88edbed86dSXiaolong Ye qemu-system-x86_64 -cpu host -enable-kvm \ 89edbed86dSXiaolong Ye <snip> 90edbed86dSXiaolong Ye -mem-prealloc \ 91edbed86dSXiaolong Ye -chardev socket,id=char0,path=<socket_file created in above steps> \ 92edbed86dSXiaolong Ye -netdev type=vhost-user,id=vdpa,chardev=char0 \ 93edbed86dSXiaolong Ye -device virtio-net-pci,netdev=vdpa,mac=00:aa:bb:cc:dd:ee,page-per-vq=on \ 94edbed86dSXiaolong Ye 95edbed86dSXiaolong YeAfter the VMs launches, we can login the VMs and configure the ip, verify the 96edbed86dSXiaolong Yenetwork connection via ping or netperf. 97edbed86dSXiaolong Ye 98edbed86dSXiaolong Ye.. note:: 99edbed86dSXiaolong Ye Suggest to use QEMU 3.0.0 which extends vhost-user for vDPA. 100edbed86dSXiaolong Ye 101edbed86dSXiaolong YeLive Migration 102edbed86dSXiaolong Ye~~~~~~~~~~~~~~ 103edbed86dSXiaolong YevDPA supports cross-backend live migration, user can migrate SW vhost backend 104edbed86dSXiaolong YeVM to vDPA backend VM and vice versa. Here are the detailed steps. Assume A is 105edbed86dSXiaolong Yethe source host with SW vhost VM and B is the destination host with vDPA. 106edbed86dSXiaolong Ye 107*443b949eSDavid Marchand#. Start vdpa sample and launch a VM with exact same parameters as the VM on A, 108edbed86dSXiaolong Ye in migration-listen mode: 109edbed86dSXiaolong Ye 110edbed86dSXiaolong Ye .. code-block:: console 111edbed86dSXiaolong Ye 112edbed86dSXiaolong Ye B: <qemu-command-line> -incoming tcp:0:4444 (or other PORT)) 113edbed86dSXiaolong Ye 114*443b949eSDavid Marchand#. Start the migration (on source host): 115edbed86dSXiaolong Ye 116edbed86dSXiaolong Ye .. code-block:: console 117edbed86dSXiaolong Ye 118edbed86dSXiaolong Ye A: (qemu) migrate -d tcp:<B ip>:4444 (or other PORT) 119edbed86dSXiaolong Ye 120*443b949eSDavid Marchand#. Check the status (on source host): 121edbed86dSXiaolong Ye 122edbed86dSXiaolong Ye .. code-block:: console 123edbed86dSXiaolong Ye 124edbed86dSXiaolong Ye A: (qemu) info migrate 125