xref: /dpdk/doc/guides/sample_app_ug/vdpa.rst (revision 443b949e17953a1094f80532d600a1ee540f2ba4)
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