2019-08-30 12:57:04 +09:00
|
|
|
.. SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
Copyright(c) 2016 IGEL Co., Ltd.
|
vhost: add driver on top of the library
The patch introduces a new PMD. This PMD is implemented as thin wrapper
of librte_vhost. It means librte_vhost is also needed to compile the PMD.
The vhost messages will be handled only when a port is started. So start
a port first, then invoke QEMU.
The PMD has 2 parameters.
- iface: The parameter is used to specify a path to connect to a
virtio-net device.
- queues: The parameter is used to specify the number of the queues
virtio-net device has.
(Default: 1)
Here is an example.
$ ./testpmd -c f -n 4 --vdev 'eth_vhost0,iface=/tmp/sock0,queues=1' -- -i
To connect above testpmd, here is qemu command example.
$ qemu-system-x86_64 \
<snip>
-chardev socket,id=chr0,path=/tmp/sock0 \
-netdev vhost-user,id=net0,chardev=chr0,vhostforce,queues=1 \
-device virtio-net-pci,netdev=net0,mq=on
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Rich Lane <rich.lane@bigswitch.com>
Tested-by: Rich Lane <rich.lane@bigswitch.com>
Update for queue state event name:
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2016-03-21 14:45:08 +09:00
|
|
|
|
|
|
|
Poll Mode Driver that wraps vhost library
|
|
|
|
=========================================
|
|
|
|
|
|
|
|
This PMD is a thin wrapper of the DPDK vhost library.
|
|
|
|
The user can handle virtqueues as one of normal DPDK port.
|
|
|
|
|
|
|
|
Vhost Implementation in DPDK
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
Please refer to Chapter "Vhost Library" of *DPDK Programmer's Guide* to know detail of vhost.
|
|
|
|
|
|
|
|
Features and Limitations of vhost PMD
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
Currently, the vhost PMD provides the basic functionality of packet reception, transmission and event handling.
|
|
|
|
|
|
|
|
* It has multiple queues support.
|
|
|
|
|
|
|
|
* It supports ``RTE_ETH_EVENT_INTR_LSC`` and ``RTE_ETH_EVENT_QUEUE_STATE`` events.
|
|
|
|
|
|
|
|
* It supports Port Hotplug functionality.
|
|
|
|
|
|
|
|
* Don't need to stop RX/TX, when the user wants to stop a guest or a virtio-net driver on guest.
|
|
|
|
|
|
|
|
Vhost PMD arguments
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
The user can specify below arguments in `--vdev` option.
|
|
|
|
|
|
|
|
#. ``iface``:
|
|
|
|
|
|
|
|
It is used to specify a path to connect to a QEMU virtio-net device.
|
|
|
|
|
|
|
|
#. ``queues``:
|
|
|
|
|
|
|
|
It is used to specify the number of queues virtio-net device has.
|
|
|
|
(Default: 1)
|
|
|
|
|
2017-11-06 21:38:12 +01:00
|
|
|
#. ``iommu-support``:
|
|
|
|
|
|
|
|
It is used to enable iommu support in vhost library.
|
|
|
|
(Default: 0 (disabled))
|
|
|
|
|
2018-10-12 14:40:46 +02:00
|
|
|
#. ``postcopy-support``:
|
|
|
|
|
|
|
|
It is used to enable postcopy live-migration support in vhost library.
|
|
|
|
(Default: 0 (disabled))
|
|
|
|
|
2019-06-19 06:13:44 +00:00
|
|
|
#. ``tso``:
|
|
|
|
|
|
|
|
It is used to enable tso support in vhost library.
|
|
|
|
(Default: 0 (disabled))
|
|
|
|
|
2020-02-26 10:00:34 +00:00
|
|
|
#. ``linear-buffer``:
|
|
|
|
|
|
|
|
It is used to enable linear buffer support in vhost library.
|
|
|
|
(Default: 0 (disabled))
|
|
|
|
|
|
|
|
#. ``ext-buffer``:
|
|
|
|
|
|
|
|
It is used to enable external buffer support in vhost library.
|
|
|
|
(Default: 0 (disabled))
|
|
|
|
|
vhost: add driver on top of the library
The patch introduces a new PMD. This PMD is implemented as thin wrapper
of librte_vhost. It means librte_vhost is also needed to compile the PMD.
The vhost messages will be handled only when a port is started. So start
a port first, then invoke QEMU.
The PMD has 2 parameters.
- iface: The parameter is used to specify a path to connect to a
virtio-net device.
- queues: The parameter is used to specify the number of the queues
virtio-net device has.
(Default: 1)
Here is an example.
$ ./testpmd -c f -n 4 --vdev 'eth_vhost0,iface=/tmp/sock0,queues=1' -- -i
To connect above testpmd, here is qemu command example.
$ qemu-system-x86_64 \
<snip>
-chardev socket,id=chr0,path=/tmp/sock0 \
-netdev vhost-user,id=net0,chardev=chr0,vhostforce,queues=1 \
-device virtio-net-pci,netdev=net0,mq=on
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Rich Lane <rich.lane@bigswitch.com>
Tested-by: Rich Lane <rich.lane@bigswitch.com>
Update for queue state event name:
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2016-03-21 14:45:08 +09:00
|
|
|
Vhost PMD event handling
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
This section describes how to handle vhost PMD events.
|
|
|
|
|
|
|
|
The user can register an event callback handler with ``rte_eth_dev_callback_register()``.
|
|
|
|
The registered callback handler will be invoked with one of below event types.
|
|
|
|
|
|
|
|
#. ``RTE_ETH_EVENT_INTR_LSC``:
|
|
|
|
|
|
|
|
It means link status of the port was changed.
|
|
|
|
|
|
|
|
#. ``RTE_ETH_EVENT_QUEUE_STATE``:
|
|
|
|
|
|
|
|
It means some of queue statuses were changed. Call ``rte_eth_vhost_get_queue_event()`` in the callback handler.
|
|
|
|
Because changing multiple statuses may occur only one event, call the function repeatedly as long as it doesn't return negative value.
|
|
|
|
|
|
|
|
Vhost PMD with testpmd application
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
This section demonstrates vhost PMD with testpmd DPDK sample application.
|
|
|
|
|
|
|
|
#. Launch the testpmd with vhost PMD:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
2020-10-21 09:17:13 +01:00
|
|
|
./dpdk-testpmd -l 0-3 -n 4 --vdev 'net_vhost0,iface=/tmp/sock0,queues=1' -- -i
|
vhost: add driver on top of the library
The patch introduces a new PMD. This PMD is implemented as thin wrapper
of librte_vhost. It means librte_vhost is also needed to compile the PMD.
The vhost messages will be handled only when a port is started. So start
a port first, then invoke QEMU.
The PMD has 2 parameters.
- iface: The parameter is used to specify a path to connect to a
virtio-net device.
- queues: The parameter is used to specify the number of the queues
virtio-net device has.
(Default: 1)
Here is an example.
$ ./testpmd -c f -n 4 --vdev 'eth_vhost0,iface=/tmp/sock0,queues=1' -- -i
To connect above testpmd, here is qemu command example.
$ qemu-system-x86_64 \
<snip>
-chardev socket,id=chr0,path=/tmp/sock0 \
-netdev vhost-user,id=net0,chardev=chr0,vhostforce,queues=1 \
-device virtio-net-pci,netdev=net0,mq=on
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Acked-by: Rich Lane <rich.lane@bigswitch.com>
Tested-by: Rich Lane <rich.lane@bigswitch.com>
Update for queue state event name:
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2016-03-21 14:45:08 +09:00
|
|
|
|
|
|
|
Other basic DPDK preparations like hugepage enabling here.
|
|
|
|
Please refer to the *DPDK Getting Started Guide* for detailed instructions.
|
|
|
|
|
|
|
|
#. Launch the QEMU:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
qemu-system-x86_64 <snip>
|
|
|
|
-chardev socket,id=chr0,path=/tmp/sock0 \
|
|
|
|
-netdev vhost-user,id=net0,chardev=chr0,vhostforce,queues=1 \
|
|
|
|
-device virtio-net-pci,netdev=net0
|
|
|
|
|
|
|
|
This command attaches one virtio-net device to QEMU guest.
|
|
|
|
After initialization processes between QEMU and DPDK vhost library are done, status of the port will be linked up.
|