diff options
author | 2016-07-25 13:22:22 -0300 | |
---|---|---|
committer | 2016-07-25 13:26:13 -0300 | |
commit | 5b1ff351aa2d38446487eed6ccd7ace1b654bbe6 (patch) | |
tree | 383fc0fb3c0906113cdbdc0268a32479ed8fa038 /doc/guides | |
parent | fe9e0a156b8ec361b633b4d20d2231113f28fa63 (diff) |
Imported Upstream version 16.07-rc4
Change-Id: Ic57f6a3726f2dbd1682223648d91310f45705327
Signed-off-by: Ricardo Salveti <ricardo.salveti@linaro.org>
Diffstat (limited to 'doc/guides')
39 files changed, 3681 insertions, 160 deletions
diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst index ba5c4dec..b2cc903f 100644 --- a/doc/guides/contributing/documentation.rst +++ b/doc/guides/contributing/documentation.rst @@ -155,7 +155,7 @@ It can be installed as follows: sudo apt-get -y install doxygen # Red Hat/Fedora. - sudo yum -y install doxygen + sudo dnf -y install doxygen `Sphinx`_ is a Python documentation tool for converting RST files to Html or to PDF (via LaTeX). For full support with figure and table captioning the latest version of Sphinx can be installed as follows: @@ -165,10 +165,12 @@ For full support with figure and table captioning the latest version of Sphinx c # Ubuntu/Debian. sudo apt-get -y install python-pip sudo pip install --upgrade sphinx + sudo pip install --upgrade sphinx_rtd_theme # Red Hat/Fedora. - sudo yum -y install python-pip + sudo dnf -y install python-pip sudo pip install --upgrade sphinx + sudo pip install --upgrade sphinx_rtd_theme For further information on getting started with Sphinx see the `Sphinx Tutorial <http://sphinx-doc.org/tutorial.html>`_. @@ -186,7 +188,7 @@ It can be installed as follows: sudo apt-get -y install inkscape # Red Hat/Fedora. - sudo yum -y install inkscape + sudo dnf -y install inkscape `TexLive <http://www.tug.org/texlive/>`_ is an installation package for Tex/LaTeX. It is used to generate the PDF versions of the documentation. @@ -198,7 +200,7 @@ The main required packages can be installed as follows: sudo apt-get -y install texlive-latex-extra # Red Hat/Fedora, selective install. - sudo yum -y install texlive-collection-latexextra + sudo dnf -y install texlive-collection-latexextra Build commands diff --git a/doc/guides/faq/faq.rst b/doc/guides/faq/faq.rst index 3228b92c..8d1ea6cc 100644 --- a/doc/guides/faq/faq.rst +++ b/doc/guides/faq/faq.rst @@ -50,7 +50,7 @@ When you stop and restart the test application, it looks to see if the pages are If you look in the directory, you will see ``n`` number of 2M pages files. If you specified 1024, you will see 1024 page files. These are then placed in memory segments to get contiguous memory. -If you need to change the number of pages, it is easier to first remove the pages. The tools/setup.sh script provides an option to do this. +If you need to change the number of pages, it is easier to first remove the pages. The tools/dpdk-setup.sh script provides an option to do this. See the "Quick Start Setup Script" section in the :ref:`DPDK Getting Started Guide <linux_gsg>` for more information. diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst new file mode 100644 index 00000000..a1c6262b --- /dev/null +++ b/doc/guides/howto/flow_bifurcation.rst @@ -0,0 +1,299 @@ +.. BSD LICENSE + Copyright(c) 2016 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Flow Bifurcation How-to Guide +============================= + +Flow Bifurcation is a mechanism which uses hardware capable Ethernet devices +to split traffic between Linux user space and kernel space. Since it is a +hardware assisted feature this approach can provide line rate processing +capability. Other than :ref:`KNI <kni>`, the software is just required to +enable device configuration, there is no need to take care of the packet +movement during the traffic split. This can yield better performance with +less CPU overhead. + +The Flow Bifurcation splits the incoming data traffic to user space +applications (such as DPDK applications) and/or kernel space programs (such as +the Linux kernel stack). It can direct some traffic, for example data plane +traffic, to DPDK, while directing some other traffic, for example control +plane traffic, to the traditional Linux networking stack. + +There are a number of technical options to achieve this. A typical example is +to combine the technology of SR-IOV and packet classification filtering. + +SR-IOV is a PCI standard that allows the same physical adapter to be split as +multiple virtual functions. Each virtual function (VF) has separated queues +with physical functions (PF). The network adapter will direct traffic to a +virtual function with a matching destination MAC address. In a sense, SR-IOV +has the capability for queue division. + +Packet classification filtering is a hardware capability available on most +network adapters. Filters can be configured to direct specific flows to a +given receive queue by hardware. Different NICs may have different filter +types to direct flows to a Virtual Function or a queue that belong to it. + +In this way the Linux networking stack can receive specific traffic through +the kernel driver while a DPDK application can receive specific traffic +bypassing the Linux kernel by using drivers like VFIO or the DPDK ``igb_uio`` +module. + +.. _figure_flow_bifurcation_overview: + +.. figure:: img/flow_bifurcation_overview.* + + Flow Bifurcation Overview + + +Using Flow Bifurcation on IXGBE in Linux +---------------------------------------- + +On Intel 82599 10 Gigabit Ethernet Controller series NICs Flow Bifurcation can +be achieved by SR-IOV and Intel Flow Director technologies. Traffic can be +directed to queues by the Flow Director capability, typically by matching +5-tuple of UDP/TCP packets. + +The typical procedure to achieve this is as follows: + +#. Boot the system without iommu, or with ``iommu=pt``. + +#. Create Virtual Functions: + + .. code-block:: console + + echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs + +#. Enable and set flow filters: + + .. code-block:: console + + ethtool -K eth1 ntuple on + ethtool -N eth1 flow-type udp4 src-ip 192.0.2.2 dst-ip 198.51.100.2 \ + action $queue_index_in_VF0 + ethtool -N eth1 flow-type udp4 src-ip 198.51.100.2 dst-ip 192.0.2.2 \ + action $queue_index_in_VF1 + + Where: + + * ``$queue_index_in_VFn``: Bits 39:32 of the variable defines VF id + 1; the lower 32 bits indicates the queue index of the VF. Thus: + + * ``$queue_index_in_VF0`` = ``(0x1 & 0xFF) << 32 + [queue index]``. + + * ``$queue_index_in_VF1`` = ``(0x2 & 0xFF) << 32 + [queue index]``. + + .. _figure_ixgbe_bifu_queue_idx: + + .. figure:: img/ixgbe_bifu_queue_idx.* + +#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci`` kernel modules as normal. + +#. Bind the virtual functions: + + .. code-block:: console + + modprobe vfio-pci + dpdk_nic_bind.py -b vfio-pci 01:10.0 + dpdk_nic_bind.py -b vfio-pci 01:10.1 + +#. Run a DPDK application on the VFs: + + .. code-block:: console + + testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac + +In this example, traffic matching the rules will go through the VF by matching +the filter rule. All other traffic, not matching the rules, will go through +the default queue or scaling on queues in the PF. That is to say UDP packets +with the specified IP source and destination addresses will go through the +DPDK application. All other traffic, with different hosts or different +protocols, will go through the Linux networking stack. + +.. note:: + + * The above steps work on the Linux kernel v4.2. + + * The Flow Bifurcation is implemented in Linux kernel and ixgbe kernel driver using the following patches: + + * `ethtool: Add helper routines to pass vf to rx_flow_spec <https://patchwork.ozlabs.org/patch/476511/>`_ + + * `ixgbe: Allow flow director to use entire queue space <https://patchwork.ozlabs.org/patch/476516/>`_ + + * The Ethtool version used in this example is 3.18. + + +Using Flow Bifurcation on I40E in Linux +--------------------------------------- + +On Intel X710/XL710 series Ethernet Controllers Flow Bifurcation can be +achieved by SR-IOV, Cloud Filter and L3 VEB switch. The traffic can be +directed to queues by the Cloud Filter and L3 VEB switch's matching rule. + +* L3 VEB filters work for non-tunneled packets. It can direct a packet just by + the Destination IP address to a queue in a VF. + +* Cloud filters work for the following types of tunneled packets. + + * Inner mac. + + * Inner mac + VNI. + + * Outer mac + Inner mac + VNI. + + * Inner mac + Inner vlan + VNI. + + * Inner mac + Inner vlan. + +The typical procedure to achieve this is as follows: + +#. Boot the system without iommu, or with ``iommu=pt``. + +#. Build and insert the ``i40e.ko`` module. + +#. Create Virtual Functions: + + .. code-block:: console + + echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs + +#. Add udp port offload to the NIC if using cloud filter: + + .. code-block:: console + + ip li add vxlan0 type vxlan id 42 group 239.1.1.1 local 10.16.43.214 dev <name> + ifconfig vxlan0 up + ip -d li show vxlan0 + + .. note:: + + Output such as ``add vxlan port 8472, index 0 success`` should be + found in the system log. + +#. Examples of enabling and setting flow filters: + + * L3 VEB filter, for a route whose destination IP is 192.168.50.108 to VF + 0's queue 2. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ip4 dst-ip 192.168.50.108 \ + user-def 0xffffffff00000000 action 2 loc 8 + + * Inner mac, for a route whose inner destination mac is 0:0:0:0:9:0 to + PF's queue 6. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \ + m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \ + user-def 0xffffffff00000003 action 6 loc 1 + + * Inner mac + VNI, for a route whose inner destination mac is 0:0:0:0:9:0 + and VNI is 8 to PF's queue 4. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \ + m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \ + user-def 0x800000003 action 4 loc 4 + + * Outer mac + Inner mac + VNI, for a route whose outer mac is + 68:05:ca:24:03:8b, inner destination mac is c2:1a:e1:53:bc:57, and VNI + is 8 to PF's queue 2. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ether dst 68:05:ca:24:03:8b \ + m 00:00:00:00:00:00 src c2:1a:e1:53:bc:57 m 00:00:00:00:00:00 \ + user-def 0x800000003 action 2 loc 2 + + * Inner mac + Inner vlan + VNI, for a route whose inner destination mac is + 00:00:00:00:20:00, inner vlan is 10, and VNI is 8 to VF 0's queue 1. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \ + m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \ + vlan 10 user-def 0x800000000 action 1 loc 5 + + * Inner mac + Inner vlan, for a route whose inner destination mac is + 00:00:00:00:20:00, and inner vlan is 10 to VF 0's queue 1. + + .. code-block:: console + + ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \ + m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \ + vlan 10 user-def 0xffffffff00000000 action 1 loc 5 + + .. note:: + + * If the upper 32 bits of 'user-def' are ``0xffffffff``, then the + filter can be used for programming an L3 VEB filter, otherwise the + upper 32 bits of 'user-def' can carry the tenant ID/VNI if + specified/required. + + * Cloud filters can be defined with inner mac, outer mac, inner ip, + inner vlan and VNI as part of the cloud tuple. It is always the + destination (not source) mac/ip that these filters use. For all + these examples dst and src mac address fields are overloaded dst == + outer, src == inner. + + * The filter will direct a packet matching the rule to a vf id + specified in the lower 32 bit of user-def to the queue specified by + 'action'. + + * If the vf id specified by the lower 32 bit of user-def is greater + than or equal to ``max_vfs``, then the filter is for the PF queues. + +#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci`` + kernel modules as normal. + +#. Bind the virtual function: + + .. code-block:: console + + modprobe vfio-pci + dpdk_nic_bind.py -b vfio-pci 01:10.0 + dpdk_nic_bind.py -b vfio-pci 01:10.1 + +#. run DPDK application on VFs: + + .. code-block:: console + + testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac + +.. note:: + + * The above steps work on the i40e Linux kernel driver v1.5.16. + + * The Ethtool version used in this example is 3.18. The mask ``ff`` means + 'not involved', while ``00`` or no mask means 'involved'. + + * For more details of the configuration, refer to the + `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_ diff --git a/doc/guides/howto/img/flow_bifurcation_overview.svg b/doc/guides/howto/img/flow_bifurcation_overview.svg new file mode 100644 index 00000000..4fa27648 --- /dev/null +++ b/doc/guides/howto/img/flow_bifurcation_overview.svg @@ -0,0 +1,544 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generated by Microsoft Visio, SVG Export bifurcated_driver_overview.svg Page-1 --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="6.71874in" + height="4.83839in" + viewBox="0 0 483.75 348.364" + xml:space="preserve" + color-interpolation-filters="sRGB" + class="st28" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="bifurcated_driver_overview.svg"><metadata + id="metadata240"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1600" + inkscape:window-height="837" + id="namedview238" + showgrid="false" + inkscape:zoom="1.0517845" + inkscape:cx="215.35622" + inkscape:cy="200.74714" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="g44" /><style + type="text/css" + id="style4"><![CDATA[ + .st1 {visibility:visible} + .st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st3 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.16666em;font-weight:bold;opacity:0.219608} + .st4 {fill:none;stroke:#c7c8c8;stroke-width:0.5} + .st5 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold} + .st6 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.5em;opacity:0.219608} + .st7 {fill:#000000;font-family:Calibri;font-size:1.5em} + .st8 {fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75} + .st9 {fill:#000000;font-family:Calibri;font-size:0.833336em} + .st10 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st11 {fill:#c00000;stroke:#c7c8c8;stroke-width:0.25} + .st12 {fill:#feffff;font-family:Calibri;font-size:0.833336em} + .st13 {font-size:1em} + .st14 {fill:#ff0000;font-size:1em;font-weight:bold} + .st15 {fill:#2e75b5;stroke:#c7c8c8;stroke-width:0.25} + .st16 {fill:url(#grad4-50);stroke:#c7c8c8;stroke-width:0.25} + .st17 {fill:#feffff;font-family:Calibri;font-size:0.666664em} + .st18 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25} + .st19 {fill:#000000;font-family:Calibri;font-size:1.16666em} + .st20 {marker-end:url(#mrkr13-84);marker-start:url(#mrkr13-82);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st21 {fill:#c00000;fill-opacity:1;stroke:#c00000;stroke-opacity:1;stroke-width:0.28409090909091} + .st22 {marker-end:url(#mrkr4-90);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st23 {marker-start:url(#mrkr13-106);stroke:#538135;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75} + .st24 {fill:#538135;fill-opacity:1;stroke:#538135;stroke-opacity:1;stroke-width:0.40983606557377} + .st25 {marker-start:url(#mrkr13-112);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75} + .st26 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.40983606557377} + .st27 {fill:none;stroke:none;stroke-width:0.25} + .st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]></style><defs + id="Patterns_And_Gradients"><radialGradient + id="grad4-50" + cx="0.5" + cy="0" + r="1.1"><stop + offset="0" + stop-color="#a8d08d" + stop-opacity="1" + id="stop8" /><stop + offset="0.24" + stop-color="#bedcaa" + stop-opacity="1" + id="stop10" /><stop + offset="0.59" + stop-color="#3374af" + stop-opacity="1" + id="stop12" /><stop + offset="0.75" + stop-color="#41719c" + stop-opacity="1" + id="stop14" /><stop + offset="1" + stop-color="#c5e0b3" + stop-opacity="1" + id="stop16" /></radialGradient></defs><defs + id="Markers"><g + id="lend13"><path + d="M 3 1 L 0 0 L 3 -1 L 3 1 " + style="stroke:none" + id="path20" /></g><marker + id="mrkr13-82" + class="st21" + refX="10.2" + orient="auto" + markerUnits="strokeWidth" + overflow="visible"><use + xlink:href="#lend13" + transform="scale(3.52) " + id="use23" /></marker><marker + id="mrkr13-84" + class="st21" + refX="-10.56" + orient="auto" + markerUnits="strokeWidth" + overflow="visible"><use + xlink:href="#lend13" + transform="scale(-3.52,-3.52) " + id="use26" /></marker><g + id="lend4"><path + d="M 2 1 L 0 0 L 2 -1 L 2 1 " + style="stroke:none" + id="path29" /></g><marker + id="mrkr4-90" + class="st21" + refX="-7.04" + orient="auto" + markerUnits="strokeWidth" + overflow="visible"><use + xlink:href="#lend4" + transform="scale(-3.52,-3.52) " + id="use32" /></marker><marker + id="mrkr13-106" + class="st24" + refX="7.1142857142857" + orient="auto" + markerUnits="strokeWidth" + overflow="visible"><use + xlink:href="#lend13" + transform="scale(2.44) " + id="use35" /></marker><marker + id="mrkr13-112" + class="st26" + refX="7.1142857142857" + orient="auto" + markerUnits="strokeWidth" + overflow="visible"><use + xlink:href="#lend13" + transform="scale(2.44) " + id="use38" /></marker></defs><defs + id="Filters"><filter + id="filter_2"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur42" /></filter></defs><g + id="g44"><title + id="title46">Page-1</title><g + id="shape85-1" + transform="translate(133.887,-26.1478)"><title + id="title49">Sheet.85</title><desc + id="desc51">NIC</desc><g + id="shadow85-2" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><rect + x="0" + y="255.497" + width="346.142" + height="92.8673" + class="st2" + id="rect54" /><text + x="162.89" + y="349.33" + class="st3" + id="text56">NIC</text> +</g><rect + x="0" + y="255.497" + width="346.142" + height="92.8673" + class="st4" + id="rect58" + style="stroke-width:0.50000076;stroke-miterlimit:3;stroke-dasharray:none" /><text + x="162.89" + y="349.33" + class="st5" + id="text60">NIC</text> +</g><g + id="shape20-9" + transform="translate(3.0289,-127.458)"><title + id="title63">Rounded Rectangle.20</title><desc + id="desc65">LINUX</desc><g + id="shadow20-10" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><path + d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39 348.36 Z" + class="st2" + id="path68" /><text + x="255.32" + y="238.8" + class="st6" + id="text70">LINUX</text> +</g><path + d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39 348.36 Z" + class="st4" + id="path72" /><text + x="255.32" + y="238.8" + class="st7" + id="text74">LINUX</text> +</g><g + id="shape8-17" + transform="translate(95.8962,-140.079)"><title + id="title77">Rounded Rectangle.8</title><desc + id="desc79">Kernel pf driver</desc><path + d="M18.57 348.36 L167.16 348.36 A18.5731 18.5731 -180 0 0 185.73 329.79 L185.73 303.58 A18.5731 18.5731 -180 0 0 167.16 285 L18.57 285 A18.5731 18.5731 -180 0 0 0 303.58 L0 329.79 A18.5731 18.5731 -180 0 0 18.57 348.36 Z" + class="st8" + id="path81" /><text + x="118.71" + y="319.68" + class="st9" + id="text83">Kernel pf driver </text> +</g><g + id="shape1-20" + transform="translate(103.263,-156.88)"><title + id="title86">Rounded Rectangle</title><desc + id="desc88">Filters support traffic steering to VF</desc><g + id="shadow1-21" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><path + d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55 348.36 Z" + class="st10" + id="path91" /></g><path + d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55 348.36 Z" + class="st11" + id="path93" /><text + x="10.03" + y="328.39" + class="st12" + id="text95" + style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4475">Filters support traffic</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff" + x="11.048484" + y="340.46152" + class="st12" + id="text95-1" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4477" + x="11.048484" + y="340.46152">steering to VF</tspan></text> +</g><g + id="shape3-27" + transform="translate(192.985,-73.088)"><title + id="title100">Rectangle.3</title><desc + id="desc102">Rx Queues (0-N) PF</desc><rect + x="0" + y="314.425" + width="75.9823" + height="33.9388" + class="st8" + id="rect104" /><text + x="16.43" + y="322.39" + class="st9" + id="text106" + style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4512">Rx Queues</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000" + x="23.187859" + y="333.70471" + class="st9" + id="text106-2" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4514" + x="23.187859" + y="333.70471">( 0-N )</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1" + x="27.490538" + y="345.52356" + class="st9" + id="text106-9" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4516" + x="27.490538" + y="345.52356"> PF</tspan></text> +</g><g + id="shape4-32" + transform="translate(344.949,-73.088)"><title + id="title113">Rectangle.4</title><desc + id="desc115">Rx Queues (0-M) VF(vf 0)</desc><g + id="shadow4-33" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><rect + x="0" + y="314.425" + width="75.9823" + height="33.9388" + class="st10" + id="rect118" /></g><rect + x="0" + y="314.425" + width="75.9823" + height="33.9388" + class="st15" + id="rect120" /><text + x="16.43" + y="322.39" + class="st9" + id="text122" + style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4571">Rx Queues</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000" + x="21.777092" + y="333.69595" + class="st9" + id="text122-8" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4569" + x="21.777092" + y="333.69595">( 0-M )</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1" + x="21.79059" + y="343.91479" + class="st9" + id="text122-0" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4573" + x="21.79059" + y="343.91479">VF(vf0)</tspan></text> +</g><g + id="shape5-44" + transform="translate(154.994,-43.0328)"><title + id="title137">Rectangle.5</title><desc + id="desc139">filters</desc><g + id="shadow5-45" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><rect + x="0" + y="331.479" + width="303.929" + height="16.885" + class="st10" + id="rect142" /></g><rect + x="0" + y="331.479" + width="303.929" + height="16.885" + class="st16" + id="rect144" /><text + x="140.28" + y="342.92" + class="st9" + id="text146">filters</text> +</g><g + id="shape6-52" + transform="translate(95.8962,-224.377)"><title + id="title149">Rounded Rectangle.6</title><desc + id="desc151">Tools to program filters</desc><path + d="m 7.6,347.29783 60.78,0 a 7.59811,7.59811 0 0 0 7.6,-7.59 l 0,-18.58 a 7.59811,7.59811 0 0 0 -7.6,-7.6 l -60.78,0 a 7.59811,7.59811 0 0 0 -7.6,7.6 l 0,18.58 a 7.59811,7.59811 0 0 0 7.6,7.59 z" + class="st8" + id="path153" + inkscape:connector-curvature="0" + style="fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75" /><text + x="21.74" + y="328.48001" + class="st9" + id="text155" + style="font-size:10.00003242px;font-family:Calibri;fill:#000000">Tools to <tspan + x="7.6900001" + class="st13" + id="tspan157" + style="font-size:10.00003242px" /></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000" + x="23.40806" + y="340.79666" + class="st9" + id="text155-1" + sodipodi:linespacing="125%"><tspan + x="9.358057" + class="st13" + id="tspan157-9" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">program filters</tspan></text> +</g><g + id="shape22-56" + transform="translate(11.4714,-156.88)"><title + id="title160">2-D word balloon</title><desc + id="desc162">Director flows to queue index in specified VF</desc><text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff" + x="8.0559683" + y="346.97244" + class="st17" + id="text169-3-4" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4471" + x="8.0559683" + y="346.97244">inspecified VF</tspan></text> +<g + id="shadow22-57" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><path + d="M0 327.15 L0 314.43 L28.49 314.43 L37.99 314.43 L47.49 314.43 L75.98 314.43 L75.98 327.15 L91.79 331.39 L75.98 335.64 L75.98 348.36 L47.49 348.36 L37.99 348.36 L28.49 348.36 L0 348.36 L0 335.64 L0 331.39 L0 327.15 Z" + class="st10" + id="path165" /></g><path + d="m 0.53783484,327.68783 0,-12.72 28.49000016,0 9.5,0 9.5,0 28.49,0 0,12.72 15.81,4.24 -15.81,4.25 0,12.72 -28.49,0 -9.5,0 -9.5,0 -28.49000016,0 0,-12.72 0,-4.25 0,-4.24 z" + class="st11" + id="path167" + inkscape:connector-curvature="0" + style="fill:#c00000;stroke:#c7c8c8;stroke-width:0.25" /><text + x="7.5599966" + y="324.19" + class="st17" + id="text169" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4446" + x="7.5599966" + y="324.19">Director flows</tspan></text> +<text + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff" + x="8.1099777" + y="334.57529" + class="st17" + id="text169-3" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4469" + x="8.1099777" + y="334.57529">to queue index</tspan></text> +<text + x="8.5350533" + y="345.4624" + class="st17" + id="text169-5" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.00001221px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:#feffff;" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan4479">in specified VF</tspan></text> +</g><g + id="shape24-64" + transform="translate(323.843,-285.05)"><title + id="title176">Rounded Rectangle.24</title><desc + id="desc178">DPDK</desc><g + id="shadow24-65" + transform="matrix(1,0,0,1,0.345598,1.97279)" + class="st1"><path + d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z" + class="st10" + id="path181" /></g><path + d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z" + class="st18" + id="path183" /><text + x="30.57" + y="321.61" + class="st19" + id="text185">DPDK</text> +</g><g + id="shape25-70" + transform="translate(192.985,-285.05)"><title + id="title188">Rounded Rectangle.25</title><desc + id="desc190">Socket</desc><path + d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z" + class="st8" + id="path192" /><text + x="27.56" + y="321.61" + class="st19" + id="text194">Socket</text> +</g><g + id="shape44-73" + transform="translate(154.994,569.271) rotate(180)"><title + id="title197">Simple Arrow.44</title><g + id="shadow44-74" + transform="matrix(1,0,0,1,-0.345598,-1.97279)" + class="st1" /></g><g + id="shape52-75" + transform="translate(154.994,-127.458)"><title + id="title201">Single arrowhead</title></g><g + id="shape70-76" + transform="translate(221.976,-107.027)"><title + id="title204">Dynamic connector.70</title><path + d="M9 338.16 L9 337.8 L9 325.87" + class="st20" + id="path206" /></g><g + id="shape81-85" + transform="translate(124.887,-224.377)"><title + id="title209">Dynamic connector.81</title><path + d="M9 348.36 L9 362.26" + class="st22" + id="path211" /></g><g + id="shape83-91" + transform="translate(240.398,-57.5029)"><title + id="title214">Dynamic connector.83</title><path + d="M-8.58 345.95 L-8.97 339.8" + class="st22" + id="path216" /></g><g + id="shape84-96" + transform="translate(373.94,-57.5029)"><title + id="title219">Dynamic connector.84</title><path + d="M9 345.95 L9 339.82" + class="st22" + id="path221" /></g><g + id="shape98-101" + transform="translate(539.29,6.22333) rotate(79.2209)"><title + id="title224">Sheet.98</title><path + d="M11.39 310.28 L11.72 310.42 C54.22 328.18 100.77 337.63 149.11 345.35 C162.41 347.48 175.84 349.47 187.65 347.74 C201.36 345.74 212.87 338.71 218.42 327.59 C222.66 319.09 223.42 308.2 229.69 303.23 C239.2 295.7 261.37 301.76 275.96 305.26" + class="st23" + id="path226" /></g><g + id="shape109-107" + transform="translate(712.298,124.855) rotate(100.2)"><title + id="title229">Sheet.109</title><path + d="M12.03 344.31 L12.38 344.21 C55.98 332.05 99.42 314.86 144.33 309.38 C167.01 306.62 190.06 306.85 204.84 318.11 C212.98 324.32 218.61 333.88 226.49 339.83 C238.38 348.81 255.38 349.56 275.91 347.51" + class="st25" + id="path231" /></g><g + id="shape110-113" + transform="translate(108.779,-175.962)"><title + id="title234">Sheet.110</title><rect + x="0" + y="341.614" + width="94.5" + height="6.75" + class="st27" + id="rect236" /></g></g></svg>
\ No newline at end of file diff --git a/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg new file mode 100644 index 00000000..f7e2bd80 --- /dev/null +++ b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export ixgbe_bifu_queue_idx.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59375in" height="0.535375in" + viewBox="0 0 330.75 38.547" xml:space="preserve" color-interpolation-filters="sRGB" class="st8"> + <v:documentProperties v:langID="1033" v:viewMarkup="false"/> + + <style type="text/css"> + <![CDATA[ + .st1 {visibility:visible} + .st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st3 {fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25} + .st4 {fill:#000000;font-family:Calibri;font-size:0.833336em} + .st5 {fill:#c5e0b3;stroke:#c7c8c8;stroke-width:0.25} + .st6 {fill:#f4b183;stroke:#c7c8c8;stroke-width:0.25} + .st7 {fill:none;stroke:none;stroke-width:0.25} + .st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Filters"> + <filter id="filter_2"> + <feGaussianBlur stdDeviation="2"/> + </filter> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/> + <g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(3.0294,-5.34781)"> + <title>Rectangle</title> + <desc>0x000000</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="52.1695" cy="30.3097" width="104.34" height="16.4746"/> + <g id="shadow1-2" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1" + transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1"> + <rect x="0" y="22.0724" width="104.339" height="16.4746" class="st2"/> + </g> + <rect x="0" y="22.0724" width="104.339" height="16.4746" class="st3"/> + <text x="32.27" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0x000000</text> </g> + <g id="shape2-7" v:mID="2" v:groupContext="shape" transform="translate(107.368,-5.34781)"> + <title>Rectangle.2</title> + <desc>VF ID + 1</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="30.2034" cy="30.3097" width="60.41" height="16.4746"/> + <g id="shadow2-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1" + transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1"> + <rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st2"/> + </g> + <rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st5"/> + <text x="12.32" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF ID + 1</text> </g> + <g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(167.775,-5.34781)"> + <title>Rectangle.3</title> + <desc>Queue Index</desc> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="79.6271" cy="30.3097" width="159.26" height="16.4746"/> + <g id="shadow3-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1" + transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1"> + <rect x="0" y="22.0724" width="159.254" height="16.4746" class="st2"/> + </g> + <rect x="0" y="22.0724" width="159.254" height="16.4746" class="st6"/> + <text x="53.74" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue Index</text> </g> + <g id="shape4-19" v:mID="4" v:groupContext="shape" transform="translate(305.063,-21.8224)"> + <title>Sheet.4</title> + <desc>0</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/> + <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/> + <text x="8.45" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text> </g> + <g id="shape6-22" v:mID="6" v:groupContext="shape" transform="translate(165.029,-21.8224)"> + <title>Sheet.6</title> + <desc>31</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/> + <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/> + <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>31</text> </g> + <g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(104.623,-21.8224)"> + <title>Sheet.7</title> + <desc>39</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/> + <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/> + <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>39</text> </g> + <g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(3.0294,-21.8224)"> + <title>Sheet.8</title> + <desc>63</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/> + <rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/> + <text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>63</text> </g> + </g> +</svg> diff --git a/doc/guides/howto/img/lm_bond_virtio_sriov.svg b/doc/guides/howto/img/lm_bond_virtio_sriov.svg new file mode 100644 index 00000000..d913ae01 --- /dev/null +++ b/doc/guides/howto/img/lm_bond_virtio_sriov.svg @@ -0,0 +1,666 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.8693" + height="762.99158" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="lm_overview.svg"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 372.04724 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="1052.3622 : 372.04724 : 1" + inkscape:persp3d-origin="526.18109 : 248.03149 : 1" + id="perspective3886" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.70710678" + inkscape:cx="201.38434" + inkscape:cy="397.3839" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1432" + inkscape:window-height="1000" + inkscape:window-x="137" + inkscape:window-y="20" + inkscape:window-maximized="0" + inkscape:snap-page="false" + inkscape:snap-grids="false" + showguides="true" + inkscape:guide-bbox="true" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.3"> + <inkscape:grid + type="xygrid" + id="grid3174" + empspacing="5" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" + spacingx="0.5px" + spacingy="0.5px" + originx="1780.3521px" + originy="-176.4939px" /> + <sodipodi:guide + position="1780.3521,-176.4939" + orientation="0,744.09448" + id="guide3176" /> + <sodipodi:guide + position="2524.4467,-176.4939" + orientation="-1052.3622,0" + id="guide3178" /> + <sodipodi:guide + position="3103.2093,1429.2206" + orientation="0,-744.09448" + id="guide3180" /> + <sodipodi:guide + position="826.06645,1429.2206" + orientation="1052.3622,0" + id="guide3182" /> + <sodipodi:guide + orientation="0,1" + position="2524.4467,565.50611" + id="guide3079" /> + <sodipodi:guide + orientation="0,1" + position="2494.3521,579.00611" + id="guide3081" /> + <sodipodi:guide + orientation="0,1" + position="2437.3521,579.00611" + id="guide3083" /> + <sodipodi:guide + position="-8.2192466,-76.99225" + orientation="0,4077.6428" + id="guide3649" /> + <sodipodi:guide + position="4069.4236,-76.99225" + orientation="-1720.5,0" + id="guide3651" /> + <sodipodi:guide + position="4069.4236,1643.5079" + orientation="0,-4077.6428" + id="guide3653" /> + <sodipodi:guide + position="-8.2192466,1643.5079" + orientation="1720.5,0" + id="guide3655" /> + <sodipodi:guide + position="-8.2192466,-76.99225" + orientation="0,4077.6428" + id="guide3657" /> + <sodipodi:guide + position="4069.4236,-76.99225" + orientation="-1720.5,0" + id="guide3659" /> + <sodipodi:guide + position="4069.4236,1643.5079" + orientation="0,-4077.6428" + id="guide3661" /> + <sodipodi:guide + position="-8.2192466,1643.5079" + orientation="1720.5,0" + id="guide3663" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(1780.3522,-112.87834)"> + <rect + style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.36521944px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="rect2985" + width="349.80563" + height="212.77235" + x="-1780.0696" + y="115.28934" + ry="38.183765" /> + <rect + style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.5459187px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="rect3755" + width="0" + height="0" + x="-629.48682" + y="1001.1993" /> + <rect + style="fill:#0000ff;fill-opacity:1" + id="rect3191" + width="358.58792" + height="214.06038" + x="-1087.5042" + y="112.97834" + ry="38.183765" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3195" + width="350.58966" + height="174.45921" + x="-1779.1808" + y="349.60342" + ry="39.59798" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3197" + width="357.25491" + height="170.35497" + x="-1084.8379" + y="353.79617" + ry="38.183765" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3199" + width="687.849" + height="55.655697" + x="-1603.3909" + y="687.73035" + ry="24.04163" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3201" + width="447.90167" + height="50.114544" + x="-1488.6338" + y="825.45538" + ry="19.658308" /> + <rect + style="opacity:0.60399996;fill:#0000ff;fill-opacity:1" + id="rect3046" + width="135.97015" + height="38.530865" + x="-1679.87" + y="524.00964" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1565.7183" + y="170.28043" + id="text3052" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-310.5984" + inkscape:transform-center-y="14.984243" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3054" + x="-1565.7183" + y="170.28043">VM 1 </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1268.2957" + y="803.349" + id="text3056" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-645.19167" + inkscape:transform-center-y="8.043534" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3058" + x="-1268.2957" + y="803.349">Switch with 10Gb ports</tspan><tspan + sodipodi:role="line" + x="-1268.2957" + y="826.53778" + id="tspan3060" /></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1573.7157" + y="433.78815" + id="text3062" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3064" + x="-1573.7157" + y="433.78815">Server 1</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.12897" + y="434.55573" + id="text3066" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3068" + x="-947.12897" + y="434.55573">Server 2</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1251.1786" + y="957.94836" + id="text3070" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3072" + x="-1251.1786" + y="957.94836"> 10 Gb Traffic Generator</tspan></text> + <text + xml:space="preserve" + style="font-size:20.1229248px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1016.8596" + y="162.4848" + id="text3074" + sodipodi:linespacing="125%" + transform="scale(1.0288342,0.97197394)" + inkscape:transform-center-x="-374.58424" + inkscape:transform-center-y="19.26541"><tspan + sodipodi:role="line" + id="tspan3076" + x="-1016.8596" + y="162.4848">VM 2 </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1576.4685" + y="479.5618" + id="text3078" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-405.24435" + transform="scale(1.1160112,0.89604835)" + inkscape:transform-center-y="-3.0408919e-05"><tspan + sodipodi:role="line" + id="tspan3080" + x="-1576.4685" + y="479.5618">Linux, KVM, QEMU </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.05627" + y="476.78903" + id="text3082" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3084" + x="-947.05627" + y="476.78903">Linux, KVM, QEMU </tspan></text> + <text + xml:space="preserve" + style="font-size:18.93562508px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1574.15" + y="575.35333" + id="text3086" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-152.77712" + inkscape:transform-center-y="6.9586675" + transform="scale(1.052991,0.94967575)"><tspan + sodipodi:role="line" + id="tspan3088" + x="-1574.15" + y="575.35333">10 Gb NIC</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-855.08612" + y="613.58636" + id="text3090" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-174.62846" + transform="scale(1.1160112,0.89604834)" + inkscape:transform-center-y="2.3462468e-05"><tspan + sodipodi:role="line" + id="tspan3092" + x="-855.08612" + y="613.58636">10 Gb NIC</tspan></text> + <rect + style="opacity:0.60199998;fill:#0000ff;fill-opacity:1" + id="rect3094" + width="125.30582" + height="38.530865" + x="-1427.5106" + y="437.27979" /> + <rect + style="opacity:0.60799997;fill:#0000ff;fill-opacity:1" + id="rect3096" + width="111.97541" + height="41.741772" + x="-1196.8135" + y="437.27979" /> + <text + xml:space="preserve" + style="font-size:19.30730629px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1322.4871" + y="491.82611" + id="text3098" + sodipodi:linespacing="125%" + transform="scale(1.0722964,0.93257795)" + inkscape:transform-center-x="-27.993731" + inkscape:transform-center-y="-6.9674825"><tspan + sodipodi:role="line" + id="tspan3100" + x="-1322.4871" + y="491.82611">10 Gb NIC</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1071.2081" + y="513.09308" + id="text3102" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-670.51946" + inkscape:transform-center-y="150.91262" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3104" + x="-1071.2081" + y="513.09308">10 Gb NIC</tspan></text> + <rect + style="fill:#7878ff;fill-opacity:1" + id="rect3106" + width="257.27686" + height="100.60838" + x="-1043.5138" + y="187.8994" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-912.34381" + y="232.86263" + id="text3108" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3110" + x="-912.34381" + y="232.86263">DPDK Testpmd App.</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-912.34381" + y="274.9668" + id="text3880" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3882" + x="-912.34381" + y="274.9668">bonded device with</tspan><tspan + sodipodi:role="line" + x="-912.34381" + y="298.15558" + id="tspan3884">virtio and VF slaves</tspan></text> + <rect + style="fill:#7878ff;fill-opacity:1" + id="rect3106-4" + width="257.27686" + height="100.60838" + x="-1748.0256" + y="184.68852" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1541.4333" + y="233.58643" + id="text3108-9" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3110-5" + x="-1541.4333" + y="233.58643">DPDK Testpmd App.</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1541.4845" + y="274.63931" + id="text3880-7" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3882-9" + x="-1541.4845" + y="274.63931">bonded device with</tspan><tspan + sodipodi:role="line" + x="-1541.4845" + y="297.82809" + id="tspan3884-8">virtio and VF slaves</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1576.4685" + y="504.73169" + id="text3951" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3953" + x="-1576.4685" + y="504.73169">Kernel PF driver</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.43506" + y="500.51361" + id="text3951-4" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3953-0" + x="-947.43506" + y="500.51361">Kernel PF driver</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1575.308" + y="548.3703" + id="text3976-9" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3978-3" + x="-1575.308" + y="548.3703">SW bridge with Tap</tspan><tspan + sodipodi:role="line" + x="-1575.308" + y="571.55908" + id="tspan3075">and PF connected </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1203.7942" + y="195.3643" + id="text4007" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan4009" + x="-1203.7942" + y="195.3643">NFS Server</tspan><tspan + sodipodi:role="line" + x="-1203.7942" + y="218.55309" + id="tspan4011">VM disk image</tspan><tspan + sodipodi:role="line" + x="-1203.7942" + y="241.74187" + id="tspan4013" /></text> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect4015" + width="193.29091" + height="94.186569" + x="-1353.4641" + y="134.34897" + ry="22.627417" /> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect3070" + width="17.329529" + height="11.773321" + x="-1278.1288" + y="744.45654" /> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect3070-3" + width="19.995611" + height="11.773321" + x="-1280.1283" + y="813.47321" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.44584394px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1270.1392,756.51119 0.5585,54.21449" + id="path3090" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <rect + style="opacity:0.61458333;fill:#0000ff;fill-opacity:1" + id="rect3046-7" + width="135.97015" + height="38.530865" + x="-978.67279" + y="523.78949" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880" + width="14.663447" + height="11.773321" + x="-1622.0532" + y="563.57544" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-8" + width="14.663447" + height="11.773321" + x="-914.96075" + y="564.21674" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-6" + width="14.663447" + height="11.773321" + x="-1482.7505" + y="674.35162" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-9" + width="14.663447" + height="11.773321" + x="-1198.8129" + y="720.37451" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-99" + width="14.663447" + height="11.773321" + x="-1085.5045" + y="674.35175" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-82" + width="14.663447" + height="11.773321" + x="-1301.4569" + y="452.79913" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-0" + width="14.663447" + height="11.773321" + x="-1210.8103" + y="452.79922" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.49161923px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1612.063,574.09703 136.6956,98.10634" + id="path3946" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.62650716px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -906.09206,573.4328 -171.08524,98.7457" + id="path3948" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.54592061px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1291.5381,459.322 88.4734,2e-5" + id="path3950" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.30841" + y="544.97314" + id="text3976-9-5" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3978-3-7" + x="-947.30841" + y="544.97314">SW bridge with Tap</tspan><tspan + sodipodi:role="line" + x="-947.30841" + y="568.16193" + id="tspan3075-1">and PF connected </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1220.5167" + y="460.53635" + id="text3101" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3103" + x="-1220.5167" + y="460.53635">10 Gb Migration Link</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot3085" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion + id="flowRegion3087"><rect + id="rect3089" + width="1" + height="41.5" + x="-1" + y="701.59448" /></flowRegion><flowPara + id="flowPara3091" /></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3093" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion + id="flowRegion3095"><rect + id="rect3097" + width="1" + height="41" + x="-1.5" + y="700.59448" /></flowRegion><flowPara + id="flowPara3099" /></flowRoot> </g> +</svg> diff --git a/doc/guides/howto/img/lm_vhost_user.svg b/doc/guides/howto/img/lm_vhost_user.svg new file mode 100644 index 00000000..3601cf11 --- /dev/null +++ b/doc/guides/howto/img/lm_vhost_user.svg @@ -0,0 +1,644 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.8693" + height="762.99158" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="lm_vhost_user.svg"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 372.04724 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="1052.3622 : 372.04724 : 1" + inkscape:persp3d-origin="526.18109 : 248.03149 : 1" + id="perspective3886" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.70710678" + inkscape:cx="201.38434" + inkscape:cy="401.97681" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1515" + inkscape:window-height="1092" + inkscape:window-x="141" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:snap-page="false" + inkscape:snap-grids="false" + showguides="true" + inkscape:guide-bbox="true" + fit-margin-top="0.1" + fit-margin-left="0.1" + fit-margin-right="0.1" + fit-margin-bottom="0.3"> + <inkscape:grid + type="xygrid" + id="grid3174" + empspacing="5" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" + spacingx="0.5px" + spacingy="0.5px" + originx="1780.3521px" + originy="-176.4939px" /> + <sodipodi:guide + position="1780.3521,-176.4939" + orientation="0,744.09448" + id="guide3176" /> + <sodipodi:guide + position="2524.4467,-176.4939" + orientation="-1052.3622,0" + id="guide3178" /> + <sodipodi:guide + position="3103.2093,1429.2206" + orientation="0,-744.09448" + id="guide3180" /> + <sodipodi:guide + position="826.06645,1429.2206" + orientation="1052.3622,0" + id="guide3182" /> + <sodipodi:guide + orientation="0,1" + position="2524.4467,565.50611" + id="guide3079" /> + <sodipodi:guide + orientation="0,1" + position="2494.3521,579.00611" + id="guide3081" /> + <sodipodi:guide + orientation="0,1" + position="2437.3521,579.00611" + id="guide3083" /> + <sodipodi:guide + position="-8.2192466,-76.99225" + orientation="0,4077.6428" + id="guide3649" /> + <sodipodi:guide + position="4069.4236,-76.99225" + orientation="-1720.5,0" + id="guide3651" /> + <sodipodi:guide + position="4069.4236,1643.5079" + orientation="0,-4077.6428" + id="guide3653" /> + <sodipodi:guide + position="-8.2192466,1643.5079" + orientation="1720.5,0" + id="guide3655" /> + <sodipodi:guide + position="-8.2192466,-76.99225" + orientation="0,4077.6428" + id="guide3657" /> + <sodipodi:guide + position="4069.4236,-76.99225" + orientation="-1720.5,0" + id="guide3659" /> + <sodipodi:guide + position="4069.4236,1643.5079" + orientation="0,-4077.6428" + id="guide3661" /> + <sodipodi:guide + position="-8.2192466,1643.5079" + orientation="1720.5,0" + id="guide3663" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(1780.3522,-112.87834)"> + <rect + style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.36521944px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="rect2985" + width="349.80563" + height="212.77235" + x="-1780.0696" + y="115.28934" + ry="38.183765" /> + <rect + style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:1.5459187px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="rect3755" + width="0" + height="0" + x="-629.48682" + y="1001.1993" /> + <rect + style="fill:#0000ff;fill-opacity:1" + id="rect3191" + width="358.58792" + height="214.06038" + x="-1087.5042" + y="112.97834" + ry="38.183765" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3195" + width="350.58966" + height="174.45921" + x="-1779.1808" + y="349.60342" + ry="39.59798" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3197" + width="357.25491" + height="170.35497" + x="-1084.8379" + y="353.79617" + ry="38.183765" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3199" + width="687.849" + height="55.655697" + x="-1603.3909" + y="687.73035" + ry="24.04163" /> + <rect + style="fill:#a000ff;fill-opacity:1" + id="rect3201" + width="447.90167" + height="50.114544" + x="-1488.6338" + y="825.45538" + ry="19.658308" /> + <rect + style="opacity:0.60399996;fill:#0000ff;fill-opacity:1" + id="rect3046" + width="135.97015" + height="38.530865" + x="-1679.87" + y="524.00964" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1565.7183" + y="170.28043" + id="text3052" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-310.5984" + inkscape:transform-center-y="14.984243" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3054" + x="-1565.7183" + y="170.28043">VM 1 </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1268.2957" + y="803.349" + id="text3056" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-645.19167" + inkscape:transform-center-y="8.043534" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3058" + x="-1268.2957" + y="803.349">Switch with 10Gb ports</tspan><tspan + sodipodi:role="line" + x="-1268.2957" + y="826.53778" + id="tspan3060" /></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1573.7157" + y="433.78815" + id="text3062" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3064" + x="-1573.7157" + y="433.78815">Server 1</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.12897" + y="434.55573" + id="text3066" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3068" + x="-947.12897" + y="434.55573">Server 2</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1251.1786" + y="957.94836" + id="text3070" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3072" + x="-1251.1786" + y="957.94836"> 10 Gb Traffic Generator</tspan></text> + <text + xml:space="preserve" + style="font-size:20.1229248px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1016.8596" + y="162.4848" + id="text3074" + sodipodi:linespacing="125%" + transform="scale(1.0288342,0.97197394)" + inkscape:transform-center-x="-374.58424" + inkscape:transform-center-y="19.26541"><tspan + sodipodi:role="line" + id="tspan3076" + x="-1016.8596" + y="162.4848">VM 2 </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1575.2013" + y="479.56177" + id="text3078" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-405.24435" + transform="scale(1.1160112,0.89604835)" + inkscape:transform-center-y="-3.0408919e-05"><tspan + sodipodi:role="line" + id="tspan3080" + x="-1575.2013" + y="479.56177">Linux, KVM, QEMU 2.5 </tspan></text> + <text + xml:space="preserve" + style="font-size:18.93562508px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-906.26202" + y="579.8208" + id="text3086" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-152.77712" + inkscape:transform-center-y="6.9586675" + transform="scale(1.052991,0.94967574)"><tspan + sodipodi:role="line" + id="tspan3088" + x="-906.26202" + y="579.8208">10 Gb NIC</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1493.7568" + y="613.58636" + id="text3090" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-174.62846" + transform="scale(1.1160112,0.89604835)" + inkscape:transform-center-y="2.3462468e-05"><tspan + sodipodi:role="line" + id="tspan3092" + x="-1493.7568" + y="613.58636">10 Gb NIC</tspan></text> + <rect + style="opacity:0.60199998;fill:#0000ff;fill-opacity:1" + id="rect3094" + width="125.30582" + height="38.530865" + x="-1427.5106" + y="437.27979" /> + <rect + style="opacity:0.60799997;fill:#0000ff;fill-opacity:1" + id="rect3096" + width="111.97541" + height="41.741772" + x="-1196.8135" + y="437.27979" /> + <text + xml:space="preserve" + style="font-size:19.30730629px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1322.4871" + y="491.82611" + id="text3098" + sodipodi:linespacing="125%" + transform="scale(1.0722964,0.93257795)" + inkscape:transform-center-x="-27.993731" + inkscape:transform-center-y="-6.9674825"><tspan + sodipodi:role="line" + id="tspan3100" + x="-1322.4871" + y="491.82611">10 Gb NIC</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1071.2081" + y="513.09308" + id="text3102" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-670.51946" + inkscape:transform-center-y="150.91262" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3104" + x="-1071.2081" + y="513.09308">10 Gb NIC</tspan></text> + <rect + style="fill:#7878ff;fill-opacity:1" + id="rect3106" + width="277.07584" + height="86.466248" + x="-1043.5138" + y="187.8994" /> + <rect + style="fill:#7878ff;fill-opacity:1" + id="rect3106-4" + width="268.59058" + height="85.052032" + x="-1748.0256" + y="184.68852" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1557.907" + y="233.58643" + id="text3108-9" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3110-5" + x="-1557.907" + y="233.58643">DPDK Testpmd App</tspan><tspan + sodipodi:role="line" + x="-1557.907" + y="256.77521" + id="tspan3347" /></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1556.5636" + y="253.73872" + id="text3880-7" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3882-9" + x="-1556.5636" + y="253.73872" /><tspan + sodipodi:role="line" + x="-1556.5636" + y="276.92749" + id="tspan3884-8">DPDK virtio PMD's </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1575.2013" + y="525.24933" + id="text3951" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3953" + x="-1575.2013" + y="525.24933">DPDK PF PMD and vhost_user</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-948.70227" + y="524.18781" + id="text3951-4" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3953-0" + x="-948.70227" + y="524.18781">DPDK PF PMD and vhost_user</tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1203.7942" + y="195.3643" + id="text4007" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan4009" + x="-1203.7942" + y="195.3643">NFS Server</tspan><tspan + sodipodi:role="line" + x="-1203.7942" + y="218.55309" + id="tspan4011">VM disk image</tspan><tspan + sodipodi:role="line" + x="-1203.7942" + y="241.74187" + id="tspan4013" /></text> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect4015" + width="193.29091" + height="94.186569" + x="-1353.4641" + y="134.34897" + ry="22.627417" /> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect3070" + width="17.329529" + height="11.773321" + x="-1278.1288" + y="744.45654" /> + <rect + style="opacity:0.45833333;fill:#a000ff;fill-opacity:1" + id="rect3070-3" + width="19.995611" + height="11.773321" + x="-1280.1283" + y="813.47321" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.44584394px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1270.1392,756.51119 0.5585,54.21449" + id="path3090" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <rect + style="opacity:0.59895833;fill:#0000ff;fill-opacity:1" + id="rect3046-7" + width="135.97015" + height="38.530865" + x="-981.50122" + y="523.78949" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880" + width="14.663447" + height="11.773321" + x="-1622.0532" + y="563.57544" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-8" + width="14.663447" + height="11.773321" + x="-914.96075" + y="564.21674" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-6" + width="14.663447" + height="11.773321" + x="-1482.7505" + y="674.35162" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-9" + width="14.663447" + height="11.773321" + x="-1198.8129" + y="720.37451" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-99" + width="14.663447" + height="11.773321" + x="-1085.5045" + y="674.35175" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-82" + width="14.663447" + height="11.773321" + x="-1301.4569" + y="452.79913" /> + <rect + style="opacity:0.59375;fill:#a000ff;fill-opacity:1" + id="rect3880-0" + width="14.663447" + height="11.773321" + x="-1210.8103" + y="452.79922" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.49161923px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1612.063,574.09703 136.6956,98.10634" + id="path3946" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.62650716px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -906.09206,573.4328 -171.08524,98.7457" + id="path3948" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <path + style="fill:none;stroke:#000000;stroke-width:1.54592061px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -1291.5381,459.322 88.4734,2e-5" + id="path3950" + inkscape:connector-type="polyline" + inkscape:connector-curvature="3" /> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-1220.5167" + y="460.53635" + id="text3101" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604834)"><tspan + sodipodi:role="line" + id="tspan3103" + x="-1220.5167" + y="460.53635">10 Gb Migration Link</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot3085" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion + id="flowRegion3087"><rect + id="rect3089" + width="1" + height="41.5" + x="-1" + y="701.59448" /></flowRegion><flowPara + id="flowPara3091" /></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3093" + style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + transform="matrix(1.7252629,0,0,1.3852181,-1778.0192,-314.07213)"><flowRegion + id="flowRegion3095"><rect + id="rect3097" + width="1" + height="41" + x="-1.5" + y="700.59448" /></flowRegion><flowPara + id="flowPara3099" /></flowRoot> <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-927.84314" + y="233.94818" + id="text3108-9-3" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3110-5-6" + x="-927.84314" + y="233.94818">DPDK Testpmd App</tspan><tspan + sodipodi:role="line" + x="-927.84314" + y="257.13696" + id="tspan3347-7" /></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-928.51379" + y="255.71736" + id="text3880-7-5" + sodipodi:linespacing="125%" + transform="scale(1.1160112,0.89604835)"><tspan + sodipodi:role="line" + id="tspan3882-9-3" + x="-928.51379" + y="255.71736" /><tspan + sodipodi:role="line" + x="-928.51379" + y="278.90616" + id="tspan3884-8-5">DPDK virtio PMD's </tspan></text> + <text + xml:space="preserve" + style="font-size:18.55102539px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans" + x="-947.67664" + y="476.70486" + id="text3078-6" + sodipodi:linespacing="125%" + inkscape:transform-center-x="-405.24435" + transform="scale(1.1160112,0.89604835)" + inkscape:transform-center-y="-3.0408919e-05"><tspan + sodipodi:role="line" + id="tspan3080-2" + x="-947.67664" + y="476.70486">Linux, KVM, QEMU 2.5 </tspan></text> + </g> +</svg> diff --git a/doc/guides/howto/index.rst b/doc/guides/howto/index.rst new file mode 100644 index 00000000..aa6d3e2b --- /dev/null +++ b/doc/guides/howto/index.rst @@ -0,0 +1,40 @@ +.. BSD LICENSE + Copyright(c) 2016 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +How To User Guides +================== + +.. toctree:: + :maxdepth: 2 + :numbered: + + lm_bond_virtio_sriov + lm_virtio_vhost_user + flow_bifurcation diff --git a/doc/guides/howto/lm_bond_virtio_sriov.rst b/doc/guides/howto/lm_bond_virtio_sriov.rst new file mode 100644 index 00000000..49666f13 --- /dev/null +++ b/doc/guides/howto/lm_bond_virtio_sriov.rst @@ -0,0 +1,713 @@ +.. BSD LICENSE + Copyright(c) 2016 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Live Migration of VM with SR-IOV VF +=================================== + +Overview +-------- + +It is not possible to migrate a Virtual Machine which has an SR-IOV Virtual Function (VF). + +To get around this problem the bonding PMD is used. + +The following sections show an example of how to do this. + +Test Setup +---------- + +A bonded device is created in the VM. +The virtio and VF PMD's are added as slaves to the bonded device. +The VF is set as the primary slave of the bonded device. + +A bridge must be set up on the Host connecting the tap device, which is the +backend of the Virtio device and the Physical Function (PF) device. + +To test the Live Migration two servers with identical operating systems installed are used. +KVM and Qemu 2.3 is also required on the servers. + +In this example, the servers have Niantic and or Fortville NIC's installed. +The NIC's on both servers are connected to a switch +which is also connected to the traffic generator. + +The switch is configured to broadcast traffic on all the NIC ports. +A :ref:`Sample switch configuration <lm_bond_virtio_sriov_switch_conf>` +can be found in this section. + +The host is running the Kernel PF driver (ixgbe or i40e). + +The ip address of host_server_1 is 10.237.212.46 + +The ip address of host_server_2 is 10.237.212.131 + +.. _figure_lm_bond_virtio_sriov: + +.. figure:: img/lm_bond_virtio_sriov.* + +Live Migration steps +-------------------- + +The sample scripts mentioned in the steps below can be found in the +:ref:`Sample host scripts <lm_bond_virtio_sriov_host_scripts>` and +:ref:`Sample VM scripts <lm_bond_virtio_sriov_vm_scripts>` sections. + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./setup_vf_on_212_46.sh + +For Fortville NIC + +.. code-block:: console + + ./vm_virtio_vf_i40e_212_46.sh + +For Niantic NIC + +.. code-block:: console + + ./vm_virtio_vf_one_212_46.sh + +On host_server_1: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./setup_bridge_on_212_46.sh + ./connect_to_qemu_mon_on_host.sh + (qemu) + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_1:** + +.. code-block:: console + + cd /root/dpdk/vm_scripts + ./setup_dpdk_in_vm.sh + ./run_testpmd_bonding_in_vm.sh + + testpmd> show port info all + +The ``mac_addr`` command only works with kernel PF for Niantic + +.. code-block:: console + + testpmd> mac_addr add port 1 vf 0 AA:BB:CC:DD:EE:FF + +The syntax of the ``testpmd`` command is: + +Create bonded device (mode) (socket). + +Mode 1 is active backup. + +Virtio is port 0 (P0). + +VF is port 1 (P1). + +Bonding is port 2 (P2). + +.. code-block:: console + + testpmd> create bonded device 1 0 + Created new bonded device eth_bond_testpmd_0 on (port 2). + testpmd> add bonding slave 0 2 + testpmd> add bonding slave 1 2 + testpmd> show bonding config 2 + +The syntax of the ``testpmd`` command is: + +set bonding primary (slave id) (port id) + +Set primary to P1 before starting bonding port. + +.. code-block:: console + + testpmd> set bonding primary 1 2 + testpmd> show bonding config 2 + testpmd> port start 2 + Port 2: 02:09:C0:68:99:A5 + Checking link statuses... + Port 0 Link Up - speed 10000 Mbps - full-duplex + Port 1 Link Up - speed 10000 Mbps - full-duplex + Port 2 Link Up - speed 10000 Mbps - full-duplex + + testpmd> show bonding config 2 + +Primary is now P1. There are 2 active slaves. + +Use P2 only for forwarding. + +.. code-block:: console + + testpmd> set portlist 2 + testpmd> show config fwd + testpmd> set fwd mac + testpmd> start + testpmd> show bonding config 2 + +Primary is now P1. There are 2 active slaves. + +.. code-block:: console + + testpmd> show port stats all + +VF traffic is seen at P1 and P2. + +.. code-block:: console + + testpmd> clear port stats all + testpmd> set bonding primary 0 2 + testpmd> remove bonding slave 1 2 + testpmd> show bonding config 2 + +Primary is now P0. There is 1 active slave. + +.. code-block:: console + + testpmd> clear port stats all + testpmd> show port stats all + +No VF traffic is seen at P0 and P2, VF MAC address still present. + +.. code-block:: console + + testpmd> port stop 1 + testpmd> port close 1 + +Port close should remove VF MAC address, it does not remove perm_addr. + +The ``mac_addr`` command only works with the kernel PF for Niantic. + +.. code-block:: console + + testpmd> mac_addr remove 1 AA:BB:CC:DD:EE:FF + testpmd> port detach 1 + Port '0000:00:04.0' is detached. Now total ports is 2 + testpmd> show port stats all + +No VF traffic is seen at P0 and P2. + +On host_server_1: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + (qemu) device_del vf1 + + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_1:** + +.. code-block:: console + + testpmd> show bonding config 2 + +Primary is now P0. There is 1 active slave. + +.. code-block:: console + + testpmd> show port info all + testpmd> show port stats all + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./setup_vf_on_212_131.sh + ./vm_virtio_one_migrate.sh + +On host_server_2: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + ./setup_bridge_on_212_131.sh + ./connect_to_qemu_mon_on_host.sh + (qemu) info status + VM status: paused (inmigrate) + (qemu) + +On host_server_1: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Check that the switch is up before migrating. + +.. code-block:: console + + (qemu) migrate tcp:10.237.212.131:5555 + (qemu) info status + VM status: paused (postmigrate) + +For the Niantic NIC. + +.. code-block:: console + + (qemu) info migrate + capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off + Migration status: completed + total time: 11834 milliseconds + downtime: 18 milliseconds + setup: 3 milliseconds + transferred ram: 389137 kbytes + throughput: 269.49 mbps + remaining ram: 0 kbytes + total ram: 1590088 kbytes + duplicate: 301620 pages + skipped: 0 pages + normal: 96433 pages + normal bytes: 385732 kbytes + dirty sync count: 2 + (qemu) quit + +For the Fortville NIC. + +.. code-block:: console + + (qemu) info migrate + capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off + Migration status: completed + total time: 11619 milliseconds + downtime: 5 milliseconds + setup: 7 milliseconds + transferred ram: 379699 kbytes + throughput: 267.82 mbps + remaining ram: 0 kbytes + total ram: 1590088 kbytes + duplicate: 303985 pages + skipped: 0 pages + normal: 94073 pages + normal bytes: 376292 kbytes + dirty sync count: 2 + (qemu) quit + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_2:** + + Hit Enter key. This brings the user to the testpmd prompt. + +.. code-block:: console + + testpmd> + +On host_server_2: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: console + + (qemu) info status + VM status: running + +For the Niantic NIC. + +.. code-block:: console + + (qemu) device_add pci-assign,host=06:10.0,id=vf1 + +For the Fortville NIC. + +.. code-block:: console + + (qemu) device_add pci-assign,host=03:02.0,id=vf1 + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_2:** + +.. code-block:: console + + testomd> show port info all + testpmd> show port stats all + testpmd> show bonding config 2 + testpmd> port attach 0000:00:04.0 + Port 1 is attached. + Now total ports is 3 + Done + + testpmd> port start 1 + +The ``mac_addr`` command only works with the Kernel PF for Niantic. + +.. code-block:: console + + testpmd> mac_addr add port 1 vf 0 AA:BB:CC:DD:EE:FF + testpmd> show port stats all. + testpmd> show config fwd + testpmd> show bonding config 2 + testpmd> add bonding slave 1 2 + testpmd> set bonding primary 1 2 + testpmd> show bonding config 2 + testpmd> show port stats all + +VF traffic is seen at P1 (VF) and P2 (Bonded device). + +.. code-block:: console + + testpmd> remove bonding slave 0 2 + testpmd> show bonding config 2 + testpmd> port stop 0 + testpmd> port close 0 + testpmd> port detach 0 + Port '0000:00:03.0' is detached. Now total ports is 2 + + testpmd> show port info all + testpmd> show config fwd + testpmd> show port stats all + +VF traffic is seen at P1 (VF) and P2 (Bonded device). + +.. _lm_bond_virtio_sriov_host_scripts: + +Sample host scripts +------------------- + +setup_vf_on_212_46.sh +~~~~~~~~~~~~~~~~~~~~~ +Set up Virtual Functions on host_server_1 + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host 10.237.212.46 to setup the VF + + # set up Niantic VF + cat /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs + cat /sys/bus/pci/devices/0000\:09\:00.0/sriov_numvfs + rmmod ixgbevf + + # set up Fortville VF + cat /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs + cat /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs + rmmod i40evf + +vm_virtio_vf_one_212_46.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setup Virtual Machine on host_server_1 + +.. code-block:: sh + + #!/bin/sh + + # Path to KVM tool + KVM_PATH="/usr/bin/qemu-system-x86_64" + + # Guest Disk image + DISK_IMG="/home/username/disk_image/virt1_sml.disk" + + # Number of guest cpus + VCPUS_NR="4" + + # Memory + MEM=1536 + + taskset -c 1-5 $KVM_PATH \ + -enable-kvm \ + -m $MEM \ + -smp $VCPUS_NR \ + -cpu host \ + -name VM1 \ + -no-reboot \ + -net none \ + -vnc none -nographic \ + -hda $DISK_IMG \ + -netdev type=tap,id=net1,script=no,downscript=no,ifname=tap1 \ + -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB \ + -device pci-assign,host=09:10.0,id=vf1 \ + -monitor telnet::3333,server,nowait + +setup_bridge_on_212_46.sh +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setup bridge on host_server_1 + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host 10.237.212.46 to setup the bridge + # for the Tap device and the PF device. + # This enables traffic to go from the PF to the Tap to the Virtio PMD in the VM. + + # ens3f0 is the Niantic NIC + # ens6f0 is the Fortville NIC + + ifconfig ens3f0 down + ifconfig tap1 down + ifconfig ens6f0 down + ifconfig virbr0 down + + brctl show virbr0 + brctl addif virbr0 ens3f0 + brctl addif virbr0 ens6f0 + brctl addif virbr0 tap1 + brctl show virbr0 + + ifconfig ens3f0 up + ifconfig tap1 up + ifconfig ens6f0 up + ifconfig virbr0 up + +connect_to_qemu_mon_on_host.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # This script is run on both hosts when the VM is up, + # to connect to the Qemu Monitor. + + telnet 0 3333 + +setup_vf_on_212_131.sh +~~~~~~~~~~~~~~~~~~~~~~ + +Set up Virtual Functions on host_server_2 + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host 10.237.212.131 to setup the VF + + # set up Niantic VF + cat /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs + cat /sys/bus/pci/devices/0000\:06\:00.0/sriov_numvfs + rmmod ixgbevf + + # set up Fortville VF + cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs + cat /sys/bus/pci/devices/0000\:03\:00.0/sriov_numvfs + rmmod i40evf + +vm_virtio_one_migrate.sh +~~~~~~~~~~~~~~~~~~~~~~~~ + +Setup Virtual Machine on host_server_2 + +.. code-block:: sh + + #!/bin/sh + # Start the VM on host_server_2 with the same parameters except without the VF + # parameters, as the VM on host_server_1, in migration-listen mode + # (-incoming tcp:0:5555) + + # Path to KVM tool + KVM_PATH="/usr/bin/qemu-system-x86_64" + + # Guest Disk image + DISK_IMG="/home/username/disk_image/virt1_sml.disk" + + # Number of guest cpus + VCPUS_NR="4" + + # Memory + MEM=1536 + + taskset -c 1-5 $KVM_PATH \ + -enable-kvm \ + -m $MEM \ + -smp $VCPUS_NR \ + -cpu host \ + -name VM1 \ + -no-reboot \ + -net none \ + -vnc none -nographic \ + -hda $DISK_IMG \ + -netdev type=tap,id=net1,script=no,downscript=no,ifname=tap1 \ + -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB \ + -incoming tcp:0:5555 \ + -monitor telnet::3333,server,nowait + +setup_bridge_on_212_131.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setup bridge on host_server_2 + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host to setup the bridge + # for the Tap device and the PF device. + # This enables traffic to go from the PF to the Tap to the Virtio PMD in the VM. + + # ens4f0 is the Niantic NIC + # ens5f0 is the Fortville NIC + + ifconfig ens4f0 down + ifconfig tap1 down + ifconfig ens5f0 down + ifconfig virbr0 down + + brctl show virbr0 + brctl addif virbr0 ens4f0 + brctl addif virbr0 ens5f0 + brctl addif virbr0 tap1 + brctl show virbr0 + + ifconfig ens4f0 up + ifconfig tap1 up + ifconfig ens5f0 up + ifconfig virbr0 up + +.. _lm_bond_virtio_sriov_vm_scripts: + +Sample VM scripts +----------------- + +setup_dpdk_in_vm.sh +~~~~~~~~~~~~~~~~~~~ + +Set up DPDK in the Virtual Machine + +.. code-block:: sh + + #!/bin/sh + # this script matches the vm_virtio_vf_one script + # virtio port is 03 + # vf port is 04 + + cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + + ifconfig -a + /root/dpdk/tools/dpdk_nic_bind.py --status + + rmmod virtio-pci ixgbevf + + modprobe uio + insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko + + /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:03.0 + /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:04.0 + + /root/dpdk/tools/dpdk_nic_bind.py --status + +run_testpmd_bonding_in_vm.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Run testpmd in the Virtual Machine. + +.. code-block:: sh + + #!/bin/sh + # Run testpmd in the VM + + # The test system has 8 cpus (0-7), use cpus 2-7 for VM + # Use taskset -pc <core number> <thread_id> + + # use for bonding of virtio and vf tests in VM + + /root/dpdk/x86_64-default-linuxapp-gcc/app/testpmd \ + -c f -n 4 --socket-mem 350 -- --i --port-topology=chained + +.. _lm_bond_virtio_sriov_switch_conf: + +Sample switch configuration +--------------------------- + +The Intel switch is used to connect the traffic generator to the +NIC's on host_server_1 and host_server_2. + +In order to run the switch configuration two console windows are required. + +Log in as root in both windows. + +TestPointShared, run_switch.sh and load /root/switch_config must be executed +in the sequence below. + +On Switch: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~ + +run TestPointShared + +.. code-block:: console + + /usr/bin/TestPointShared + +On Switch: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~ + +execute run_switch.sh + +.. code-block:: console + + /root/run_switch.sh + +On Switch: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~ + +load switch configuration + +.. code-block:: console + + load /root/switch_config + +Sample switch configuration script +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``/root/switch_config`` script: + +.. code-block:: sh + + # TestPoint History + show port 1,5,9,13,17,21,25 + set port 1,5,9,13,17,21,25 up + show port 1,5,9,13,17,21,25 + del acl 1 + create acl 1 + create acl-port-set + create acl-port-set + add port port-set 1 0 + add port port-set 5,9,13,17,21,25 1 + create acl-rule 1 1 + add acl-rule condition 1 1 port-set 1 + add acl-rule action 1 1 redirect 1 + apply acl + create vlan 1000 + add vlan port 1000 1,5,9,13,17,21,25 + set vlan tagging 1000 1,5,9,13,17,21,25 tag + set switch config flood_ucast fwd + show port stats all 1,5,9,13,17,21,25 diff --git a/doc/guides/howto/lm_virtio_vhost_user.rst b/doc/guides/howto/lm_virtio_vhost_user.rst new file mode 100644 index 00000000..fad1f2a8 --- /dev/null +++ b/doc/guides/howto/lm_virtio_vhost_user.rst @@ -0,0 +1,469 @@ +.. BSD LICENSE + Copyright(c) 2016 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Live Migration of VM with Virtio on host running vhost_user +=========================================================== + +Overview +-------- + +Live Migration of a VM with DPDK Virtio PMD on a host which is +running the Vhost sample application (vhost-switch) and using the DPDK PMD (ixgbe or i40e). + +The Vhost sample application uses VMDQ so SRIOV must be disabled on the NIC's. + +The following sections show an example of how to do this migration. + +Test Setup +---------- + +To test the Live Migration two servers with identical operating systems installed are used. +KVM and QEMU is also required on the servers. + +QEMU 2.5 is required for Live Migration of a VM with vhost_user running on the hosts. + +In this example, the servers have Niantic and or Fortville NIC's installed. +The NIC's on both servers are connected to a switch +which is also connected to the traffic generator. + +The switch is configured to broadcast traffic on all the NIC ports. + +The ip address of host_server_1 is 10.237.212.46 + +The ip address of host_server_2 is 10.237.212.131 + +.. _figure_lm_vhost_user: + +.. figure:: img/lm_vhost_user.* + +Live Migration steps +-------------------- + +The sample scripts mentioned in the steps below can be found in the +:ref:`Sample host scripts <lm_virtio_vhost_user_host_scripts>` and +:ref:`Sample VM scripts <lm_virtio_vhost_user_vm_scripts>` sections. + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Setup DPDK on host_server_1 + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./setup_dpdk_on_host.sh + +On host_server_1: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Bind the Niantic or Fortville NIC to igb_uio on host_server_1. + +For Fortville NIC. + +.. code-block:: console + + cd /root/dpdk/tools + ./dpdk_nic_bind.py -b igb_uio 0000:02:00.0 + +For Niantic NIC. + +.. code-block:: console + + cd /root/dpdk/tools + ./dpdk_nic_bind.py -b igb_uio 0000:09:00.0 + +On host_server_1: Terminal 3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For Fortville and Niantic NIC's reset SRIOV and run the +vhost_user sample application (vhost-switch) on host_server_1. + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./reset_vf_on_212_46.sh + ./run_vhost_switch_on_host.sh + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Start the VM on host_server_1 + +.. code-block:: console + + ./vm_virtio_vhost_user.sh + +On host_server_1: Terminal 4 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Connect to the QEMU monitor on host_server_1. + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./connect_to_qemu_mon_on_host.sh + (qemu) + +On host_server_1: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_1:** + +Setup DPDK in the VM and run testpmd in the VM. + +.. code-block:: console + + cd /root/dpdk/vm_scripts + ./setup_dpdk_in_vm.sh + ./run_testpmd_in_vm.sh + + testpmd> show port info all + testpmd> set fwd mac retry + testpmd> start tx_first + testpmd> show port stats all + +Virtio traffic is seen at P1 and P2. + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set up DPDK on the host_server_2. + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./setup_dpdk_on_host.sh + +On host_server_2: Terminal 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Bind the Niantic or Fortville NIC to igb_uio on host_server_2. + +For Fortville NIC. + +.. code-block:: console + + cd /root/dpdk/tools + ./dpdk_nic_bind.py -b igb_uio 0000:03:00.0 + +For Niantic NIC. + +.. code-block:: console + + cd /root/dpdk/tools + ./dpdk_nic_bind.py -b igb_uio 0000:06:00.0 + +On host_server_2: Terminal 3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For Fortville and Niantic NIC's reset SRIOV, and run +the vhost_user sample application on host_server_2. + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./reset_vf_on_212_131.sh + ./run_vhost_switch_on_host.sh + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Start the VM on host_server_2. + +.. code-block:: console + + ./vm_virtio_vhost_user_migrate.sh + +On host_server_2: Terminal 4 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Connect to the QEMU monitor on host_server_2. + +.. code-block:: console + + cd /root/dpdk/host_scripts + ./connect_to_qemu_mon_on_host.sh + (qemu) info status + VM status: paused (inmigrate) + (qemu) + +On host_server_1: Terminal 4 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Check that switch is up before migrating the VM. + +.. code-block:: console + + (qemu) migrate tcp:10.237.212.131:5555 + (qemu) info status + VM status: paused (postmigrate) + + (qemu) info migrate + capabilities: xbzrle: off rdma-pin-all: off auto-converge: off zero-blocks: off + Migration status: completed + total time: 11619 milliseconds + downtime: 5 milliseconds + setup: 7 milliseconds + transferred ram: 379699 kbytes + throughput: 267.82 mbps + remaining ram: 0 kbytes + total ram: 1590088 kbytes + duplicate: 303985 pages + skipped: 0 pages + normal: 94073 pages + normal bytes: 376292 kbytes + dirty sync count: 2 + (qemu) quit + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_2:** + + Hit Enter key. This brings the user to the testpmd prompt. + +.. code-block:: console + + testpmd> + +On host_server_2: Terminal 4 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In QEMU monitor on host_server_2** + +.. code-block:: console + + (qemu) info status + VM status: running + +On host_server_2: Terminal 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**In VM on host_server_2:** + +.. code-block:: console + + testomd> show port info all + testpmd> show port stats all + +Virtio traffic is seen at P0 and P1. + + +.. _lm_virtio_vhost_user_host_scripts: + +Sample host scripts +------------------- + +reset_vf_on_212_46.sh +~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host 10.237.212.46 to reset SRIOV + + # BDF for Fortville NIC is 0000:02:00.0 + cat /sys/bus/pci/devices/0000\:02\:00.0/max_vfs + echo 0 > /sys/bus/pci/devices/0000\:02\:00.0/max_vfs + cat /sys/bus/pci/devices/0000\:02\:00.0/max_vfs + + # BDF for Niantic NIC is 0000:09:00.0 + cat /sys/bus/pci/devices/0000\:09\:00.0/max_vfs + echo 0 > /sys/bus/pci/devices/0000\:09\:00.0/max_vfs + cat /sys/bus/pci/devices/0000\:09\:00.0/max_vfs + +vm_virtio_vhost_user.sh +~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #/bin/sh + # Script for use with vhost_user sample application + # The host system has 8 cpu's (0-7) + + # Path to KVM tool + KVM_PATH="/usr/bin/qemu-system-x86_64" + + # Guest Disk image + DISK_IMG="/home/user/disk_image/virt1_sml.disk" + + # Number of guest cpus + VCPUS_NR="6" + + # Memory + MEM=1024 + + VIRTIO_OPTIONS="csum=off,gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off" + + # Socket Path + SOCKET_PATH="/root/dpdk/host_scripts/usvhost" + + taskset -c 2-7 $KVM_PATH \ + -enable-kvm \ + -m $MEM \ + -smp $VCPUS_NR \ + -object memory-backend-file,id=mem,size=1024M,mem-path=/mnt/huge,share=on \ + -numa node,memdev=mem,nodeid=0 \ + -cpu host \ + -name VM1 \ + -no-reboot \ + -net none \ + -vnc none \ + -nographic \ + -hda $DISK_IMG \ + -chardev socket,id=chr0,path=$SOCKET_PATH \ + -netdev type=vhost-user,id=net1,chardev=chr0,vhostforce \ + -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \ + -chardev socket,id=chr1,path=$SOCKET_PATH \ + -netdev type=vhost-user,id=net2,chardev=chr1,vhostforce \ + -device virtio-net-pci,netdev=net2,mac=DD:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \ + -monitor telnet::3333,server,nowait + +connect_to_qemu_mon_on_host.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # This script is run on both hosts when the VM is up, + # to connect to the Qemu Monitor. + + telnet 0 3333 + +reset_vf_on_212_131.sh +~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # This script is run on the host 10.237.212.131 to reset SRIOV + + # BDF for Ninatic NIC is 0000:06:00.0 + cat /sys/bus/pci/devices/0000\:06\:00.0/max_vfs + echo 0 > /sys/bus/pci/devices/0000\:06\:00.0/max_vfs + cat /sys/bus/pci/devices/0000\:06\:00.0/max_vfs + + # BDF for Fortville NIC is 0000:03:00.0 + cat /sys/bus/pci/devices/0000\:03\:00.0/max_vfs + echo 0 > /sys/bus/pci/devices/0000\:03\:00.0/max_vfs + cat /sys/bus/pci/devices/0000\:03\:00.0/max_vfs + +vm_virtio_vhost_user_migrate.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #/bin/sh + # Script for use with vhost user sample application + # The host system has 8 cpu's (0-7) + + # Path to KVM tool + KVM_PATH="/usr/bin/qemu-system-x86_64" + + # Guest Disk image + DISK_IMG="/home/user/disk_image/virt1_sml.disk" + + # Number of guest cpus + VCPUS_NR="6" + + # Memory + MEM=1024 + + VIRTIO_OPTIONS="csum=off,gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off" + + # Socket Path + SOCKET_PATH="/root/dpdk/host_scripts/usvhost" + + taskset -c 2-7 $KVM_PATH \ + -enable-kvm \ + -m $MEM \ + -smp $VCPUS_NR \ + -object memory-backend-file,id=mem,size=1024M,mem-path=/mnt/huge,share=on \ + -numa node,memdev=mem,nodeid=0 \ + -cpu host \ + -name VM1 \ + -no-reboot \ + -net none \ + -vnc none \ + -nographic \ + -hda $DISK_IMG \ + -chardev socket,id=chr0,path=$SOCKET_PATH \ + -netdev type=vhost-user,id=net1,chardev=chr0,vhostforce \ + -device virtio-net-pci,netdev=net1,mac=CC:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \ + -chardev socket,id=chr1,path=$SOCKET_PATH \ + -netdev type=vhost-user,id=net2,chardev=chr1,vhostforce \ + -device virtio-net-pci,netdev=net2,mac=DD:BB:BB:BB:BB:BB,$VIRTIO_OPTIONS \ + -incoming tcp:0:5555 \ + -monitor telnet::3333,server,nowait + +.. _lm_virtio_vhost_user_vm_scripts: + +Sample VM scripts +----------------- + +setup_dpdk_virtio_in_vm.sh +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # this script matches the vm_virtio_vhost_user script + # virtio port is 03 + # virtio port is 04 + + cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + + ifconfig -a + /root/dpdk/tools/dpdk_nic_bind.py --status + + rmmod virtio-pci + + modprobe uio + insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko + + /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:03.0 + /root/dpdk/tools/dpdk_nic_bind.py -b igb_uio 0000:00:04.0 + + /root/dpdk/tools/dpdk_nic_bind.py --status + +run_testpmd_in_vm.sh +~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: sh + + #!/bin/sh + # Run testpmd for use with vhost_user sample app. + # test system has 8 cpus (0-7), use cpus 2-7 for VM + + /root/dpdk/x86_64-default-linuxapp-gcc/app/testpmd \ + -c 3f -n 4 --socket-mem 350 -- --burst=64 --i --disable-hw-vlan-filter diff --git a/doc/guides/index.rst b/doc/guides/index.rst index 7aef7a3a..04418599 100644 --- a/doc/guides/index.rst +++ b/doc/guides/index.rst @@ -43,5 +43,6 @@ DPDK documentation sample_app_ug/index testpmd_app_ug/index faq/index + howto/index rel_notes/index contributing/index diff --git a/doc/guides/linux_gsg/build_dpdk.rst b/doc/guides/linux_gsg/build_dpdk.rst index fb2c481d..f8007b31 100644 --- a/doc/guides/linux_gsg/build_dpdk.rst +++ b/doc/guides/linux_gsg/build_dpdk.rst @@ -198,7 +198,7 @@ however please consult your distributions documentation to make sure that is the Also, to use VFIO, both kernel and BIOS must support and be configured to use IO virtualization (such as IntelĀ® VT-d). For proper operation of VFIO when running DPDK applications as a non-privileged user, correct permissions should also be set up. -This can be done by using the DPDK setup script (called setup.sh and located in the tools directory). +This can be done by using the DPDK setup script (called dpdk-setup.sh and located in the tools directory). .. _linux_gsg_binding_kernel: @@ -224,7 +224,7 @@ and to bind and unbind those ports from the different kernel modules, including The following are some examples of how the script can be used. A full description of the script and its parameters can be obtained by calling the script with the ``--help`` or ``--usage`` options. Note that the uio or vfio kernel modules to be used, should be loaded into the kernel before -running the ``dpdk_nic_bind.py`` script. +running the ``dpdk-devbind.py`` script. .. warning:: @@ -238,14 +238,14 @@ running the ``dpdk_nic_bind.py`` script. .. warning:: - While any user can run the dpdk_nic_bind.py script to view the status of the network ports, + While any user can run the dpdk-devbind.py script to view the status of the network ports, binding or unbinding network ports requires root privileges. To see the status of all network ports on the system: .. code-block:: console - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ @@ -267,16 +267,16 @@ To bind device ``eth1``,``04:00.1``, to the ``uio_pci_generic`` driver: .. code-block:: console - ./tools/dpdk_nic_bind.py --bind=uio_pci_generic 04:00.1 + ./tools/dpdk-devbind.py --bind=uio_pci_generic 04:00.1 or, alternatively, .. code-block:: console - ./tools/dpdk_nic_bind.py --bind=uio_pci_generic eth1 + ./tools/dpdk-devbind.py --bind=uio_pci_generic eth1 To restore device ``82:00.0`` to its original kernel binding: .. code-block:: console - ./tools/dpdk_nic_bind.py --bind=ixgbe 82:00.0 + ./tools/dpdk-devbind.py --bind=ixgbe 82:00.0 diff --git a/doc/guides/linux_gsg/nic_perf_intel_platform.rst b/doc/guides/linux_gsg/nic_perf_intel_platform.rst index b4337324..d4a83624 100644 --- a/doc/guides/linux_gsg/nic_perf_intel_platform.rst +++ b/doc/guides/linux_gsg/nic_perf_intel_platform.rst @@ -192,12 +192,12 @@ Configurations before running DPDK # Bind ports 82:00.0 and 85:00.0 to dpdk driver - ./dpdk_folder/tools/dpdk_nic_bind.py -b igb_uio 82:00.0 85:00.0 + ./dpdk_folder/tools/dpdk-devbind.py -b igb_uio 82:00.0 85:00.0 # Check the port driver status - ./dpdk_folder/tools/dpdk_nic_bind.py --status + ./dpdk_folder/tools/dpdk-devbind.py --status - See ``dpdk_nic_bind.py --help`` for more details. + See ``dpdk-devbind.py --help`` for more details. More details about DPDK setup and Linux kernel requirements see :ref:`linux_gsg_compiling_dpdk`. diff --git a/doc/guides/linux_gsg/quick_start.rst b/doc/guides/linux_gsg/quick_start.rst index 1e0f8ff3..8789b588 100644 --- a/doc/guides/linux_gsg/quick_start.rst +++ b/doc/guides/linux_gsg/quick_start.rst @@ -33,7 +33,7 @@ Quick Start Setup Script ======================== -The setup.sh script, found in the tools subdirectory, allows the user to perform the following tasks: +The dpdk-setup.sh script, found in the tools subdirectory, allows the user to perform the following tasks: * Build the DPDK libraries @@ -63,7 +63,7 @@ the user may compile their own application that links in the EAL libraries to cr Script Organization ------------------- -The setup.sh script is logically organized into a series of steps that a user performs in sequence. +The dpdk-setup.sh script is logically organized into a series of steps that a user performs in sequence. Each step provides a number of options that guide the user to completing the desired task. The following is a brief synopsis of each step. @@ -98,17 +98,17 @@ The final step has options for restoring the system to its original state. Use Cases --------- -The following are some example of how to use the setup.sh script. +The following are some example of how to use the dpdk-setup.sh script. The script should be run using the source command. Some options in the script prompt the user for further data before proceeding. .. warning:: - The setup.sh script should be run with root privileges. + The dpdk-setup.sh script should be run with root privileges. .. code-block:: console - source tools/setup.sh + source tools/dpdk-setup.sh ------------------------------------------------------------------------ @@ -269,7 +269,7 @@ The following selection demonstrates the launch of the test application to run o Applications ------------ -Once the user has run the setup.sh script, built one of the EAL targets and set up hugepages (if using one of the Linux EAL targets), +Once the user has run the dpdk-setup.sh script, built one of the EAL targets and set up hugepages (if using one of the Linux EAL targets), the user can then move on to building and running their application or one of the examples provided. The examples in the /examples directory provide a good starting point to gain an understanding of the operation of the DPDK. diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst index df8fb477..6453168e 100644 --- a/doc/guides/nics/bnx2x.rst +++ b/doc/guides/nics/bnx2x.rst @@ -207,7 +207,7 @@ devices managed by ``librte_pmd_bnx2x`` in Linux operating system. #. Bind the QLogic adapters to ``igb_uio`` or ``vfio-pci`` loaded in the previous step:: - ./tools/dpdk_nic_bind.py --bind igb_uio 0000:84:00.0 0000:84:00.1 + ./tools/dpdk-devbind.py --bind igb_uio 0000:84:00.0 0000:84:00.1 or @@ -219,7 +219,7 @@ devices managed by ``librte_pmd_bnx2x`` in Linux operating system. sudo chmod 0666 /dev/vfio/* - ./tools/dpdk_nic_bind.py --bind vfio-pci 0000:84:00.0 0000:84:00.1 + ./tools/dpdk-devbind.py --bind vfio-pci 0000:84:00.0 0000:84:00.1 #. Start ``testpmd`` with basic parameters: diff --git a/doc/guides/nics/cxgbe.rst b/doc/guides/nics/cxgbe.rst index d718f196..d8236b08 100644 --- a/doc/guides/nics/cxgbe.rst +++ b/doc/guides/nics/cxgbe.rst @@ -285,7 +285,7 @@ devices managed by librte_pmd_cxgbe in Linux operating system. .. code-block:: console - ./tools/dpdk_nic_bind.py --bind igb_uio 0000:02:00.4 + ./tools/dpdk-devbind.py --bind igb_uio 0000:02:00.4 or @@ -297,7 +297,7 @@ devices managed by librte_pmd_cxgbe in Linux operating system. sudo chmod 0666 /dev/vfio/* - ./tools/dpdk_nic_bind.py --bind vfio-pci 0000:02:00.4 + ./tools/dpdk-devbind.py --bind vfio-pci 0000:02:00.4 .. note:: diff --git a/doc/guides/nics/ena.rst b/doc/guides/nics/ena.rst index 9f938486..073b35ae 100644 --- a/doc/guides/nics/ena.rst +++ b/doc/guides/nics/ena.rst @@ -225,7 +225,7 @@ devices managed by librte_pmd_ena. .. code-block:: console - ./tools/dpdk_nic_bind.py --bind=igb_uio 0000:02:00.1 + ./tools/dpdk-devbind.py --bind=igb_uio 0000:02:00.1 #. Start testpmd with basic parameters: diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst index e67c3dbf..42e781e3 100644 --- a/doc/guides/nics/enic.rst +++ b/doc/guides/nics/enic.rst @@ -35,12 +35,6 @@ NICs. These adapters are also referred to as vNICs below. If you are running or would like to run DPDK software applications on Cisco UCS servers using Cisco VIC adapters the following documentation is relevant. -Version Information -------------------- - -The version of the ENIC PMD driver is 1.0.0.6 and will be printed by ENIC PMD -during the initialization. - How to obtain ENIC PMD integrated DPDK -------------------------------------- @@ -156,6 +150,8 @@ Supported features - VLAN filtering (supported via UCSM/CIMC only) - Execution of application by unprivileged system users - IPV4, IPV6 and TCP RSS hashing +- Scattered Rx +- MTU update Known bugs and Unsupported features in this release --------------------------------------------------- @@ -165,6 +161,7 @@ Known bugs and Unsupported features in this release - non-IPV4 flow direction - Setting of extended VLAN - UDP RSS hashing +- MTU update only works if Scattered Rx mode is disabled Prerequisites ------------- @@ -177,13 +174,13 @@ Prerequisites - DPDK suite should be configured based on the user's decision to use VFIO or UIO framework - If the vNIC device(s) to be used is bound to the kernel mode Ethernet driver - (enic), use 'ifconfig' to bring the interface down. The dpdk_nic_bind.py tool + (enic), use 'ifconfig' to bring the interface down. The dpdk-devbind.py tool can then be used to unbind the device's bus id from the enic kernel mode driver. - Bind the intended vNIC to vfio-pci in case the user wants ENIC PMD to use - VFIO framework using dpdk_nic_bind.py. + VFIO framework using dpdk-devbind.py. - Bind the intended vNIC to igb_uio in case the user wants ENIC PMD to use - UIO framework using dpdk_nic_bind.py. + UIO framework using dpdk-devbind.py. At this point the system should be ready to run DPDK applications. Once the application runs to completion, the vNIC can be detached from vfio-pci or diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst index da695afd..4d12b10c 100644 --- a/doc/guides/nics/i40e.rst +++ b/doc/guides/nics/i40e.rst @@ -164,13 +164,13 @@ devices managed by ``librte_pmd_i40e`` in the Linux operating system. .. code-block:: console - ./tools/dpdk_nic_bind.py --bind igb_uio 0000:83:00.0 + ./tools/dpdk-devbind.py --bind igb_uio 0000:83:00.0 Or setup VFIO permissions for regular users and then bind to ``vfio-pci``: .. code-block:: console - ./tools/dpdk_nic_bind.py --bind vfio-pci 0000:83:00.0 + ./tools/dpdk-devbind.py --bind vfio-pci 0000:83:00.0 #. Start ``testpmd`` with basic parameters: diff --git a/doc/guides/nics/intel_vf.rst b/doc/guides/nics/intel_vf.rst index a68198f8..95a79b59 100644 --- a/doc/guides/nics/intel_vf.rst +++ b/doc/guides/nics/intel_vf.rst @@ -151,7 +151,7 @@ For example, modprobe uio insmod igb_uio - ./dpdk_nic_bind.py -b igb_uio bb:ss.f + ./dpdk-devbind.py -b igb_uio bb:ss.f echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific PCI device) Launch the DPDK testpmd/example or your own host daemon application using the DPDK PMD library. @@ -236,7 +236,7 @@ For example, modprobe uio insmod igb_uio - ./dpdk_nic_bind.py -b igb_uio bb:ss.f + ./dpdk-devbind.py -b igb_uio bb:ss.f echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific PCI device) Launch the DPDK testpmd/example or your own host daemon application using the DPDK PMD library. @@ -285,7 +285,7 @@ For example, .. code-block:: console insmod igb_uio - ./dpdk_nic_bind.py -b igb_uio bb:ss.f + ./dpdk-devbind.py -b igb_uio bb:ss.f echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific pci device) Launch DPDK testpmd/example or your own host daemon application using the DPDK PMD library. @@ -406,7 +406,7 @@ The setup procedure is as follows: modprobe uio insmod igb_uio - ./dpdk_nic_bind.py -b igb_uio 02:00.0 02:00.1 0e:00.0 0e:00.1 + ./dpdk-devbind.py -b igb_uio 02:00.0 02:00.1 0e:00.0 0e:00.1 echo 2 > /sys/bus/pci/devices/0000\:02\:00.0/max_vfs echo 2 > /sys/bus/pci/devices/0000\:02\:00.1/max_vfs echo 2 > /sys/bus/pci/devices/0000\:0e\:00.0/max_vfs diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst index e4ebc712..4ef6e026 100644 --- a/doc/guides/nics/nfp.rst +++ b/doc/guides/nics/nfp.rst @@ -242,9 +242,9 @@ Using the NFP PMD is not different to using other PMDs. Usual steps are: useful for installing the UIO modules and for binding the right device to those modules avoiding doing so manually: - * **setup.sh** - * **dpdk_nic_bind.py** + * **dpdk-setup.sh** + * **dpdk-devbind.py** - Configuration may be performed by running setup.sh which invokes - dpdk_nic_bind.py as needed. Executing setup.sh will display a menu of + Configuration may be performed by running dpdk-setup.sh which invokes + dpdk-devbind.py as needed. Executing dpdk-setup.sh will display a menu of configuration options. diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst index 572ced41..6abbae69 100644 --- a/doc/guides/nics/overview.rst +++ b/doc/guides/nics/overview.rst @@ -92,7 +92,7 @@ Most of these differences are summarized below. Queue status event Y Rx interrupt Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Queue start/stop Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - MTU update Y Y Y Y Y Y Y Y Y Y Y Y Y Y + MTU update Y Y Y P Y Y Y Y Y Y Y Y Y Y Jumbo frame Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Scattered Rx Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y LRO Y Y Y Y diff --git a/doc/guides/nics/qede.rst b/doc/guides/nics/qede.rst index f7ca8eb9..53d749c9 100644 --- a/doc/guides/nics/qede.rst +++ b/doc/guides/nics/qede.rst @@ -177,7 +177,7 @@ devices managed by ``librte_pmd_qede`` in Linux operating system. .. code-block:: console - ./tools/dpdk_nic_bind.py --bind igb_uio 0000:84:00.0 0000:84:00.1 \ + ./tools/dpdk-devbind.py --bind igb_uio 0000:84:00.0 0000:84:00.1 \ 0000:84:00.2 0000:84:00.3 #. Start ``testpmd`` with basic parameters: diff --git a/doc/guides/nics/thunderx.rst b/doc/guides/nics/thunderx.rst index e38f260b..248b1af7 100644 --- a/doc/guides/nics/thunderx.rst +++ b/doc/guides/nics/thunderx.rst @@ -146,7 +146,7 @@ managed by ``librte_pmd_thunderx_nicvf`` in the Linux operating system. .. code-block:: console - ./tools/dpdk_nic_bind.py --bind vfio-pci 0002:01:00.2 + ./tools/dpdk-devbind.py --bind vfio-pci 0002:01:00.2 #. Start ``testpmd`` with basic parameters: @@ -246,11 +246,11 @@ This section provides instructions to configure SR-IOV with Linux OS. Unless ``thunder-nicvf`` driver is in use make sure your kernel config includes ``CONFIG_THUNDER_NIC_VF`` setting. -#. Verify PF/VF bind using ``dpdk_nic_bind.py``: +#. Verify PF/VF bind using ``dpdk-devbind.py``: .. code-block:: console - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Example output: @@ -268,18 +268,18 @@ This section provides instructions to configure SR-IOV with Linux OS. modprobe vfio-pci -#. Bind VF devices to ``vfio-pci`` using ``dpdk_nic_bind.py``: +#. Bind VF devices to ``vfio-pci`` using ``dpdk-devbind.py``: .. code-block:: console - ./tools/dpdk_nic_bind.py --bind vfio-pci 0002:01:00.1 - ./tools/dpdk_nic_bind.py --bind vfio-pci 0002:01:00.2 + ./tools/dpdk-devbind.py --bind vfio-pci 0002:01:00.1 + ./tools/dpdk-devbind.py --bind vfio-pci 0002:01:00.2 -#. Verify VF bind using ``dpdk_nic_bind.py``: +#. Verify VF bind using ``dpdk-devbind.py``: .. code-block:: console - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Example output: diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst index c6335d40..54310157 100644 --- a/doc/guides/nics/virtio.rst +++ b/doc/guides/nics/virtio.rst @@ -172,7 +172,7 @@ Host2VM communication example modprobe uio echo 512 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages modprobe uio_pci_generic - python tools/dpdk_nic_bind.py -b uio_pci_generic 00:03.0 + python tools/dpdk-devbind.py -b uio_pci_generic 00:03.0 We use testpmd as the forwarding application in this example. diff --git a/doc/guides/prog_guide/dev_kit_build_system.rst b/doc/guides/prog_guide/dev_kit_build_system.rst index 18a30104..fa2411f7 100644 --- a/doc/guides/prog_guide/dev_kit_build_system.rst +++ b/doc/guides/prog_guide/dev_kit_build_system.rst @@ -309,11 +309,11 @@ Misc Internally Generated Build Tools ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``app/pmdinfogen`` +``app/dpdk-pmdinfogen`` -``pmdinfogen`` scans an object (.o) file for various well known symbol names. These -well known symbol names are defined by various macros and used to export +``dpdk-pmdinfogen`` scans an object (.o) file for various well known symbol names. +These well known symbol names are defined by various macros and used to export important information about hardware support and usage for pmd files. For instance the macro: @@ -328,10 +328,10 @@ Creates the following symbol: static char this_pmd_name0[] __attribute__((used)) = "<name>"; -Which pmdinfogen scans for. Using this information other relevant bits of data -can be exported from the object file and used to produce a hardware support -description, that pmdinfogen then encodes into a json formatted string in the -following format: +Which ``dpdk-pmdinfogen`` scans for. Using this information other relevant +bits of data can be exported from the object file and used to produce a +hardware support description, that ``dpdk-pmdinfogen`` then encodes into a +json formatted string in the following format: .. code-block:: c diff --git a/doc/guides/prog_guide/mempool_lib.rst b/doc/guides/prog_guide/mempool_lib.rst index 59466752..ffdc1096 100644 --- a/doc/guides/prog_guide/mempool_lib.rst +++ b/doc/guides/prog_guide/mempool_lib.rst @@ -141,7 +141,7 @@ management systems and software based memory allocators, to be used with DPDK. There are two aspects to a mempool handler. * Adding the code for your new mempool operations (ops). This is achieved by - adding a new mempool ops code, and using the ``REGISTER_MEMPOOL_OPS`` macro. + adding a new mempool ops code, and using the ``MEMPOOL_REGISTER_OPS`` macro. * Using the new API to call ``rte_mempool_create_empty()`` and ``rte_mempool_set_ops_byname()`` to create a new mempool and specifying which diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vhost_lib.rst index 14d5e675..6b0c6b26 100644 --- a/doc/guides/prog_guide/vhost_lib.rst +++ b/doc/guides/prog_guide/vhost_lib.rst @@ -189,7 +189,12 @@ vhost-user implementation has two options: When the DPDK vhost-user application restarts, DPDK vhost-user will try to connect to the server again. This is how the "reconnect" feature works. - Note: the "reconnect" feature requires **QEMU v2.7** (or above). + .. Note:: + * The "reconnect" feature requires **QEMU v2.7** (or above). + + * The vhost supported features must be exactly the same before and + after the restart. For example, if TSO is disabled and then enabled, + nothing will work and issues undefined might happen. No matter which mode is used, once a connection is established, DPDK vhost-user will start receiving and processing vhost messages from QEMU. diff --git a/doc/guides/rel_notes/release_16_07.rst b/doc/guides/rel_notes/release_16_07.rst index d3a144fb..d00a6ed5 100644 --- a/doc/guides/rel_notes/release_16_07.rst +++ b/doc/guides/rel_notes/release_16_07.rst @@ -40,16 +40,16 @@ New Features * **Added mempool external cache for non-EAL thread.** - Added new functions to create, free or flush a user-owned mempool - cache for non-EAL threads. Previously, cache was always disabled - on these threads. + Added new functions to create, free or flush a user-owned mempool + cache for non-EAL threads. Previously the cache was always disabled + on these threads. * **Changed the memory allocation in mempool library.** * Added ability to allocate a large mempool in virtually fragmented memory. * Added new APIs to populate a mempool with memory. * Added an API to free a mempool. - * Modified the API of rte_mempool_obj_iter() function. + * Modified the API of the ``rte_mempool_obj_iter()`` function. * Dropped specific Xen Dom0 code. * Dropped specific anonymous mempool code in testpmd. @@ -63,10 +63,10 @@ New Features * **Added mailbox interrupt support for ixgbe and igb VFs.** - When the physical NIC link comes down or up, the PF driver will send a + When the physical NIC link comes up or down, the PF driver will send a mailbox message to notify each VF. To handle this link up/down event, - add mailbox interrupts support to receive the message and allow the app to - register a callback for it. + support have been added for a mailbox interrupt to receive the message and + allow the application to register a callback for it. * **Updated the ixgbe base driver.** @@ -74,51 +74,59 @@ New Features following: * Added sgmii link for X550. - * Added mac link setup for X550a SFP and SFP+. + * Added MAC link setup for X550a SFP and SFP+. * Added KR support for X550em_a. - * Added new phy definitions for M88E1500. + * Added new PHY definitions for M88E1500. * Added support for the VLVF to be bypassed when adding/removing a VFTA entry. * Added X550a flow control auto negotiation support. * **Updated the i40e base driver.** - Updated the i40e base driver, which includes support for new devices IDs. + Updated the i40e base driver including support for new devices IDs. -* **Supported virtio on IBM POWER8.** +* **Updated the enic driver.** + + The enic driver was updated with changes including the following: + + * Optimized the Tx function. + * Added Scattered Rx capability. + * Improved packet type identification. + * Added MTU update in non Scattered Rx mode and enabled MTU of up to 9208 + with UCS Software release 2.2 on 1300 series VICs. + +* **Added support for virtio on IBM POWER8.** The ioports are mapped in memory when using Linux UIO. -* **Virtio support for containers.** +* **Added support for Virtio in containers.** - Add a new virtual device, named virtio-user, to support virtio for containers. + Add a new virtual device, named virtio_user, to support virtio for containers. Known limitations: * Control queue and multi-queue are not supported yet. - * Cannot work with --huge-unlink. - * Cannot work with --no-huge. - * Cannot work when there are more than VHOST_MEMORY_MAX_NREGIONS(8) hugepages. - * Root privilege is a must for sorting hugepages by physical address. - * Can only be used with vhost user backend. + * Doesn't work with ``--huge-unlink``. + * Doesn't work with ``--no-huge``. + * Doesn't work when there are more than ``VHOST_MEMORY_MAX_NREGIONS(8)`` hugepages. + * Root privilege is required for sorting hugepages by physical address. + * Can only be used with the vhost user backend. * **Added vhost-user client mode.** - DPDK vhost-user could be the server as well as the client. It supports - server mode only before, now it also supports client mode. Client mode - is enabled when ``RTE_VHOST_USER_CLIENT`` flag is set while calling + DPDK vhost-user now supports client mode as well as server mode. Client mode + is enabled when the ``RTE_VHOST_USER_CLIENT`` flag is set while calling ``rte_vhost_driver_register``. - When DPDK vhost-user restarts from normal or abnormal quit (say crash), - the client mode would allow DPDK to establish the connect again. Note - that a brand new QEMU version (v2.7 or above) is needed, otherwise, the - reconnect won't work. + When DPDK vhost-user restarts from an normal or abnormal exit (such as a + crash), the client mode allows DPDK to establish the connection again. Note + that QEMU version v2.7 or above is required for this feature. - DPDK vhost-user will also try to reconnect by default when + DPDK vhost-user will also try to reconnect by default when: - * the first connect fails (when QEMU is not started yet) - * the connection is broken (when QEMU restarts) + * The first connect fails (when QEMU is not started yet). + * The connection is broken (when QEMU restarts). - It can be turned off if flag ``RTE_VHOST_USER_NO_RECONNECT`` is set. + It can be turned off by setting the ``RTE_VHOST_USER_NO_RECONNECT`` flag. * **Added NSH packet recognition in i40e.** @@ -127,7 +135,7 @@ New Features Now AESNI MB PMD supports 128/192/256-bit counter mode AES encryption and decryption. -* **Added support of AES counter mode for Intel QuickAssist devices.** +* **Added support for AES counter mode with Intel QuickAssist devices.** Enabled support for the AES CTR algorithm for Intel QuickAssist devices. Provided support for algorithm-chaining operations. @@ -141,33 +149,33 @@ New Features The following features/modifications have been added to rte_hash library: - * Enabled application developers to use an extra flag for rte_hash creation - to specify default behavior (multi-thread safe/unsafe) with rte_hash_add_key - function. - * Changed Cuckoo search algorithm to breadth first search for multi-writer - routine and split Cuckoo Search and Move operations in order to reduce - transactional code region and improve TSX performance. - * Added a hash multi-writer test case for test app. + * Enabled application developers to use an extra flag for ``rte_hash`` + creation to specify default behavior (multi-thread safe/unsafe) with the + ``rte_hash_add_key`` function. + * Changed the Cuckoo Hash Search algorithm to breadth first search for + multi-writer routines and split Cuckoo Hash Search and Move operations in + order to reduce transactional code region and improve TSX performance. + * Added a hash multi-writer test case to the test app. * **Improved IP Pipeline Application.** - The following features have been added to ip_pipeline application: + The following features have been added to the ip_pipeline application: - * Configure the MAC address in the routing pipeline and automatic routes + * Configure the MAC address in the routing pipeline and automatic route updates with change in link state. * Enable RSS per network interface through the configuration file. * Streamline the CLI code. * **Added keepalive enhancements.** - Adds support for reporting of core states other than dead to + Added support for reporting of core states other than dead to monitoring applications, enabling the support of broader liveness reporting to external processes. * **Added packet capture framework.** - * A new library ``librte_pdump`` is added to provide packet capture API. - * A new ``app/pdump`` tool is added to capture packets in DPDK. + * A new library ``librte_pdump`` is added to provide a packet capture API. + * A new ``app/pdump`` tool is added to demonstrate capture packets in DPDK. * **Added floating VEB support for i40e PF driver.** @@ -179,6 +187,10 @@ New Features For information on this feature, please see the "I40E Poll Mode Driver" section of the "Network Interface Controller Drivers" document. +* **Added support for live migration of a VM with SRIOV VF.** + + Live migration of a VM with Virtio and VF PMD's using the bonding PMD. + Resolved Issues --------------- @@ -197,18 +209,20 @@ EAL * **igb_uio: Fixed possible mmap failure for Linux >= 4.5.** - mmaping the iomem range of the PCI device fails for kernels that - enabled CONFIG_IO_STRICT_DEVMEM option: + The mmaping of the iomem range of the PCI device fails for kernels that + enabled the ``CONFIG_IO_STRICT_DEVMEM`` option. The error seen by the + user is as similar to the following:: + + EAL: pci_map_resource(): - EAL: pci_map_resource(): - cannot mmap(39, 0x7f1c51800000, 0x100000, 0x0): - Invalid argument (0xffffffffffffffff) + cannot mmap(39, 0x7f1c51800000, 0x100000, 0x0): + Invalid argument (0xffffffffffffffff) - CONFIG_IO_STRICT_DEVMEM is introduced in Linux v4.5 + The ``CONFIG_IO_STRICT_DEVMEM`` kernel option was introduced in Linux v4.5. - Updated igb_uio to stop reserving PCI memory resources, from - kernel point of view iomem region looks like idle and mmap worked - again. This matches uio_pci_generic usage. + The issues was resolve by updating ``igb_uio`` to stop reserving PCI memory + resources. From the kernel point of view the iomem region looks like idle + and mmap works again. This matches the ``uio_pci_generic`` usage. Drivers @@ -228,15 +242,29 @@ Drivers outer VLAN header. This issue is fixed by changing corresponding register for single VLAN. +* **enic: Fixed several issues when stopping then restarting ports and queues.** + + Fixed several crashes related to stopping then restarting ports and queues. + Fixed possible crash when re-configuring the number of Rx queue descriptors. + +* **enic: Fixed Rx data mis-alignment if mbuf data offset modified.** + + Fixed possible Rx corruption when mbufs were returned to a pool with data + offset other than RTE_PKTMBUF_HEADROOM. + +* **enic: Fixed Tx IP/UDP/TCP checksum offload and VLAN insertion.** + +* **enic: Fixed Rx error and missed counters.** + Libraries ~~~~~~~~~ * **mbuf: Fixed refcnt update when detaching.** - Fix the ``rte_pktmbuf_detach()`` function to decrement the direct - mbuf's reference counter. The previous behavior was not to affect - the reference counter. It lead a memory leak of the direct mbuf. + Fix the ``rte_pktmbuf_detach()`` function to decrement the direct mbuf's + reference counter. The previous behavior was not to affect the reference + counter. This lead to a memory leak of the direct mbuf. Examples @@ -266,9 +294,17 @@ API Changes * Add a short 1-2 sentence description of the API change. Use fixed width quotes for ``rte_function_names`` or ``rte_struct_names``. Use the past tense. -* The following counters are removed from ``rte_eth_stats`` structure: - ibadcrc, ibadlen, imcasts, fdirmatch, fdirmiss, - tx_pause_xon, rx_pause_xon, tx_pause_xoff, rx_pause_xoff. +* The following counters are removed from the ``rte_eth_stats`` structure: + + * ``ibadcrc`` + * ``ibadlen`` + * ``imcasts`` + * ``fdirmatch`` + * ``fdirmiss`` + * ``tx_pause_xon`` + * ``rx_pause_xon`` + * ``tx_pause_xoff`` + * ``rx_pause_xoff`` * The extended statistics are fetched by ids with ``rte_eth_xstats_get`` after a lookup by name ``rte_eth_xstats_get_names``. @@ -280,8 +316,8 @@ API Changes ``rte_vhost_avail_entries``. * All existing vhost APIs and callbacks with ``virtio_net`` struct pointer - as the parameter have been changed due to the ABI refactoring mentioned - below: it's replaced by ``int vid``. + as the parameter have been changed due to the ABI refactoring described + below. It is replaced by ``int vid``. * The function ``rte_vhost_enqueue_burst`` no longer supports concurrent enqueuing packets to the same queue. @@ -289,6 +325,9 @@ API Changes * The function ``rte_eth_dev_set_mtu`` adds a new return value ``-EBUSY``, which indicates the operation is forbidden because the port is running. +* The script ``dpdk_nic_bind.py`` is renamed to ``dpdk-devbind.py``. + And the script ``setup.sh`` is renamed to ``dpdk-setup.sh``. + ABI Changes ----------- @@ -297,15 +336,15 @@ ABI Changes the previous releases and made in this release. Use fixed width quotes for ``rte_function_names`` or ``rte_struct_names``. Use the past tense. -* The ``rte_port_source_params`` structure has new fields to support PCAP file. +* The ``rte_port_source_params`` structure has new fields to support PCAP files. It was already in release 16.04 with ``RTE_NEXT_ABI`` flag. * The ``rte_eth_dev_info`` structure has new fields ``nb_rx_queues`` and ``nb_tx_queues`` - to support number of queues configured by software. + to support the number of queues configured by software. -* vhost ABI refactoring has been made: ``virtio_net`` structure is never - exported to application any more. Instead, a handle, ``vid``, has been - used to represent this structure internally. +* A Vhost ABI refactoring has been made: the ``virtio_net`` structure is no + longer exported directly to the application. Instead, a handle, ``vid``, has + been used to represent this structure internally. Shared Library Versions @@ -321,6 +360,7 @@ The libraries prepended with a plus sign were incremented in this version. librte_acl.so.2 librte_cfgfile.so.2 librte_cmdline.so.2 + librte_cryptodev.so.1 librte_distributor.so.1 librte_eal.so.2 librte_hash.so.2 diff --git a/doc/guides/sample_app_ug/ip_pipeline.rst b/doc/guides/sample_app_ug/ip_pipeline.rst index 09cbc174..693d813c 100644 --- a/doc/guides/sample_app_ug/ip_pipeline.rst +++ b/doc/guides/sample_app_ug/ip_pipeline.rst @@ -337,7 +337,7 @@ Generic example of configuration file section: <variable_name_1> = <value_1> - ... + ; ... <variable_name_N> = <value_N> diff --git a/doc/guides/sample_app_ug/l2_forward_real_virtual.rst b/doc/guides/sample_app_ug/l2_forward_real_virtual.rst index b51b2dc9..a1c10c04 100644 --- a/doc/guides/sample_app_ug/l2_forward_real_virtual.rst +++ b/doc/guides/sample_app_ug/l2_forward_real_virtual.rst @@ -472,7 +472,7 @@ If the table is full, the whole packets table is transmitted using the l2fwd_sen l2fwd_send_packet(struct rte_mbuf *m, uint8_t port) { unsigned lcore_id, len; - struct lcore_queue_conf \*qconf; + struct lcore_queue_conf *qconf; lcore_id = rte_lcore_id(); qconf = &lcore_queue_conf[lcore_id]; diff --git a/doc/guides/sample_app_ug/l3_forward.rst b/doc/guides/sample_app_ug/l3_forward.rst index c885cdb7..e2e62236 100644 --- a/doc/guides/sample_app_ug/l3_forward.rst +++ b/doc/guides/sample_app_ug/l3_forward.rst @@ -298,7 +298,7 @@ The get_ipv4_dst_port() function is shown below: int ret = 0; union ipv4_5tuple_host key; - ipv4_hdr = (uint8_t \*)ipv4_hdr + offsetof(struct ipv4_hdr, time_to_live); + ipv4_hdr = (uint8_t *)ipv4_hdr + offsetof(struct ipv4_hdr, time_to_live); m128i data = _mm_loadu_si128(( m128i*)(ipv4_hdr)); diff --git a/doc/guides/sample_app_ug/pdump.rst b/doc/guides/sample_app_ug/pdump.rst index ceb038ec..ac0e7c96 100644 --- a/doc/guides/sample_app_ug/pdump.rst +++ b/doc/guides/sample_app_ug/pdump.rst @@ -30,15 +30,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -dpdk_pdump Application +dpdk-pdump Application ====================== -The ``dpdk_pdump`` tool is a Data Plane Development Kit (DPDK) tool that runs as +The ``dpdk-pdump`` tool is a Data Plane Development Kit (DPDK) tool that runs as a DPDK secondary process and is capable of enabling packet capture on dpdk ports. .. Note:: - * The ``dpdk_pdump`` tool depends on libpcap based PMD which is disabled + * The ``dpdk-pdump`` tool depends on libpcap based PMD which is disabled by default in the build configuration files, owing to an external dependency on the libpcap development files which must be installed on the board. @@ -53,7 +53,7 @@ The tool has a number of command line options: .. code-block:: console - ./build/app/dpdk_pdump -- + ./build/app/dpdk-pdump -- --pdump '(port=<port id> | device_id=<pci id or vdev name>), (queue=<queue_id>), (rx-dev=<iface or pcap file> | @@ -95,10 +95,10 @@ PCI address (or) name of the eth device on which packets should be captured. .. Note:: - * As of now the ``dpdk_pdump`` tool cannot capture the packets of virtual devices + * As of now the ``dpdk-pdump`` tool cannot capture the packets of virtual devices in the primary process due to a bug in the ethdev library. Due to this bug, in a multi process context, when the primary and secondary have different ports set, then the secondary process - (here the ``dpdk_pdump`` tool) overwrites the ``rte_eth_devices[]`` entries of the primary process. + (here the ``dpdk-pdump`` tool) overwrites the ``rte_eth_devices[]`` entries of the primary process. ``queue``: Queue id of the eth device on which packets should be captured. The user can pass a queue value of ``*`` to enable @@ -141,4 +141,4 @@ Example .. code-block:: console - $ sudo ./build/app/dpdk_pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/rx.pcap' + $ sudo ./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/rx.pcap' diff --git a/doc/guides/sample_app_ug/proc_info.rst b/doc/guides/sample_app_ug/proc_info.rst index 542950b3..73f21958 100644 --- a/doc/guides/sample_app_ug/proc_info.rst +++ b/doc/guides/sample_app_ug/proc_info.rst @@ -30,10 +30,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -dpdk_proc_info Application -========================== +dpdk-procinfo Application +========================= -The dpdk_proc_info application is a Data Plane Development Kit (DPDK) application +The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port statistics, resetting port statistics and printing DPDK memory information. This application extends the original functionality that was supported by @@ -45,7 +45,7 @@ The application has a number of command line options: .. code-block:: console - ./$(RTE_TARGET)/app/dpdk_proc_info -- -m | [-p PORTMASK] [--stats | --xstats | + ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | --stats-reset | --xstats-reset] Parameters diff --git a/doc/guides/sample_app_ug/tep_termination.rst b/doc/guides/sample_app_ug/tep_termination.rst index 2d86a03a..c3d1e97c 100644 --- a/doc/guides/sample_app_ug/tep_termination.rst +++ b/doc/guides/sample_app_ug/tep_termination.rst @@ -59,8 +59,8 @@ This allows network isolation, QOS, etc to be provided on a per client basis. In a typical setup, the network overlay tunnel is terminated at the Virtual/Tunnel End Point (VEP/TEP). The TEP is normally located at the physical host level ideally in the software switch. Due to processing constraints and the inevitable bottleneck that the switch -becomes the ability to offload overlay support features becomes an important requirement. -IntelĀ® XL710 10/40 G Ethernet network card provides hardware filtering +becomes, the ability to offload overlay support features becomes an important requirement. +IntelĀ® XL710 10/40 Gigabit Ethernet network card provides hardware filtering and offload capabilities to support overlay networks implementations such as MAC in UDP and MAC in GRE. Sample Code Overview @@ -131,14 +131,14 @@ Compiling the Sample Code .. code-block:: console - CONFIG_RTE_LIBRTE_VHOST=n + CONFIG_RTE_LIBRTE_VHOST=y vhost user is turned on by default in the configure file config/common_linuxapp. To enable vhost cuse, disable vhost user. .. code-block:: console - CONFIG_RTE_LIBRTE_VHOST_USER=y + CONFIG_RTE_LIBRTE_VHOST_USER=n After vhost is enabled and the implementation is selected, build the vhost library. diff --git a/doc/guides/sample_app_ug/vhost.rst b/doc/guides/sample_app_ug/vhost.rst index a93e54d8..2b7defc8 100644 --- a/doc/guides/sample_app_ug/vhost.rst +++ b/doc/guides/sample_app_ug/vhost.rst @@ -834,19 +834,19 @@ The above message indicates that device 0 has been registered with MAC address c Any packets received on the NIC with these values is placed on the devices receive queue. When a virtio-net device transmits packets, the VLAN tag is added to the packet by the DPDK vhost sample code. -Running virtio-user with vhost-switch +Running virtio_user with vhost-switch ------------------------------------- -We can also use virtio-user with vhost-switch now. -Virtio-user is a virtual device that can be run in a application (container) parallelly with vhost in the same OS, +We can also use virtio_user with vhost-switch now. +Virtio_user is a virtual device that can be run in a application (container) parallelly with vhost in the same OS, aka, there is no need to start a VM. We just run it with a different --file-prefix to avoid startup failure. .. code-block:: console cd ${RTE_SDK}/x86_64-native-linuxapp-gcc/app - ./testpmd -c 0x3 -n 4 --socket-mem 1024 --no-pci --file-prefix=virtio-user-testpmd \ - --vdev=virtio-user0,mac=00:01:02:03:04:05,path=$path_vhost \ + ./testpmd -c 0x3 -n 4 --socket-mem 1024 --no-pci --file-prefix=virtio_user-testpmd \ + --vdev=virtio_user0,mac=00:01:02:03:04:05,path=$path_vhost \ -- -i --txqflags=0xf01 --disable-hw-vlan There is no difference on the vhost side. -Pleae note that there are some limitations (see release note for more information) in the usage of virtio-user. +Pleae note that there are some limitations (see release note for more information) in the usage of virtio_user. diff --git a/doc/guides/sample_app_ug/vm_power_management.rst b/doc/guides/sample_app_ug/vm_power_management.rst index 7f299e03..aa02c156 100644 --- a/doc/guides/sample_app_ug/vm_power_management.rst +++ b/doc/guides/sample_app_ug/vm_power_management.rst @@ -167,7 +167,7 @@ Virtio-Serial channels are configured via libvirt XML: </controller> <channel type='unix'> <source mode='bind' path='/tmp/powermonitor/{vm_name}.{channel_num}'/> - <target type='virtio' name='virtio.serial.port.poweragent.{vm_channel_num}/> + <target type='virtio' name='virtio.serial.port.poweragent.{vm_channel_num}'/> <address type='virtio-serial' controller='0' bus='0' port='{N}'/> </channel> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 30e410dd..f87e0c29 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -999,7 +999,7 @@ For example, to move a pci device using ixgbe under DPDK management: .. code-block:: console # Check the status of the available devices. - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ @@ -1011,11 +1011,11 @@ For example, to move a pci device using ixgbe under DPDK management: # Bind the device to igb_uio. - sudo ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0 + sudo ./tools/dpdk-devbind.py -b igb_uio 0000:0a:00.0 # Recheck the status of the devices. - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ 0000:0a:00.0 '82599ES 10-Gigabit' drv=igb_uio unused= @@ -1118,9 +1118,9 @@ For example, to move a pci device under kernel management: .. code-block:: console - sudo ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0 + sudo ./tools/dpdk-devbind.py -b ixgbe 0000:0a:00.0 - ./tools/dpdk_nic_bind.py --status + ./tools/dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ diff --git a/doc/guides/xen/pkt_switch.rst b/doc/guides/xen/pkt_switch.rst index 3a6fc470..00a8f0c1 100644 --- a/doc/guides/xen/pkt_switch.rst +++ b/doc/guides/xen/pkt_switch.rst @@ -323,7 +323,7 @@ Building and Running the Switching Backend .. code-block:: console modprobe uio_pci_generic - python tools/dpdk_nic_bind.py -b uio_pci_generic 0000:09:00:00.0 + python tools/dpdk-devbind.py -b uio_pci_generic 0000:09:00:00.0 In this case, 0000:09:00.0 is the PCI address for the NIC controller. |