diff options
author | Ricardo Salveti <ricardo.salveti@linaro.org> | 2016-07-25 13:22:22 -0300 |
---|---|---|
committer | Ricardo Salveti <ricardo.salveti@linaro.org> | 2016-07-25 13:23:50 -0300 |
commit | 7b53c036e6bf56623b8273018ff1c8cc62847857 (patch) | |
tree | 4af0da8c150bbebd7d1d252d6ac801a7efef0d23 /doc/guides/howto | |
parent | 5d4e5dcd8a186778b3d78e27c81550d07a288fd2 (diff) |
Imported Upstream version 16.07-rc4
Change-Id: Ic57f6a3726f2dbd1682223648d91310f45705327
Signed-off-by: Ricardo Salveti <ricardo.salveti@linaro.org>
Diffstat (limited to 'doc/guides/howto')
-rw-r--r-- | doc/guides/howto/flow_bifurcation.rst | 299 | ||||
-rw-r--r-- | doc/guides/howto/img/flow_bifurcation_overview.svg | 544 | ||||
-rw-r--r-- | doc/guides/howto/img/ixgbe_bifu_queue_idx.svg | 101 | ||||
-rw-r--r-- | doc/guides/howto/img/lm_bond_virtio_sriov.svg | 666 | ||||
-rw-r--r-- | doc/guides/howto/img/lm_vhost_user.svg | 644 | ||||
-rw-r--r-- | doc/guides/howto/index.rst | 40 | ||||
-rw-r--r-- | doc/guides/howto/lm_bond_virtio_sriov.rst | 713 | ||||
-rw-r--r-- | doc/guides/howto/lm_virtio_vhost_user.rst | 469 |
8 files changed, 3476 insertions, 0 deletions
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 |