diff options
Diffstat (limited to 'src/seastar/dpdk/doc/guides/howto')
17 files changed, 6857 insertions, 0 deletions
diff --git a/src/seastar/dpdk/doc/guides/howto/flow_bifurcation.rst b/src/seastar/dpdk/doc/guides/howto/flow_bifurcation.rst new file mode 100644 index 00000000..61016a4f --- /dev/null +++ b/src/seastar/dpdk/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-devbind.py -b vfio-pci 01:10.0 + dpdk-devbind.py -b vfio-pci 01:10.1 + +#. Run a DPDK application on the VFs: + + .. code-block:: console + + testpmd -l 0-7 -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-devbind.py -b vfio-pci 01:10.0 + dpdk-devbind.py -b vfio-pci 01:10.1 + +#. run DPDK application on VFs: + + .. code-block:: console + + testpmd -l 0-7 -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/src/seastar/dpdk/doc/guides/howto/img/flow_bifurcation_overview.svg b/src/seastar/dpdk/doc/guides/howto/img/flow_bifurcation_overview.svg new file mode 100644 index 00000000..4fa27648 --- /dev/null +++ b/src/seastar/dpdk/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/src/seastar/dpdk/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg b/src/seastar/dpdk/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg new file mode 100644 index 00000000..f7e2bd80 --- /dev/null +++ b/src/seastar/dpdk/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/src/seastar/dpdk/doc/guides/howto/img/lm_bond_virtio_sriov.svg b/src/seastar/dpdk/doc/guides/howto/img/lm_bond_virtio_sriov.svg new file mode 100644 index 00000000..d913ae01 --- /dev/null +++ b/src/seastar/dpdk/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/src/seastar/dpdk/doc/guides/howto/img/lm_vhost_user.svg b/src/seastar/dpdk/doc/guides/howto/img/lm_vhost_user.svg new file mode 100644 index 00000000..3601cf11 --- /dev/null +++ b/src/seastar/dpdk/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/src/seastar/dpdk/doc/guides/howto/img/pvp_2nics.svg b/src/seastar/dpdk/doc/guides/howto/img/pvp_2nics.svg new file mode 100644 index 00000000..517a8008 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/img/pvp_2nics.svg @@ -0,0 +1,556 @@ +<?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="127.46428mm" + height="139.41411mm" + viewBox="0 0 451.64508 493.987" + id="svg2" + version="1.1" + inkscape:version="0.92pre2 r" + sodipodi:docname="pvp_2nics.svg" + inkscape:export-filename="/home/max/Pictures/dpdk/pvp/pvp.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker4760" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4762" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker4642" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4644" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker10370" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path10372" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker10306" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path10308" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker9757" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:collect="always"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path9759" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4224" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path4227" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-1" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4227-27" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart-9" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4224-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker9757-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path9759-6" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart-6" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4224-0" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-62" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4227-6" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="marker10370-7" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path10372-9" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker9757-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + id="path9759-0" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lstart-9-2" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4224-3-3" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(0.8,0,0,0.8,10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-1-7" + style="overflow:visible" + inkscape:isstock="true"> + <path + inkscape:connector-curvature="0" + id="path4227-27-5" + d="M 0,0 5,-5 -12.5,0 5,5 Z" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.49497475" + inkscape:cx="206.7485" + inkscape:cy="227.93958" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:object-nodes="true" + inkscape:window-width="1916" + inkscape:window-height="1040" + inkscape:window-x="0" + inkscape:window-y="38" + inkscape:window-maximized="0" + inkscape:snap-grids="true" + inkscape:snap-to-guides="true" + inkscape:snap-others="false" + inkscape:snap-nodes="false" + inkscape:snap-global="false" /> + <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></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-5.3301459,-7.348317)"> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.78969002;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4140" + width="434.38919" + height="75.295639" + x="21.691195" + y="404.59354" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="421.47873" + y="501.3353" + id="text4142"><tspan + sodipodi:role="line" + id="tspan4144" + x="421.47873" + y="501.3353" + style="font-size:25px;line-height:125%">TE</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.46599996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4146" + width="92.934036" + height="32.324883" + x="182.57764" + y="372.03574" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="183.5878" + y="397.28958" + id="text4148"><tspan + sodipodi:role="line" + id="tspan4150" + x="183.5878" + y="397.28958" + style="font-size:25px">10G NIC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="166.92024" + y="451.33276" + id="text4152"><tspan + sodipodi:role="line" + id="tspan4154" + x="166.92024" + y="451.33276">Moongen</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.39882457;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4156" + width="449.73071" + height="244.32167" + x="6.0295582" + y="29.046324" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="405.31628" + y="25.048317" + id="text4158"><tspan + sodipodi:role="line" + id="tspan4160" + x="405.31628" + y="25.048317" + style="font-size:25px">DUT</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.14168489;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4162" + width="418.69415" + height="107.50462" + x="19.038134" + y="41.044758" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="395.38812" + y="66.496857" + id="text4164"><tspan + sodipodi:role="line" + id="tspan4166" + x="395.38812" + y="66.496857" + style="font-size:25px">VM</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.46599996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4146-3" + width="92.934036" + height="32.324883" + x="183.0827" + y="274.05093" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="184.09286" + y="299.30475" + id="text4148-6"><tspan + sodipodi:role="line" + id="tspan4150-7" + x="184.09286" + y="299.30475" + style="font-size:25px">10G NIC</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.4804399;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4189" + width="398.00476" + height="65.451302" + x="26.901583" + y="82.647781" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="30.683046" + y="108.31288" + id="text4191"><tspan + sodipodi:role="line" + id="tspan4193" + x="30.683046" + y="108.31288">TestPMD</tspan><tspan + sodipodi:role="line" + x="30.683046" + y="139.56288" + id="tspan10476">(macswap)</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.49124122;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4189-5" + width="397.22263" + height="66.152573" + x="29.743357" + y="207.6543" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:25px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="42.720772" + y="231.14902" + id="text4191-3"><tspan + sodipodi:role="line" + id="tspan4193-5" + x="42.720772" + y="231.14902">TestPMD </tspan><tspan + sodipodi:role="line" + x="42.720772" + y="262.39902" + id="tspan9747">(io)</tspan></text> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.97838062px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="M 202.56669,371.44487 V 308.37034" + id="path4218" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97297633px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)" + d="M 252.03098,369.63533 V 307.25568" + id="path4218-9" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.92982113px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-1)" + d="M 198.63811,207.44389 V 150.47507" + id="path4218-0" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95360273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-9)" + d="M 255.56859,206.9303 V 147.01008" + id="path4218-9-6" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker9757)" + d="M 199.50513,271.00921 V 207.3696" + id="path9749" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker10370)" + d="M 255.56859,270.56991 V 206.9303" + id="path9749-2" + inkscape:connector-curvature="0" /> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.46599996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4146-36" + width="92.934036" + height="32.324883" + x="304.05591" + y="372.52954" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="305.06607" + y="397.78339" + id="text4148-7"><tspan + sodipodi:role="line" + id="tspan4150-5" + x="305.06607" + y="397.78339" + style="font-size:25px">10G NIC</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.46599996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4146-3-3" + width="92.934036" + height="32.324883" + x="306.07623" + y="273.53461" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="307.0864" + y="298.78842" + id="text4148-6-5"><tspan + sodipodi:role="line" + id="tspan4150-7-6" + x="307.0864" + y="298.78842" + style="font-size:25px">10G NIC</tspan></text> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.97838062px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-62)" + d="M 323.7504,370.24835 V 307.17382" + id="path4218-1" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97297633px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-6)" + d="M 373.21469,368.43881 V 306.05916" + id="path4218-9-8" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.92982113px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-1-7)" + d="M 324.93036,207.24894 V 150.28012" + id="path4218-0-9" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95360273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-9-2)" + d="M 381.86084,206.73535 V 146.81513" + id="path4218-9-6-2" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker9757-2)" + d="M 325.79738,270.81426 V 207.17465" + id="path9749-28" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker10370-7)" + d="M 381.86084,270.37496 V 206.73535" + id="path9749-2-9" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4642)" + d="M 198.57143,148.79077 V 95.93363 h 182.85714 v 50" + id="path3748" + inkscape:connector-curvature="0" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.01005316;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.02010632, 1.01005316;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4760)" + d="m 325.70774,148.78714 v -32.84999 h -70.7012 v 30.70761" + id="path4634" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/src/seastar/dpdk/doc/guides/howto/img/use_models_for_running_dpdk_in_containers.svg b/src/seastar/dpdk/doc/guides/howto/img/use_models_for_running_dpdk_in_containers.svg new file mode 100644 index 00000000..662c2266 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/img/use_models_for_running_dpdk_in_containers.svg @@ -0,0 +1,398 @@ +<?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 user_models_for_running_dpdk_in_containers.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="10.6194in" height="4.55593in" + viewBox="0 0 764.596 328.027" xml:space="preserve" color-interpolation-filters="sRGB" class="st19"> + <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:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st6 {fill:none;stroke:#c7c8c8;stroke-width:0.25} + .st7 {fill:#d8d8d8;stroke:#c7c8c8;stroke-width:0.25} + .st8 {fill:none;stroke:none;stroke-width:0.25} + .st9 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic} + .st10 {fill:#ed7d31;stroke:#c7c8c8;stroke-width:0.25} + .st11 {fill:#feffff;font-family:Calibri;font-size:0.833336em} + .st12 {fill:#a5a5a5;stroke:#c7c8c8;stroke-width:0.25} + .st13 {marker-end:url(#mrkr4-61);marker-start:url(#mrkr4-59);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st14 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.28409090909091} + .st15 {font-size:1em} + .st16 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-dasharray:7,5;stroke-opacity:0.22} + .st17 {fill:none;stroke:#ff0000;stroke-dasharray:7,5;stroke-width:1} + .st18 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st19 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend4"> + <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/> + </g> + <marker id="mrkr4-59" class="st14" v:arrowType="4" v:arrowSize="2" v:setback="6.68" refX="6.68" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend4" transform="scale(3.52) "/> + </marker> + <marker id="mrkr4-61" class="st14" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/> + </marker> + </defs> + <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"/> + <v:layer v:name="Connector" v:index="0"/> + <g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(146.2,-258.819)"> + <title>Rectangle</title> + <desc>Container</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="34.05" cy="300.937" width="68.1" height="54.1807"/> + <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="273.847" width="68.1" height="54.1807" class="st2"/> + </g> + <rect x="0" y="273.847" width="68.1" height="54.1807" class="st3"/> + <text x="14.04" y="291.94" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Container<v:newlineChar/><v:newlineChar/></text> </g> + <g id="shape3-7" v:mID="3" v:groupContext="shape" transform="translate(18.25,-169.971)"> + <title>Rectangle.3</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow3-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="270.699" width="306" height="57.3286" rx="13.5" ry="13.5" class="st5"/> + </g> + <rect x="0" y="270.699" width="306" height="57.3286" rx="13.5" ry="13.5" class="st6"/> + </g> + <g id="shape4-12" v:mID="4" v:groupContext="shape" transform="translate(18.25,-61)"> + <title>Rectangle.4</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow4-13" 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="256.027" width="306" height="72" rx="13.5" ry="13.5" class="st2"/> + </g> + <rect x="0" y="256.027" width="306" height="72" rx="13.5" ry="13.5" class="st7"/> + </g> + <g id="shape5-17" v:mID="5" v:groupContext="shape" transform="translate(17.65,-202.75)"> + <title>Sheet.5</title> + <desc>Host kernel</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="34.05" cy="316.777" width="68.1" height="22.5"/> + <rect x="0" y="305.527" width="68.1" height="22.5" class="st8"/> + <text x="6.55" y="320.38" class="st9" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Host kernel</text> </g> + <g id="shape6-20" v:mID="6" v:groupContext="shape" transform="translate(0.25,-110.5)"> + <title>Sheet.6</title> + <desc>NIC</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="34.05" cy="316.777" width="68.1" height="22.5"/> + <rect x="0" y="305.527" width="68.1" height="22.5" class="st8"/> + <text x="25.54" y="320.38" class="st9" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>NIC</text> </g> + <g id="shape7-23" v:mID="7" v:groupContext="shape" transform="translate(67.75,-99.3)"> + <title>Rectangle.7</title> + <desc>PF</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="14.625" cy="316.777" width="29.26" height="22.5"/> + <g id="shadow7-24" 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="305.527" width="29.25" height="22.5" class="st2"/> + </g> + <rect x="0" y="305.527" width="29.25" height="22.5" class="st10"/> + <text x="9.74" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>PF</text> </g> + <g id="shape8-29" v:mID="8" v:groupContext="shape" transform="translate(165.625,-99.3)"> + <title>Rectangle.8</title> + <desc>VF</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="14.625" cy="316.777" width="29.26" height="22.5"/> + <g id="shadow8-30" 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="305.527" width="29.25" height="22.5" class="st2"/> + </g> + <rect x="0" y="305.527" width="29.25" height="22.5" class="st10"/> + <text x="9.49" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF</text> </g> + <g id="shape10-35" v:mID="10" v:groupContext="shape" transform="translate(67.75,-70)"> + <title>Rectangle.10</title> + <desc>Hardware virtual switch</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="112.5" cy="316.777" width="225" height="22.5"/> + <g id="shadow10-36" 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="305.527" width="225" height="22.5" class="st2"/> + </g> + <rect x="0" y="305.527" width="225" height="22.5" class="st12"/> + <text x="64.07" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Hardware virtual switch</text> </g> + <g id="shape14-41" v:mID="14" v:groupContext="shape" transform="translate(238.15,-258.7)"> + <title>Rectangle.14</title> + <desc>Container</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="34.05" cy="300.937" width="68.1" height="54.1807"/> + <g id="shadow14-42" 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="273.847" width="68.1" height="54.1807" class="st2"/> + </g> + <rect x="0" y="273.847" width="68.1" height="54.1807" class="st3"/> + <text x="14.04" y="291.94" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Container<v:newlineChar/><v:newlineChar/></text> </g> + <g id="shape15-47" v:mID="15" v:groupContext="shape" transform="translate(257.575,-99.2)"> + <title>Rectangle.15</title> + <desc>VF</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="14.625" cy="316.777" width="29.26" height="22.5"/> + <g id="shadow15-48" 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="305.527" width="29.25" height="22.5" class="st2"/> + </g> + <rect x="0" y="305.527" width="29.25" height="22.5" class="st10"/> + <text x="9.49" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF</text> </g> + <g id="shape16-53" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(263.2,-258.7)"> + <title>Dynamic connector.16</title> + <path d="M9 334.71 L9 335.07 L9 457.99" class="st13"/> + </g> + <g id="shape18-62" v:mID="18" v:groupContext="shape" transform="translate(54.25,-180.25)"> + <title>Ellipse</title> + <desc>PF driver</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="28.125" cy="316.777" width="49.22" height="19.6875"/> + <g id="shadow18-63" 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"> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st2"/> + </g> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st10"/> + <text x="10.11" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>PF driver</text> </g> + <g id="shape19-68" v:mID="19" v:groupContext="shape" v:layerMember="0" transform="translate(73.375,-180.25)"> + <title>Dynamic connector.19</title> + <path d="M9 334.71 L9 335.07 L9 379.44" class="st13"/> + </g> + <g id="shape20-75" v:mID="20" v:groupContext="shape" transform="translate(152.125,-263.44)"> + <title>Ellipse.20</title> + <desc>DPDK</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="28.125" cy="316.777" width="49.22" height="19.6875"/> + <g id="shadow20-76" 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"> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st2"/> + </g> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st10"/> + <text x="16.79" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>DPDK</text> </g> + <g id="shape21-81" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(171.25,-258.819)"> + <title>Dynamic connector.21</title> + <path d="M9 334.71 L9 335.07 L9 458.01" class="st13"/> + </g> + <g id="shape22-88" v:mID="22" v:groupContext="shape" transform="translate(243.25,-263.44)"> + <title>Ellipse.22</title> + <desc>DPDK</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="28.125" cy="316.777" width="49.22" height="19.6875"/> + <g id="shadow22-89" 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"> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st2"/> + </g> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st10"/> + <text x="16.79" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>DPDK</text> </g> + <g id="shape23-94" v:mID="23" v:groupContext="shape" transform="translate(395.65,-254.5)"> + <title>Rectangle.23</title> + <desc>Virtual Appliance</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="34.05" cy="300.937" width="68.1" height="54.1807"/> + <g id="shadow23-95" 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="273.847" width="68.1" height="54.1807" class="st2"/> + </g> + <rect x="0" y="273.847" width="68.1" height="54.1807" class="st3"/> + <text x="20.48" y="297.94" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Virtual <tspan + x="13.98" dy="1.2em" class="st15">Appliance</tspan></text> </g> + <g id="shape25-101" v:mID="25" v:groupContext="shape" transform="translate(476.65,-254.681)"> + <title>Rectangle.25</title> + <desc>VM + Container</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="34.05" cy="300.937" width="68.1" height="54.1807"/> + <g id="shadow25-102" 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="273.847" width="68.1" height="54.1807" class="st2"/> + </g> + <rect x="0" y="273.847" width="68.1" height="54.1807" class="st3"/> + <text x="23.32" y="297.94" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VM + <tspan x="14.04" + dy="1.2em" class="st15">Container</tspan></text> </g> + <g id="shape27-108" v:mID="27" v:groupContext="shape" transform="translate(566.65,-254.681)"> + <title>Rectangle.27</title> + <desc>Container</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="34.05" cy="300.937" width="68.1" height="54.1807"/> + <g id="shadow27-109" 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="273.847" width="68.1" height="54.1807" class="st2"/> + </g> + <rect x="0" y="273.847" width="68.1" height="54.1807" class="st3"/> + <text x="14.04" y="291.94" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Container<v:newlineChar/><v:newlineChar/></text> </g> + <g id="shape28-114" v:mID="28" v:groupContext="shape" transform="translate(570.625,-261.431)"> + <title>Ellipse.28</title> + <desc>DPDK</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="28.125" cy="316.777" width="49.22" height="19.6875"/> + <g id="shadow28-115" 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"> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st2"/> + </g> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st10"/> + <text x="16.79" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>DPDK</text> </g> + <g id="shape29-120" v:mID="29" v:groupContext="shape" transform="translate(405.25,-110.5)"> + <title>Rectangle.29</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow29-121" 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="270.699" width="346.5" height="57.3286" rx="13.5" ry="13.5" class="st5"/> + </g> + <rect x="0" y="270.699" width="346.5" height="57.3286" rx="13.5" ry="13.5" class="st6"/> + </g> + <g id="shape30-125" v:mID="30" v:groupContext="shape" transform="translate(405.25,-142)"> + <title>Sheet.30</title> + <desc>Host kernel</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="34.05" cy="316.777" width="68.1" height="22.5"/> + <rect x="0" y="305.527" width="68.1" height="22.5" class="st8"/> + <text x="6.55" y="320.38" class="st9" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Host kernel</text> </g> + <g id="shape31-128" v:mID="31" v:groupContext="shape" transform="translate(681.417,-205)"> + <title>Rectangle.31</title> + <desc>vSwitch or vRouter</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="34.05" cy="276.277" width="68.1" height="103.5"/> + <g id="shadow31-129" 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="224.527" width="68.1" height="103.5" class="st2"/> + </g> + <rect x="0" y="224.527" width="68.1" height="103.5" class="st3"/> + <text x="18.36" y="255.28" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>vSwitch<v:newlineChar/><tspan + x="29.67" dy="1.2em" class="st15">or<v:newlineChar/></tspan><tspan x="17.91" dy="1.2em" class="st15">vRouter</tspan><v:newlineChar/><v:newlineChar/></text> </g> + <g id="shape32-136" v:mID="32" v:groupContext="shape" transform="translate(687.342,-214)"> + <title>Ellipse.32</title> + <desc>DPDK</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="28.125" cy="316.777" width="49.22" height="19.6875"/> + <g id="shadow32-137" 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"> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st2"/> + </g> + <path d="M0 316.78 A28.125 11.25 0 0 1 56.25 316.78 A28.125 11.25 0 1 1 0 316.78 Z" class="st10"/> + <text x="16.79" y="319.78" class="st11" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>DPDK</text> </g> + <g id="shape34-142" v:mID="34" v:groupContext="shape" v:layerMember="0" transform="translate(429.7,-254.5)"> + <title>Dynamic connector</title> + <path d="M0 334.71 L0 335.07 L0 364.03 L244.68 364.03" class="st13"/> + </g> + <g id="shape35-149" v:mID="35" v:groupContext="shape" v:layerMember="0" transform="translate(510.7,-254.681)"> + <title>Dynamic connector.35</title> + <path d="M0 334.71 L0 335.07 L0 355.21 L163.68 355.21" class="st13"/> + </g> + <g id="shape36-156" v:mID="36" v:groupContext="shape" v:layerMember="0" transform="translate(600.7,-254.681)"> + <title>Dynamic connector.36</title> + <path d="M0 334.71 L0 335.07 L0 346.21 L73.68 346.21" class="st13"/> + </g> + <g id="shape37-163" v:mID="37" v:groupContext="shape" transform="translate(557.933,-182.5)"> + <title>Rectangle.37</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow37-164" 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"> + <path d="M0 328.03 L202.82 328.03 L202.82 184.03 L0 184.03 L0 328.03 Z" class="st16"/> + </g> + <path d="M0 328.03 L202.82 328.03 L202.82 184.03 L0 184.03 L0 328.03 Z" class="st17"/> + </g> + <g id="shape38-168" v:mID="38" v:groupContext="shape" transform="translate(676.9,-72.25)"> + <title>Rectangle.38</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow38-169" 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="305.527" width="74.85" height="22.5" rx="11.25" ry="11.25" class="st2"/> + </g> + <rect x="0" y="305.527" width="74.85" height="22.5" rx="11.25" ry="11.25" class="st7"/> + </g> + <g id="shape39-173" v:mID="39" v:groupContext="shape" transform="translate(686.2,-72.25)"> + <title>Sheet.39</title> + <desc>NIC</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="28.125" cy="316.777" width="56.25" height="22.5"/> + <rect x="0" y="305.527" width="56.25" height="22.5" class="st8"/> + <text x="19.61" y="320.38" class="st9" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>NIC</text> </g> + <g id="shape41-176" v:mID="41" v:groupContext="shape" v:layerMember="0" transform="translate(723.896,-205)"> + <title>Dynamic connector.41</title> + <path d="M-8.5 334.71 L-8.5 335.07 L-9.5 431.24" class="st13"/> + </g> + <g id="shape42-183" v:mID="42" v:groupContext="shape" v:layerMember="0" transform="translate(382.75,-317.5)"> + <title>Dynamic connector.42</title> + <path d="M-9 328.03 L-9 589.03" class="st18"/> + </g> + <g id="shape43-186" v:mID="43" v:groupContext="shape" transform="translate(161.65,-0.25)"> + <title>Sheet.43</title> + <desc>(1) Slicing</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="34.05" cy="316.777" width="68.1" height="22.5"/> + <rect x="0" y="305.527" width="68.1" height="22.5" class="st8"/> + <text x="10.5" y="320.38" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(1) Slicing</text> </g> + <g id="shape44-189" v:mID="44" v:groupContext="shape" transform="translate(553.75,-0.25)"> + <title>Sheet.44</title> + <desc>(2) Aggregation</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="44.025" cy="316.777" width="88.05" height="22.5"/> + <rect x="0" y="305.527" width="88.05" height="22.5" class="st8"/> + <text x="5.7" y="320.38" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(2) Aggregation</text> </g> + </g> +</svg> diff --git a/src/seastar/dpdk/doc/guides/howto/img/vf_daemon_overview.svg b/src/seastar/dpdk/doc/guides/howto/img/vf_daemon_overview.svg new file mode 100644 index 00000000..d4a47234 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/img/vf_daemon_overview.svg @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- +# BSD LICENSE +# +# Copyright(c) 2017 Intel Corporation. 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. +--> + +<!-- Generated by Microsoft Visio, SVG Export vf_daemon_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="653.98083" + height="346.37814" + viewBox="0 0 523.18544 277.10257" + xml:space="preserve" + class="st16" + id="svg3406" + version="1.1" + inkscape:version="0.92.1 r15371" + sodipodi:docname="vf_daemon_overview.svg" + style="font-size:12px;overflow:visible;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3"><metadata + id="metadata3652"><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><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1003" + id="namedview3650" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:zoom="1.683916" + inkscape:cx="370.95135" + inkscape:cy="160.84375" + inkscape:window-x="-9" + inkscape:window-y="-9" + inkscape:window-maximized="1" + inkscape:current-layer="svg3406" /><style + type="text/css" + id="style3408"> + .st1 {visibility:visible} + .st2 {fill:#5b9bd5;fill-opacity:0.25;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.25} + .st3 {fill:#4f87bb;stroke:#40709c;stroke-width:0.75} + .st4 {fill:#feffff;font-family:Calibri;font-size:0.833336em} + .st5 {fill:url(#grad0-11);stroke:#4f87bb;stroke-width:0.75} + .st6 {fill:#4f87bb;font-family:Calibri;font-size:0.833336em} + .st7 {fill:#759fcc;fill-opacity:0.25;filter:url(#filter_2);stroke:#759fcc;stroke-opacity:0.25} + .st8 {fill:#668bb3;stroke:#547395;stroke-width:0.75} + .st9 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st10 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25} + .st11 {fill:#759fcc;fill-opacity:0.22;filter:url(#filter_2);stroke:#759fcc;stroke-opacity:0.22} + .st12 {fill:#759fcc;stroke:#c7c8c8;stroke-width:0.25} + .st13 {fill:url(#grad0-40);stroke:#a6b6cd;stroke-width:0.75} + .st14 {fill:#70ad47;fill-opacity:0.25;filter:url(#filter_2);stroke:#70ad47;stroke-opacity:0.25} + .st15 {fill:#61973d;stroke:#507e31;stroke-width:0.75} + .st16 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + </style><defs + id="Patterns_And_Gradients"><linearGradient + id="grad0-11" + x1="-0.24584444" + y1="740.83429" + x2="167.49742" + y2="740.83429" + gradientTransform="scale(1.5253548,0.65558519)" + gradientUnits="userSpaceOnUse"><stop + offset="0" + stop-color="#e9eff7" + stop-opacity="1" + id="stop3412" /><stop + offset="0.24" + stop-color="#f4f7fb" + stop-opacity="1" + id="stop3414" /><stop + offset="0.54" + stop-color="#feffff" + stop-opacity="1" + id="stop3416" /></linearGradient><linearGradient + id="grad0-40" + x1="0" + y1="0" + x2="1" + y2="0" + gradientTransform="rotate(60,0.5,0.5)"><stop + offset="0" + stop-color="#f3f6fa" + stop-opacity="1" + id="stop3419" /><stop + offset="0.24" + stop-color="#f9fafc" + stop-opacity="1" + id="stop3421" /><stop + offset="0.54" + stop-color="#feffff" + stop-opacity="1" + id="stop3423" /></linearGradient><linearGradient + id="grad0-40-2" + x1="0" + y1="0" + x2="1" + y2="0" + gradientTransform="rotate(60,0.5,0.5)"><stop + offset="0" + stop-color="#f3f6fa" + stop-opacity="1" + id="stop3419-2" /><stop + offset="0.24" + stop-color="#f9fafc" + stop-opacity="1" + id="stop3421-8" /><stop + offset="0.54" + stop-color="#feffff" + stop-opacity="1" + id="stop3423-0" /></linearGradient><filter + style="color-interpolation-filters:sRGB" + id="filter_2-6"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur3427-3" /></filter><filter + style="color-interpolation-filters:sRGB" + id="filter4802"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur4800" /></filter><filter + style="color-interpolation-filters:sRGB" + id="filter4810"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur4808" /></filter><filter + style="color-interpolation-filters:sRGB" + id="filter_2-1"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur3427-8" /></filter><linearGradient + inkscape:collect="always" + xlink:href="#grad0-11" + id="linearGradient5846" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2751142,0,0,0.85239422,296.69995,-509.84788)" + x1="-0.24584444" + y1="740.83429" + x2="167.49742" + y2="740.83429" /><linearGradient + inkscape:collect="always" + xlink:href="#grad0-40" + id="linearGradient5848" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.9084098,0.3438305)" + x1="-0.12893644" + y1="1717.1688" + x2="28.140806" + y2="1717.1688" /><linearGradient + inkscape:collect="always" + xlink:href="#grad0-40" + id="linearGradient5917" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.9084098,0.3438305)" + x1="-0.12893644" + y1="1717.1688" + x2="28.140806" + y2="1717.1688" /><linearGradient + inkscape:collect="always" + xlink:href="#grad0-11" + id="linearGradient6028" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2751142,0,0,0.85239422,14.0251,-510.3054)" + x1="-0.24584444" + y1="740.83429" + x2="167.49742" + y2="740.83429" /><linearGradient + inkscape:collect="always" + xlink:href="#grad0-40" + id="linearGradient6030" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(2.9084098,0.3438305)" + x1="-0.12893644" + y1="1717.1688" + x2="28.140806" + y2="1717.1688" /></defs><defs + id="Filters"><filter + id="filter_2" + style="color-interpolation-filters:sRGB"><feGaussianBlur + stdDeviation="2" + id="feGaussianBlur3427" /></filter></defs><flowRoot + xml:space="preserve" + id="flowRoot5059" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + transform="translate(83.77187,-3.3273299)"><flowRegion + id="flowRegion5061"><rect + id="rect5063" + width="319.13776" + height="378.76611" + x="246.91183" + y="-24.140537" /></flowRegion><flowPara + id="flowPara5065" /></flowRoot><rect + x="310.9368" + y="41.112034" + width="185.48367" + height="52.464527" + class="st3" + id="rect3441-6" + style="font-size:medium;color-interpolation-filters:sRGB;fill:#4f87bb;fill-rule:evenodd;stroke:#40709c;stroke-width:0.59376031;stroke-linecap:square;stroke-miterlimit:3" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:url(#linearGradient5846);fill-rule:evenodd;stroke:#4f87bb;stroke-width:0.78190857;stroke-linecap:square;stroke-miterlimit:3" + id="rect3453-5" + class="st5" + height="142.00824" + width="213.26486" + y="122.12257" + x="296.69995" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:#668bb3;fill-rule:evenodd;stroke:#547395;stroke-width:0.81434548;stroke-linecap:square;stroke-miterlimit:3" + id="rect3465-8" + class="st8" + height="107.19906" + width="191.24162" + y="148.73914" + x="303.27353" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:#5b9bd5;fill-rule:evenodd;stroke:#c7c8c8;stroke-width:0.30626383;stroke-linecap:square;stroke-miterlimit:3" + id="rect3477-1" + class="st10" + height="37.991375" + width="99.433281" + y="201.63286" + x="345.86914" /><g + style="font-size:medium;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3" + transform="matrix(0.00129134,-1.4946882,0.98914737,0.00195132,-182.90697,199.1254)" + id="shape8-37-9"><title + id="title3506-4">Simple Double Arrow.14</title><path + style="fill:url(#linearGradient5848);stroke:#a6b6cd;stroke-width:0.75" + inkscape:connector-curvature="0" + id="path3508-6" + class="st13" + d="m 0,595.28 11.34,-4.49 v 2.24 h 58.8 v -2.24 l 11.33,4.49 -11.33,4.48 v -2.24 h -58.8 v 2.24 z" /></g><rect + style="font-size:medium;opacity:0.347;color-interpolation-filters:sRGB;fill:none;fill-opacity:0.91387556;fill-rule:evenodd;stroke:#0044ea;stroke-width:0.6845746;stroke-linecap:square;stroke-miterlimit:3;stroke-opacity:1" + id="rect4923-1" + width="228.54221" + height="267.54898" + x="288.59995" + y="5.0613203" /><text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:19.20002937px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#0026e8;fill-opacity:0.83732054;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="478.50806" + y="25.851391" + id="text4927-7"><tspan + sodipodi:role="line" + id="tspan4925-3" + x="478.50806" + y="25.851391" + style="font-size:19.20002937px;fill:#0026e8;fill-opacity:0.83732054;stroke-width:0.8000012">VM</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:17.06669235px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="343.81976" + y="68.998184" + id="text5156-5"><tspan + sodipodi:role="line" + id="tspan5154-8" + x="343.81976" + y="68.998184" + style="font-size:17.06669235px;fill:#ffffff;stroke-width:0.8000012">VF Application</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:17.06669235px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#008080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="457.61066" + y="138.71524" + id="text5715-9"><tspan + sodipodi:role="line" + id="tspan5713-1" + x="457.61066" + y="138.71524" + style="font-size:17.06669235px;fill:#008080;stroke-width:0.8000012">DPDK</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.93335533px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="309.18256" + y="170.07077" + id="text5723-9"><tspan + sodipodi:role="line" + id="tspan5721-0" + x="309.18256" + y="170.07077" + style="font-size:14.93335533px;fill:#ffffff;stroke-width:0.8000012">Virtual ethdev</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80001926px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="367.12158" + y="223.89334" + id="text5735-1"><tspan + sodipodi:role="line" + id="tspan5733-1" + x="367.12158" + y="223.89334" + style="font-size:12.80001926px;fill:#ffffff;stroke-width:0.8000012">VF driver</tspan></text> +<g + style="font-size:medium;overflow:visible;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3" + transform="matrix(-1.1390578,0.0062451,-0.01163082,-1.009126,315.58916,668.0438)" + id="shape8-37-9-3"><title + id="title3506-4-4">Simple Double Arrow.14</title><path + style="fill:url(#linearGradient5917);stroke:#a6b6cd;stroke-width:0.75" + inkscape:connector-curvature="0" + id="path3508-6-2" + class="st13" + d="m 0,595.28 11.34,-4.49 v 2.24 h 58.8 v -2.24 l 11.33,4.49 -11.33,4.48 v -2.24 h -58.8 v 2.24 z" /></g><rect + x="28.261948" + y="40.65451" + width="185.48367" + height="52.464527" + class="st3" + id="rect3441-6-5" + style="font-size:medium;color-interpolation-filters:sRGB;fill:#4f87bb;fill-rule:evenodd;stroke:#40709c;stroke-width:0.59376031;stroke-linecap:square;stroke-miterlimit:3" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:url(#linearGradient6028);fill-rule:evenodd;stroke:#4f87bb;stroke-width:0.78190857;stroke-linecap:square;stroke-miterlimit:3" + id="rect3453-5-5" + class="st5" + height="142.00824" + width="213.26486" + y="121.66504" + x="14.025101" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:#668bb3;fill-rule:evenodd;stroke:#547395;stroke-width:0.81434548;stroke-linecap:square;stroke-miterlimit:3" + id="rect3465-8-0" + class="st8" + height="107.19906" + width="191.24162" + y="148.28162" + x="20.598679" /><rect + style="font-size:medium;color-interpolation-filters:sRGB;fill:#5b9bd5;fill-rule:evenodd;stroke:#c7c8c8;stroke-width:0.30626383;stroke-linecap:square;stroke-miterlimit:3" + id="rect3477-1-1" + class="st10" + height="37.991375" + width="99.433281" + y="201.17534" + x="63.19429" /><g + style="font-size:medium;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3" + transform="matrix(0.00129134,-1.4946882,0.98914737,0.00195132,-465.58182,198.66788)" + id="shape8-37-9-33"><title + id="title3506-4-3">Simple Double Arrow.14</title><path + style="fill:url(#linearGradient6030);stroke:#a6b6cd;stroke-width:0.75" + inkscape:connector-curvature="0" + id="path3508-6-1" + class="st13" + d="m 0,595.28 11.34,-4.49 v 2.24 h 58.8 v -2.24 l 11.33,4.49 -11.33,4.48 v -2.24 h -58.8 v 2.24 z" /></g><rect + style="font-size:medium;opacity:0.347;color-interpolation-filters:sRGB;fill:none;fill-opacity:0.91387556;fill-rule:evenodd;stroke:#0044ea;stroke-width:0.6845746;stroke-linecap:square;stroke-miterlimit:3;stroke-opacity:1" + id="rect4923-1-0" + width="228.54222" + height="267.54898" + x="5.9250998" + y="4.6037965" /><text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:19.20002937px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#0026e8;fill-opacity:0.83732054;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="184.63316" + y="25.393867" + id="text4927-7-3"><tspan + sodipodi:role="line" + id="tspan4925-3-7" + x="184.63316" + y="25.393867" + style="font-size:19.20002937px;fill:#0026e8;fill-opacity:0.83732054;stroke-width:0.8000012">Host</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:17.06669235px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="61.144913" + y="68.540657" + id="text5156-5-7"><tspan + sodipodi:role="line" + id="tspan5154-8-6" + x="61.144913" + y="68.540657" + style="font-size:17.06669235px;fill:#ffffff;stroke-width:0.8000012">PF Application</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:17.06669235px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#008080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="174.93581" + y="138.25772" + id="text5715-9-7"><tspan + sodipodi:role="line" + id="tspan5713-1-4" + x="174.93581" + y="138.25772" + style="font-size:17.06669235px;fill:#008080;stroke-width:0.8000012">DPDK</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.93335533px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="26.507706" + y="169.61325" + id="text5723-9-4"><tspan + sodipodi:role="line" + id="tspan5721-0-5" + x="26.507706" + y="169.61325" + style="font-size:14.93335533px;fill:#ffffff;stroke-width:0.8000012">Ethdev</tspan></text> +<text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80001926px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;color-interpolation-filters:sRGB;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8000012;stroke-linecap:square;stroke-miterlimit:3" + x="84.446732" + y="223.43582" + id="text5735-1-0"><tspan + sodipodi:role="line" + id="tspan5733-1-1" + x="84.446732" + y="223.43582" + style="font-size:12.80001926px;fill:#ffffff;stroke-width:0.8000012">PF driver</tspan></text> +</svg> diff --git a/src/seastar/dpdk/doc/guides/howto/img/virtio_user_as_exceptional_path.svg b/src/seastar/dpdk/doc/guides/howto/img/virtio_user_as_exceptional_path.svg new file mode 100644 index 00000000..b231b709 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/img/virtio_user_as_exceptional_path.svg @@ -0,0 +1,207 @@ +<?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 virtio_user_as_exceptional_pathvsdx.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="5.77778in" height="3.88851in" + viewBox="0 0 416 279.973" xml:space="preserve" color-interpolation-filters="sRGB" class="st13"> + <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 {stroke:#000000;stroke-dasharray:7,5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st5 {fill:#000000;font-family:Calibri;font-size:0.833336em} + .st6 {fill:none;stroke:none;stroke-width:0.25} + .st7 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic} + .st8 {fill:#70ad47;stroke:#c7c8c8;stroke-width:0.25} + .st9 {stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75} + .st10 {marker-end:url(#mrkr4-68);marker-start:url(#mrkr4-66);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st11 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.28409090909091} + .st12 {fill:#d8d8d8;stroke:#c7c8c8;stroke-width:0.25} + .st13 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend4"> + <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/> + </g> + <marker id="mrkr4-66" class="st11" v:arrowType="4" v:arrowSize="2" v:setback="6.68" refX="6.68" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend4" transform="scale(3.52) "/> + </marker> + <marker id="mrkr4-68" class="st11" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/> + </marker> + </defs> + <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"/> + <v:layer v:name="Connector" v:index="0"/> + <g id="shape23-1" v:mID="23" v:groupContext="shape" transform="translate(195.804,-74.9728)"> + <title>Rectangle.23</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow23-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="113.473" width="216.6" height="166.5" class="st2"/> + </g> + <rect x="0" y="113.473" width="216.6" height="166.5" class="st3"/> + </g> + <g id="shape42-6" v:mID="42" v:groupContext="shape" v:layerMember="0" transform="translate(146.904,-277.473)"> + <title>Dynamic connector.42</title> + <path d="M-9 279.97 L-9 540.97" class="st4"/> + </g> + <g id="shape45-9" v:mID="45" v:groupContext="shape" transform="translate(2.9044,-142.292)"> + <title>Rectangle.45</title> + <desc>tap</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="34.05" cy="264.132" width="68.1" height="31.6807"/> + <g id="shadow45-10" 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="248.292" width="68.1" height="31.6807" class="st2"/> + </g> + <rect x="0" y="248.292" width="68.1" height="31.6807" class="st3"/> + <text x="27.35" y="267.13" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>tap</text> </g> + <g id="shape46-15" v:mID="46" v:groupContext="shape" transform="translate(2.9044,-43.2921)"> + <title>Rectangle.46</title> + <desc>vhost ko</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="34.05" cy="264.132" width="68.1" height="31.6807"/> + <g id="shadow46-16" 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="248.292" width="68.1" height="31.6807" class="st2"/> + </g> + <rect x="0" y="248.292" width="68.1" height="31.6807" class="st3"/> + <text x="16.86" y="267.13" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>vhost ko </text> </g> + <g id="shape47-21" v:mID="47" v:groupContext="shape" transform="translate(18.9544,-257.223)"> + <title>Sheet.47</title> + <desc>Kernel space</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="44.025" cy="268.723" width="88.05" height="22.5"/> + <rect x="0" y="257.473" width="88.05" height="22.5" class="st6"/> + <text x="13.44" y="272.32" class="st7" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Kernel space</text> </g> + <g id="shape48-24" v:mID="48" v:groupContext="shape" transform="translate(148.854,-257.223)"> + <title>Sheet.48</title> + <desc>User space</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="44.025" cy="268.723" width="88.05" height="22.5"/> + <rect x="0" y="257.473" width="88.05" height="22.5" class="st6"/> + <text x="17.7" y="272.32" class="st7" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>User space</text> </g> + <g id="shape49-27" v:mID="49" v:groupContext="shape" transform="translate(218.904,-182.792)"> + <title>Rectangle.49</title> + <desc>ETHDEV</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="83.25" cy="264.132" width="166.5" height="31.6807"/> + <g id="shadow49-28" 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="248.292" width="166.5" height="31.6807" class="st2"/> + </g> + <rect x="0" y="248.292" width="166.5" height="31.6807" class="st3"/> + <text x="66.9" y="267.13" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ETHDEV</text> </g> + <g id="shape50-33" v:mID="50" v:groupContext="shape" transform="translate(218.904,-142.292)"> + <title>Rectangle.50</title> + <desc>virtio PMD</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="38.7911" cy="264.132" width="77.59" height="31.6807"/> + <g id="shadow50-34" 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="248.292" width="77.5823" height="31.6807" class="st2"/> + </g> + <rect x="0" y="248.292" width="77.5823" height="31.6807" class="st3"/> + <text x="17.12" y="267.13" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>virtio PMD</text> </g> + <g id="shape51-39" v:mID="51" v:groupContext="shape" transform="translate(308.904,-142.292)"> + <title>Rectangle.51</title> + <desc>other PMDs</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="38.7911" cy="264.132" width="77.59" height="31.6807"/> + <g id="shadow51-40" 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="248.292" width="77.5823" height="31.6807" class="st2"/> + </g> + <rect x="0" y="248.292" width="77.5823" height="31.6807" class="st3"/> + <text x="14.6" y="267.13" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>other PMDs</text> </g> + <g id="shape52-45" v:mID="52" v:groupContext="shape" transform="translate(218.904,-86.3131)"> + <title>Rectangle.52</title> + <desc>virtio-user</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="38.7911" cy="256.393" width="77.59" height="47.1597"/> + <g id="shadow52-46" 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="232.813" width="77.5823" height="47.1597" class="st2"/> + </g> + <rect x="0" y="232.813" width="77.5823" height="47.1597" class="st8"/> + <text x="17.84" y="247.39" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>virtio-user<v:newlineChar/><v:newlineChar/></text> </g> + <g id="shape53-51" v:mID="53" v:groupContext="shape" transform="translate(223.404,-90.1829)"> + <title>Rectangle.53</title> + <desc>vhost adapter</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="34.05" cy="268.183" width="68.1" height="23.5798"/> + <g id="shadow53-52" 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="256.393" width="68.1" height="23.5798" class="st2"/> + </g> + <rect x="0" y="256.393" width="68.1" height="23.5798" class="st3"/> + <text x="5.82" y="271.18" class="st5" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>vhost adapter</text> </g> + <g id="shape54-57" v:mID="54" v:groupContext="shape" v:layerMember="0" transform="translate(71.0044,-59.1325)"> + <title>Dynamic connector</title> + <path d="M0 279.97 L63.9 279.97 A3 3 0 1 1 69.9 279.97 L186.69 279.97 L186.69 252.79" class="st9"/> + </g> + <g id="shape55-60" v:mID="55" v:groupContext="shape" v:layerMember="0" transform="translate(71.0044,-149.132)"> + <title>Dynamic connector.55</title> + <path d="M6.68 270.97 L7.04 270.97 L63.9 270.97 A3 3 0 0 1 69.9 270.97 L140.86 270.97" class="st10"/> + </g> + <g id="shape56-69" v:mID="56" v:groupContext="shape" transform="translate(308.904,-5.2228)"> + <title>Rectangle.38</title> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <g id="shadow56-70" 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="257.473" width="77.5823" height="22.5" rx="11.25" ry="11.25" class="st2"/> + </g> + <rect x="0" y="257.473" width="77.5823" height="22.5" rx="11.25" ry="11.25" class="st12"/> + </g> + <g id="shape57-74" v:mID="57" v:groupContext="shape" transform="translate(318.204,-5.2228)"> + <title>Sheet.57</title> + <desc>NIC</desc> + <v:textBlock v:margins="rect(4,4,4,4)"/> + <v:textRect cx="28.125" cy="268.723" width="56.25" height="22.5"/> + <rect x="0" y="257.473" width="56.25" height="22.5" class="st6"/> + <text x="19.61" y="272.32" class="st7" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>NIC</text> </g> + <g id="shape58-77" v:mID="58" v:groupContext="shape" v:layerMember="0" transform="translate(356.696,-142.292)"> + <title>Dynamic connector.41</title> + <path d="M-9 286.65 L-9 287.01 L-9 387.5" class="st10"/> + </g> + </g> +</svg> diff --git a/src/seastar/dpdk/doc/guides/howto/img/virtio_user_for_container_networking.svg b/src/seastar/dpdk/doc/guides/howto/img/virtio_user_for_container_networking.svg new file mode 100644 index 00000000..de808066 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/img/virtio_user_for_container_networking.svg @@ -0,0 +1,685 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" + 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" + version="1.1" + id="svg2" + class="st16" + color-interpolation-filters="sRGB" + xml:space="preserve" + viewBox="0 0 469.4 294.5" + height="4.09028in" + width="6.51944in"><metadata + id="metadata220"><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></dc:title></cc:Work></rdf:RDF></metadata><v:documentProperties + v:viewMarkup="false" + v:langID="1033" /><style + id="style4" + 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:#70ad47;stroke:#c7c8c8;stroke-width:0.25} + .st6 {font-size:1em} + .st7 {fill:#d8d8d8;stroke:#c7c8c8;stroke-width:0.25} + .st8 {fill:none;stroke:none;stroke-width:0.25} + .st9 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic} + .st10 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22} + .st11 {fill:none;stroke:#c7c8c8;stroke-width:0.25} + .st12 {fill:#000000;font-family:Calibri;font-size:1.00001em} + .st13 {marker-end:url(#mrkr4-90);marker-start:url(#mrkr4-88);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st14 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.28409090909091} + .st15 {stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1} + .st16 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]></style><defs + id="Markers"><g + id="lend4"><path + id="path8" + style="stroke:none" + d="M 2 1 L 0 0 L 2 -1 L 2 1 " /></g><marker + overflow="visible" + markerUnits="strokeWidth" + orient="auto" + refX="6.68" + v:setback="6.68" + v:arrowSize="2" + v:arrowType="4" + class="st14" + id="mrkr4-88"><use + id="use11" + transform="scale(3.52) " + xlink:href="#lend4" /></marker><marker + overflow="visible" + markerUnits="strokeWidth" + orient="auto" + refX="-7.04" + v:setback="7.04" + v:arrowSize="2" + v:arrowType="4" + class="st14" + id="mrkr4-90"><use + id="use14" + transform="scale(-3.52,-3.52) " + xlink:href="#lend4" /></marker></defs><defs + id="Filters"><filter + id="filter_2"><feGaussianBlur + id="feGaussianBlur18" + stdDeviation="2" /></filter></defs><g + id="g20" + v:groupContext="foregroundPage" + v:index="1" + v:mID="0"><title + id="title22">Page-1</title><v:pageProperties + v:shadowOffsetY="-9" + v:shadowOffsetX="9" + v:drawingUnits="0" + v:pageScale="1" + v:drawingScale="1" /><v:layer + v:index="0" + v:name="Connector" /><g + transform="translate(20.9044,-72.7228)" + v:groupContext="shape" + v:mID="23" + id="shape23-1"><title + id="title25">Rectangle.23</title><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow23-2"><rect + id="rect28" + class="st2" + height="184.5" + width="216.6" + y="110" + x="0" /></g><rect + id="rect30" + class="st3" + height="184.5" + width="216.6" + y="110" + x="0" /></g><g + transform="translate(44.0044,-198.542)" + v:groupContext="shape" + v:mID="49" + id="shape49-6"><title + id="title33">Rectangle.49</title><desc + id="desc35">ETHDEV</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="31.6807" + width="166.5" + cy="278.66" + cx="83.25" /><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow49-7"><rect + id="rect38" + class="st2" + height="31.6807" + width="166.5" + y="262.819" + x="0" /></g><rect + id="rect40" + class="st3" + height="31.6807" + width="166.5" + y="262.819" + x="0" /><text + style="font-size:10.00003242px;font-family:Calibri;fill:#000000" + id="text42" + v:langID="1033" + class="st4" + y="281.66" + x="66.900002">ethdev<v:paragraph + v:horizAlign="1" /><v:tabList /></text> +</g><g + transform="translate(44.0044,-158.042)" + v:groupContext="shape" + v:mID="50" + id="shape50-12"><title + id="title45">Rectangle.50</title><desc + id="desc47">virtio PMD</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="31.6807" + width="166.5" + cy="278.66" + cx="83.25" /><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow50-13"><rect + id="rect50" + class="st2" + height="31.6807" + width="166.5" + y="262.819" + x="0" /></g><rect + id="rect52" + class="st3" + height="31.6807" + width="166.5" + y="262.819" + x="0" /><text + id="text54" + v:langID="1033" + class="st4" + y="281.66" + x="61.58"><v:paragraph + v:horizAlign="1" /><v:tabList />virtio PMD</text> +</g><g + transform="translate(128.904,-86.2228)" + v:groupContext="shape" + v:mID="52" + id="shape52-18"><title + id="title57">Rectangle.52</title><desc + id="desc59">virtio-user (virtual device)</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="63" + width="81.61" + cy="263" + cx="40.8" /><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow52-19"><rect + id="rect62" + class="st2" + height="63" + width="81.6" + y="231.5" + x="0" /></g><rect + id="rect64" + class="st5" + height="63" + width="81.6" + y="231.5" + x="0" /><text + id="text66" + v:langID="1033" + class="st4" + y="248" + x="19.85"><v:paragraph + v:horizAlign="1" /><v:tabList />virtio-user<v:newlineChar /><tspan + id="tspan68" + class="st6" + dy="1.2em" + x="10.52">(</tspan>virtual device)<v:newlineChar /><v:newlineChar /></text> +</g><g + transform="translate(129.44522,-83.349651)" + v:groupContext="shape" + v:mID="53" + id="shape53-25"><title + id="title71">Rectangle.53</title><desc + id="desc73">vhost-user adapter</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="23.5798" + width="68.1" + cy="282.71" + cx="34.05" /><g + style="visibility:visible" + class="st1" + transform="translate(0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow53-26"><rect + style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" + id="rect76" + class="st2" + height="23.5798" + width="68.099998" + y="270.92001" + x="0" /></g><rect + style="fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25" + id="rect78" + class="st3" + height="23.5798" + width="68.099998" + y="265.79211" + x="6.99261" /></g><g + transform="translate(366.563,-5.2228)" + v:groupContext="shape" + v:mID="56" + id="shape56-32"><title + id="title85">Rectangle.38</title><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow56-33"><rect + id="rect88" + class="st2" + ry="11.25" + rx="11.25" + height="22.5" + width="77.5823" + y="272" + x="0" /></g><rect + id="rect90" + class="st7" + ry="11.25" + rx="11.25" + height="22.5" + width="77.5823" + y="272" + x="0" /></g><g + transform="translate(380.904,-5.2228)" + v:groupContext="shape" + v:mID="57" + id="shape57-37"><title + id="title93">Sheet.57</title><desc + id="desc95">NIC</desc><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="22.5" + width="56.25" + cy="283.25" + cx="28.125" /><rect + id="rect97" + class="st8" + height="22.5" + width="56.25" + y="272" + x="0" /><text + id="text99" + v:langID="2052" + class="st9" + y="286.85" + x="19.61"><v:paragraph + v:horizAlign="1" /><v:tabList />NIC</text> +</g><g + transform="translate(43.4044,-86.2228)" + v:groupContext="shape" + v:mID="59" + id="shape59-40"><title + id="title102">Rectangle.59</title><desc + id="desc104">virtio (PCI device)</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="63" + width="77.59" + cy="263" + cx="38.7911" /><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow59-41"><rect + id="rect107" + class="st2" + height="63" + width="77.5823" + y="231.5" + x="0" /></g><rect + id="rect109" + class="st3" + height="63" + width="77.5823" + y="231.5" + x="0" /><text + id="text111" + v:langID="1033" + class="st4" + y="260" + x="28.18"><v:paragraph + v:horizAlign="1" /><v:tabList />virtio<v:newlineChar /><tspan + id="tspan113" + class="st6" + dy="1.2em" + x="15">(</tspan>PCI device)</text> +</g><g + transform="translate(344.904,-77.2228)" + v:groupContext="shape" + v:mID="60" + id="shape60-47"><title + id="title116">Rectangle.60</title><desc + id="desc118">vSwitch or vRouter</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="216" + width="120.9" + cy="186.5" + cx="60.45" /><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow60-48"><rect + id="rect121" + class="st2" + height="216" + width="120.9" + y="78.5" + x="0" /></g><rect + id="rect123" + class="st3" + height="216" + width="120.9" + y="78.5" + x="0" /><text + id="text125" + v:langID="1033" + class="st4" + y="177.5" + x="44.76"><v:paragraph + v:horizAlign="1" /><v:tabList />vSwitch<v:newlineChar /><tspan + id="tspan127" + class="st6" + dy="1.2em" + x="56.07">or<v:newlineChar /></tspan><tspan + id="tspan129" + class="st6" + dy="1.2em" + x="44.31">vRouter</tspan></text> +</g><g + transform="translate(20.9044,-234.723)" + v:groupContext="shape" + v:mID="61" + id="shape61-55"><title + id="title132">Sheet.61</title><desc + id="desc134">DPDK</desc><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="22.5" + width="47.25" + cy="283.25" + cx="23.625" /><rect + id="rect136" + class="st8" + height="22.5" + width="47.25" + y="272" + x="0" /><text + id="text138" + v:langID="1033" + class="st9" + y="286.85" + x="4"><v:paragraph /><v:tabList />DPDK</text> +</g><g + transform="translate(2.9044,-52.4728)" + v:groupContext="shape" + v:mID="62" + id="shape62-58"><title + id="title141">Rectangle.62</title><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><g + class="st1" + transform="matrix(1,0,0,1,0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow62-59"><rect + id="rect144" + class="st10" + height="240.75" + width="252" + y="53.75" + x="0" /></g><rect + id="rect146" + class="st11" + height="240.75" + width="252" + y="53.75" + x="0" /></g><g + transform="translate(2.9044,-261.723)" + v:groupContext="shape" + v:mID="63" + id="shape63-63"><title + id="title149">Sheet.63</title><desc + id="desc151">Contanier/App</desc><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="22.5" + width="90" + cy="283.25" + cx="45" /><rect + id="rect153" + class="st8" + height="22.5" + width="90" + y="272" + x="0" /><text + style="font-style:italic;font-size:12.00012016px;font-family:Calibri;fill:#000000" + id="text155" + v:langID="1033" + class="st9" + y="286.85001" + x="4"><v:paragraph /><v:tabList />Container/App</text> +</g><g + transform="translate(535.904,70.4861) rotate(90)" + v:groupContext="shape" + v:mID="64" + id="shape64-66"><title + id="title158">Rectangle.64</title><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><g + class="st1" + transform="matrix(1,0,0,1,1.97279,-0.345598)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow64-67"><rect + id="rect161" + class="st2" + ry="13.5" + rx="13.5" + height="27" + width="77.5823" + y="267.5" + x="0" /></g><rect + id="rect163" + class="st7" + ry="13.5" + rx="13.5" + height="27" + width="77.5823" + y="267.5" + x="0" /></g><g + transform="translate(625.904,70.4861) rotate(90)" + v:groupContext="shape" + v:mID="65" + id="shape65-71"><title + id="title166">Rectangle.65</title><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><g + class="st1" + transform="matrix(1,0,0,1,1.97279,-0.345598)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow65-72"><rect + id="rect169" + class="st2" + ry="13.5" + rx="13.5" + height="27" + width="77.5823" + y="267.5" + x="0" /></g><rect + id="rect171" + class="st7" + ry="13.5" + rx="13.5" + height="27" + width="77.5823" + y="267.5" + x="0" /></g><g + transform="translate(538.154,81.1522) rotate(90)" + v:groupContext="shape" + v:mID="66" + id="shape66-76"><title + id="title174">Sheet.66</title><desc + id="desc176">virtio</desc><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="22.5" + width="56.25" + cy="283.25" + cx="28.125" /><rect + id="rect178" + class="st8" + height="22.5" + width="56.25" + y="272" + x="0" /><text + id="text180" + v:langID="1033" + class="st12" + y="286.85" + x="15.4"><v:paragraph + v:horizAlign="1" /><v:tabList />virtio</text> +</g><g + transform="translate(628.154,81.1522) rotate(90)" + v:groupContext="shape" + v:mID="67" + id="shape67-79"><title + id="title183">Sheet.67</title><desc + id="desc185">vhost</desc><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="22.5" + width="56.25" + cy="283.25" + cx="28.125" /><rect + id="rect187" + class="st8" + height="22.5" + width="56.25" + y="272" + x="0" /><text + id="text189" + v:langID="1033" + class="st12" + y="286.85" + x="14.74"><v:paragraph + v:horizAlign="1" /><v:tabList />vhost</text> +</g><g + transform="translate(268.404,-176.223)" + v:layerMember="0" + v:groupContext="shape" + v:mID="69" + id="shape69-82"><title + id="title192">Dynamic connector</title><path + id="path194" + class="st13" + d="M6.68 285.5 L7.04 285.5 L55.96 285.5" /></g><g + transform="translate(396.354,-77.2228)" + v:layerMember="0" + v:groupContext="shape" + v:mID="70" + id="shape70-91"><title + id="title197">Dynamic connector.70</title><path + id="path199" + class="st13" + d="M9 301.18 L9 301.54 L9 336.96" /></g><g + transform="translate(205.004,-92.4329)" + v:layerMember="0" + v:groupContext="shape" + v:mID="72" + id="shape72-104"><title + id="title214">Dynamic connector.72</title><path + id="path216" + class="st15" + d="M0 285.5 L101.11 285.5" /></g><g + transform="matrix(1.1344321,0,0,0.98698119,292.92681,-86.402944)" + v:groupContext="shape" + v:mID="71" + id="shape71-98"><title + id="title202">Rectangle.71</title><desc + id="desc204">unix socket file</desc><v:userDefs><v:ud + v:val="VT0(15):26" + v:nameU="visVersion" /></v:userDefs><v:textBlock + v:margins="rect(4,4,4,4)" /><v:textRect + height="23.5798" + width="77.59" + cy="282.71" + cx="38.7911" /><g + style="visibility:visible" + class="st1" + transform="translate(0.345598,1.97279)" + v:shadowType="1" + v:shadowOffsetY="-1.97279" + v:shadowOffsetX="0.345598" + v:groupContext="shadow" + id="shadow71-99"><rect + style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" + id="rect207" + class="st2" + height="23.5798" + width="77.582298" + y="270.92001" + x="0" /></g><rect + style="fill:#ffffff;stroke:#000000;stroke-width:0.25025026;stroke-opacity:1;stroke-miterlimit:3;stroke-dasharray:none" + id="rect209" + class="st3" + height="23.5798" + width="77.582298" + y="270.92001" + x="-0.41093162" /><text + transform="scale(0.86136004,1.1609547)" + style="font-size:10.19067955px;font-family:Calibri;fill:#000000" + id="text211" + v:langID="1033" + class="st4" + y="247.29736" + x="7.1378384"><v:paragraph + v:horizAlign="1" /><v:tabList />unix socket file</text> +</g><text + id="text66-3" + v:langID="1033" + class="st4" + y="192.78035" + x="143.49364" + style="font-size:12px;line-height:125%;font-family:Calibri;fill:#000000"><v:paragraph + v:horizAlign="1" /><v:tabList /><tspan + id="tspan4385" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00000572px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">vhost-user</tspan><v:newlineChar /><v:newlineChar /><v:newlineChar /></text> +<text + id="text66-3-9" + v:langID="1033" + class="st4" + y="201.73016" + x="149.81844" + style="font-size:12px;line-height:125%;font-family:Calibri;fill:#000000"><v:paragraph + v:horizAlign="1" /><v:tabList /><tspan + id="tspan4385-1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00000572px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">adapter</tspan><v:newlineChar /><v:newlineChar /><v:newlineChar /></text> +</g></svg>
\ No newline at end of file diff --git a/src/seastar/dpdk/doc/guides/howto/index.rst b/src/seastar/dpdk/doc/guides/howto/index.rst new file mode 100644 index 00000000..a483444d --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/index.rst @@ -0,0 +1,44 @@ +.. 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. + +HowTo Guides +============ + +.. toctree:: + :maxdepth: 2 + :numbered: + + lm_bond_virtio_sriov + lm_virtio_vhost_user + flow_bifurcation + pvp_reference_benchmark + vfd + virtio_user_for_container_networking + virtio_user_as_exceptional_path diff --git a/src/seastar/dpdk/doc/guides/howto/lm_bond_virtio_sriov.rst b/src/seastar/dpdk/doc/guides/howto/lm_bond_virtio_sriov.rst new file mode 100644 index 00000000..40dd2cb2 --- /dev/null +++ b/src/seastar/dpdk/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 net_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/usertools/dpdk-devbind.py --status + + rmmod virtio-pci ixgbevf + + modprobe uio + insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko + + /root/dpdk/usertools/dpdk-devbind.py -b igb_uio 0000:00:03.0 + /root/dpdk/usertools/dpdk-devbind.py -b igb_uio 0000:00:04.0 + + /root/dpdk/usertools/dpdk-devbind.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 \ + -l 0-3 -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/src/seastar/dpdk/doc/guides/howto/lm_virtio_vhost_user.rst b/src/seastar/dpdk/doc/guides/howto/lm_virtio_vhost_user.rst new file mode 100644 index 00000000..9402ed8d --- /dev/null +++ b/src/seastar/dpdk/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/usertools + ./dpdk-devbind.py -b igb_uio 0000:02:00.0 + +For Niantic NIC. + +.. code-block:: console + + cd /root/dpdk/usertools + ./dpdk-devbind.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/usertools + ./dpdk-devbind.py -b igb_uio 0000:03:00.0 + +For Niantic NIC. + +.. code-block:: console + + cd /root/dpdk/usertools + ./dpdk-devbind.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/usertools/dpdk-devbind.py --status + + rmmod virtio-pci + + modprobe uio + insmod /root/dpdk/x86_64-default-linuxapp-gcc/kmod/igb_uio.ko + + /root/dpdk/usertools/dpdk-devbind.py -b igb_uio 0000:00:03.0 + /root/dpdk/usertools/dpdk-devbind.py -b igb_uio 0000:00:04.0 + + /root/dpdk/usertools/dpdk-devbind.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 \ + -l 0-5 -n 4 --socket-mem 350 -- --burst=64 --i --disable-hw-vlan-filter diff --git a/src/seastar/dpdk/doc/guides/howto/pvp_reference_benchmark.rst b/src/seastar/dpdk/doc/guides/howto/pvp_reference_benchmark.rst new file mode 100644 index 00000000..228b4a25 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/pvp_reference_benchmark.rst @@ -0,0 +1,398 @@ +.. BSD LICENSE + Copyright(c) 2016 Red Hat, Inc. 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. + + +PVP reference benchmark setup using testpmd +=========================================== + +This guide lists the steps required to setup a PVP benchmark using testpmd as +a simple forwarder between NICs and Vhost interfaces. The goal of this setup +is to have a reference PVP benchmark without using external vSwitches (OVS, +VPP, ...) to make it easier to obtain reproducible results and to facilitate +continuous integration testing. + +The guide covers two ways of launching the VM, either by directly calling the +QEMU command line, or by relying on libvirt. It has been tested with DPDK +v16.11 using RHEL7 for both host and guest. + + +Setup overview +-------------- + +.. _figure_pvp_2nics: + +.. figure:: img/pvp_2nics.* + + PVP setup using 2 NICs + +In this diagram, each red arrow represents one logical core. This use-case +requires 6 dedicated logical cores. A forwarding configuration with a single +NIC is also possible, requiring 3 logical cores. + + +Host setup +---------- + +In this setup, we isolate 6 cores (from CPU2 to CPU7) on the same NUMA +node. Two cores are assigned to the VM vCPUs running testpmd and four are +assigned to testpmd on the host. + + +Host tuning +~~~~~~~~~~~ + +#. On BIOS, disable turbo-boost and hyper-threads. + +#. Append these options to Kernel command line: + + .. code-block:: console + + intel_pstate=disable mce=ignore_ce default_hugepagesz=1G hugepagesz=1G hugepages=6 isolcpus=2-7 rcu_nocbs=2-7 nohz_full=2-7 iommu=pt intel_iommu=on + +#. Disable hyper-threads at runtime if necessary or if BIOS is not accessible: + + .. code-block:: console + + cat /sys/devices/system/cpu/cpu*[0-9]/topology/thread_siblings_list \ + | sort | uniq \ + | awk -F, '{system("echo 0 > /sys/devices/system/cpu/cpu"$2"/online")}' + +#. Disable NMIs: + + .. code-block:: console + + echo 0 > /proc/sys/kernel/nmi_watchdog + +#. Exclude isolated CPUs from the writeback cpumask: + + .. code-block:: console + + echo ffffff03 > /sys/bus/workqueue/devices/writeback/cpumask + +#. Isolate CPUs from IRQs: + + .. code-block:: console + + clear_mask=0xfc #Isolate CPU2 to CPU7 from IRQs + for i in /proc/irq/*/smp_affinity + do + echo "obase=16;$(( 0x$(cat $i) & ~$clear_mask ))" | bc > $i + done + + +Qemu build +~~~~~~~~~~ + +Build Qemu: + + .. code-block:: console + + git clone git://git.qemu.org/qemu.git + cd qemu + mkdir bin + cd bin + ../configure --target-list=x86_64-softmmu + make + + +DPDK build +~~~~~~~~~~ + +Build DPDK: + + .. code-block:: console + + git clone git://dpdk.org/dpdk + cd dpdk + export RTE_SDK=$PWD + make install T=x86_64-native-linuxapp-gcc DESTDIR=install + + +Testpmd launch +~~~~~~~~~~~~~~ + +#. Assign NICs to DPDK: + + .. code-block:: console + + modprobe vfio-pci + $RTE_SDK/install/sbin/dpdk-devbind -b vfio-pci 0000:11:00.0 0000:11:00.1 + + .. Note:: + + The Sandy Bridge family seems to have some IOMMU limitations giving poor + performance results. To achieve good performance on these machines + consider using UIO instead. + +#. Launch the testpmd application: + + .. code-block:: console + + $RTE_SDK/install/bin/testpmd -l 0,2,3,4,5 --socket-mem=1024 -n 4 \ + --vdev 'net_vhost0,iface=/tmp/vhost-user1' \ + --vdev 'net_vhost1,iface=/tmp/vhost-user2' -- \ + --portmask=f --disable-hw-vlan -i --rxq=1 --txq=1 \ + --nb-cores=4 --forward-mode=io + + With this command, isolated CPUs 2 to 5 will be used as lcores for PMD threads. + +#. In testpmd interactive mode, set the portlist to obtain the correct port + chaining: + + .. code-block:: console + + set portlist 0,2,1,3 + start + + +VM launch +~~~~~~~~~ + +The VM may be launched either by calling QEMU directly, or by using libvirt. + +Qemu way +^^^^^^^^ + +Launch QEMU with two Virtio-net devices paired to the vhost-user sockets +created by testpmd. Below example uses default Virtio-net options, but options +may be specified, for example to disable mergeable buffers or indirect +descriptors. + + .. code-block:: console + + <QEMU path>/bin/x86_64-softmmu/qemu-system-x86_64 \ + -enable-kvm -cpu host -m 3072 -smp 3 \ + -chardev socket,id=char0,path=/tmp/vhost-user1 \ + -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \ + -device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:01,addr=0x10 \ + -chardev socket,id=char1,path=/tmp/vhost-user2 \ + -netdev type=vhost-user,id=mynet2,chardev=char1,vhostforce \ + -device virtio-net-pci,netdev=mynet2,mac=52:54:00:02:d9:02,addr=0x11 \ + -object memory-backend-file,id=mem,size=3072M,mem-path=/dev/hugepages,share=on \ + -numa node,memdev=mem -mem-prealloc \ + -net user,hostfwd=tcp::1002$1-:22 -net nic \ + -qmp unix:/tmp/qmp.socket,server,nowait \ + -monitor stdio <vm_image>.qcow2 + +You can use this `qmp-vcpu-pin <https://patchwork.kernel.org/patch/9361617/>`_ +script to pin vCPUs. + +It can be used as follows, for example to pin 3 vCPUs to CPUs 1, 6 and 7, +where isolated CPUs 6 and 7 will be used as lcores for Virtio PMDs: + + .. code-block:: console + + export PYTHONPATH=$PYTHONPATH:<QEMU path>/scripts/qmp + ./qmp-vcpu-pin -s /tmp/qmp.socket 1 6 7 + +Libvirt way +^^^^^^^^^^^ + +Some initial steps are required for libvirt to be able to connect to testpmd's +sockets. + +First, SELinux policy needs to be set to permissive, since testpmd is +generally run as root (note, as reboot is required): + + .. code-block:: console + + cat /etc/selinux/config + + # This file controls the state of SELinux on the system. + # SELINUX= can take one of these three values: + # enforcing - SELinux security policy is enforced. + # permissive - SELinux prints warnings instead of enforcing. + # disabled - No SELinux policy is loaded. + SELINUX=permissive + + # SELINUXTYPE= can take one of three two values: + # targeted - Targeted processes are protected, + # minimum - Modification of targeted policy. + # Only selected processes are protected. + # mls - Multi Level Security protection. + SELINUXTYPE=targeted + + +Also, Qemu needs to be run as root, which has to be specified in +``/etc/libvirt/qemu.conf``: + + .. code-block:: console + + user = "root" + +Once the domain created, the following snippet is an extract of he most +important information (hugepages, vCPU pinning, Virtio PCI devices): + + .. code-block:: xml + + <domain type='kvm'> + <memory unit='KiB'>3145728</memory> + <currentMemory unit='KiB'>3145728</currentMemory> + <memoryBacking> + <hugepages> + <page size='1048576' unit='KiB' nodeset='0'/> + </hugepages> + <locked/> + </memoryBacking> + <vcpu placement='static'>3</vcpu> + <cputune> + <vcpupin vcpu='0' cpuset='1'/> + <vcpupin vcpu='1' cpuset='6'/> + <vcpupin vcpu='2' cpuset='7'/> + <emulatorpin cpuset='0'/> + </cputune> + <numatune> + <memory mode='strict' nodeset='0'/> + </numatune> + <os> + <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='host-passthrough'> + <topology sockets='1' cores='3' threads='1'/> + <numa> + <cell id='0' cpus='0-2' memory='3145728' unit='KiB' memAccess='shared'/> + </numa> + </cpu> + <devices> + <interface type='vhostuser'> + <mac address='56:48:4f:53:54:01'/> + <source type='unix' path='/tmp/vhost-user1' mode='client'/> + <model type='virtio'/> + <driver name='vhost' rx_queue_size='256' /> + <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> + </interface> + <interface type='vhostuser'> + <mac address='56:48:4f:53:54:02'/> + <source type='unix' path='/tmp/vhost-user2' mode='client'/> + <model type='virtio'/> + <driver name='vhost' rx_queue_size='256' /> + <address type='pci' domain='0x0000' bus='0x00' slot='0x11' function='0x0'/> + </interface> + </devices> + </domain> + + +Guest setup +----------- + + +Guest tuning +~~~~~~~~~~~~ + +#. Append these options to the Kernel command line: + + .. code-block:: console + + default_hugepagesz=1G hugepagesz=1G hugepages=1 intel_iommu=on iommu=pt isolcpus=1,2 rcu_nocbs=1,2 nohz_full=1,2 + +#. Disable NMIs: + + .. code-block:: console + + echo 0 > /proc/sys/kernel/nmi_watchdog + +#. Exclude isolated CPU1 and CPU2 from the writeback cpumask: + + .. code-block:: console + + echo 1 > /sys/bus/workqueue/devices/writeback/cpumask + +#. Isolate CPUs from IRQs: + + .. code-block:: console + + clear_mask=0x6 #Isolate CPU1 and CPU2 from IRQs + for i in /proc/irq/*/smp_affinity + do + echo "obase=16;$(( 0x$(cat $i) & ~$clear_mask ))" | bc > $i + done + + +DPDK build +~~~~~~~~~~ + +Build DPDK: + + .. code-block:: console + + git clone git://dpdk.org/dpdk + cd dpdk + export RTE_SDK=$PWD + make install T=x86_64-native-linuxapp-gcc DESTDIR=install + + +Testpmd launch +~~~~~~~~~~~~~~ + +Probe vfio module without iommu: + + .. code-block:: console + + modprobe -r vfio_iommu_type1 + modprobe -r vfio + modprobe vfio enable_unsafe_noiommu_mode=1 + cat /sys/module/vfio/parameters/enable_unsafe_noiommu_mode + modprobe vfio-pci + +Bind the virtio-net devices to DPDK: + + .. code-block:: console + + $RTE_SDK/usertools/dpdk-devbind.py -b vfio-pci 0000:00:10.0 0000:00:11.0 + +Start testpmd: + + .. code-block:: console + + $RTE_SDK/install/bin/testpmd -l 0,1,2 --socket-mem 1024 -n 4 \ + --proc-type auto --file-prefix pg -- \ + --portmask=3 --forward-mode=macswap --port-topology=chained \ + --disable-hw-vlan --disable-rss -i --rxq=1 --txq=1 \ + --rxd=256 --txd=256 --nb-cores=2 --auto-start + +Results template +---------------- + +Below template should be used when sharing results: + + .. code-block:: none + + Traffic Generator: <Test equipment (e.g. IXIA, Moongen, ...)> + Acceptable Loss: <n>% + Validation run time: <n>min + Host DPDK version/commit: <version, SHA-1> + Guest DPDK version/commit: <version, SHA-1> + Patches applied: <link to patchwork> + QEMU version/commit: <version> + Virtio features: <features (e.g. mrg_rxbuf='off', leave empty if default)> + CPU: <CPU model>, <CPU frequency> + NIC: <NIC model> + Result: <n> Mpps diff --git a/src/seastar/dpdk/doc/guides/howto/vfd.rst b/src/seastar/dpdk/doc/guides/howto/vfd.rst new file mode 100644 index 00000000..6f083b87 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/vfd.rst @@ -0,0 +1,407 @@ +.. BSD LICENSE + Copyright(c) 2017 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. + + +VF daemon (VFd) +=============== + +VFd (the VF daemon) is a mechanism which can be used to configure features on +a VF (SR-IOV Virtual Function) without direct access to the PF (SR-IOV +Physical Function). VFd is an *EXPERIMENTAL* feature which can only be used in +the scenario of DPDK PF with a DPDK VF. If the PF port is driven by the Linux +kernel driver then the VFd feature will not work. Currently VFd is only +supported by the ixgbe and i40e drivers. + +In general VF features cannot be configured directly by an end user +application since they are under the control of the PF. The normal approach to +configuring a feature on a VF is that an application would call the APIs +provided by the VF driver. If the required feature cannot be configured by the +VF directly (the most common case) the VF sends a message to the PF through +the mailbox on ixgbe and i40e. This means that the availability of the feature +depends on whether the appropriate mailbox messages are defined. + +DPDK leverages the mailbox interface defined by the Linux kernel driver so +that compatibility with the kernel driver can be guaranteed. The downside of +this approach is that the availability of messages supported by the kernel +become a limitation when the user wants to configure features on the VF. + +VFd is a new method of controlling the features on a VF. The VF driver doesn't +talk directly to the PF driver when configuring a feature on the VF. When a VF +application (i.e., an application using the VF ports) wants to enable a VF +feature, it can send a message to the PF application (i.e., the application +using the PF port, which can be the same as the VF application). The PF +application will configure the feature for the VF. Obviously, the PF +application can also configure the VF features without a request from the VF +application. + +.. _VF_daemon_overview: + +.. figure:: img/vf_daemon_overview.* + + VF daemon (VFd) Overview + +Compared with the traditional approach the VFd moves the negotiation between +VF and PF from the driver level to application level. So the application +should define how the negotiation between the VF and PF works, or even if the +control should be limited to the PF. + +It is the application's responsibility to use VFd. Consider for example a KVM +migration, the VF application may transfer from one VM to another. It is +recommended in this case that the PF control the VF features without +participation from the VF. Then the VF application has no capability to +configure the features. So the user doesn't need to define the interface +between the VF application and the PF application. The service provider should +take the control of all the features. + +The following sections describe the VFd functionality. + +.. Note:: + + Although VFd is supported by both ixgbe and i40e, please be aware that + since the hardware capability is different, the functions supported by + ixgbe and i40e are not the same. + + +Preparing +--------- + +VFd only can be used in the scenario of DPDK PF + DPDK VF. Users should bind +the PF port to ``igb_uio``, then create the VFs based on the DPDK PF host. + +The typical procedure to achieve this is as follows: + +#. Boot the system without iommu, or with ``iommu=pt``. + +#. Bind the PF port to ``igb_uio``, for example:: + + dpdk-devbind.py -b igb_uio 01:00.0 + +#. Create a Virtual Function:: + + echo 1 > /sys/bus/pci/devices/0000:01:00.0/max_vfs + +#. Start a VM with the new VF port bypassed to it. + +#. Run a DPDK application on the PF in the host:: + + testpmd -l 0-7 -n 4 -- -i --txqflags=0 + +#. Bind the VF port to ``igb_uio`` in the VM:: + + dpdk-devbind.py -b igb_uio 03:00.0 + +#. Run a DPDK application on the VF in the VM:: + + testpmd -l 0-7 -n 4 -- -i --txqflags=0 + + +Common functions of IXGBE and I40E +---------------------------------- + +The following sections show how to enable PF/VF functionality based on the +above testpmd setup. + + +TX loopback +~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set TX loopback:: + + set tx loopback 0 on|off + +This sets whether the PF port and all the VF ports that belong to it are +allowed to send the packets to other virtual ports. + +Although it is a VFd function, it is the global setting for the whole +physical port. When using this function, the PF and all the VFs TX loopback +will be enabled/disabled. + + +VF MAC address setting +~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the MAC address for a VF port:: + + set vf mac addr 0 0 A0:36:9F:7B:C3:51 + +This testpmd runtime command will change the MAC address of the VF port to +this new address. If any other addresses are set before, they will be +overwritten. + + +VF MAC anti-spoofing +~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable the MAC +anti-spoofing for a VF port:: + + set vf mac antispoof 0 0 on|off + +When enabling the MAC anti-spoofing, the port will not forward packets whose +source MAC address is not the same as the port. + + +VF VLAN anti-spoofing +~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable the VLAN +anti-spoofing for a VF port:: + + set vf vlan antispoof 0 0 on|off + +When enabling the VLAN anti-spoofing, the port will not send packets whose +VLAN ID does not belong to VLAN IDs that this port can receive. + + +VF VLAN insertion +~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the VLAN insertion for a VF +port:: + + set vf vlan insert 0 0 1 + +When using this testpmd runtime command, an assigned VLAN ID can be inserted +to the transmitted packets by the hardware. + +The assigned VLAN ID can be 0. It means disabling the VLAN insertion. + + +VF VLAN stripping +~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable the VLAN stripping +for a VF port:: + + set vf vlan stripq 0 0 on|off + +This testpmd runtime command is used to enable/disable the RX VLAN stripping +for a specific VF port. + + +VF VLAN filtering +~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the VLAN filtering for a VF +port:: + + rx_vlan add 1 port 0 vf 1 + rx_vlan rm 1 port 0 vf 1 + +These two testpmd runtime commands can be used to add or remove the VLAN +filter for several VF ports. When the VLAN filters are added only the packets +that have the assigned VLAN IDs can be received. Other packets will be dropped +by hardware. + + +The IXGBE specific VFd functions +-------------------------------- + +The functions in this section are specific to the ixgbe driver. + + +All queues drop +~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable the all queues +drop:: + + set all queues drop on|off + +This is a global setting for the PF and all the VF ports of the physical port. + +Enabling the ``all queues drop`` feature means that when there is no available +descriptor for the received packets they are dropped. The ``all queues drop`` +feature should be enabled in SR-IOV mode to avoid one queue blocking others. + + +VF packet drop +~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable the packet drop for +a specific VF:: + + set vf split drop 0 0 on|off + +This is a similar function as ``all queues drop``. The difference is that this +function is per VF setting and the previous function is a global setting. + + +VF rate limit +~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to all queues' rate limit for a +specific VF:: + + set port 0 vf 0 rate 10 queue_mask 1 + +This is a function to set the rate limit for all the queues in the +``queue_mask`` bitmap. It is not used to set the summary of the rate +limit. The rate limit of every queue will be set equally to the assigned rate +limit. + + +VF RX enabling +~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable packet receiving for +a specific VF:: + + set port 0 vf 0 rx on|off + +This function can be used to stop/start packet receiving on a VF. + + +VF TX enabling +~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable packet transmitting +for a specific VF:: + + set port 0 vf 0 tx on|off + +This function can be used to stop/start packet transmitting on a VF. + + +VF RX mode setting +~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the RX mode for a specific VF:: + + set port 0 vf 0 rxmode AUPE|ROPE|BAM|MPE on|off + +This function can be used to enable/disable some RX modes on the VF, including: + +* If it accept untagged packets. +* If it accepts packets matching the MAC filters. +* If it accept MAC broadcast packets, +* If it enables MAC multicast promiscuous mode. + + +The I40E specific VFd functions +------------------------------- + +The functions in this section are specific to the i40e driver. + + +VF statistics +~~~~~~~~~~~~~ + +This provides an API to get the a specific VF's statistic from PF. + + +VF statistics resetting +~~~~~~~~~~~~~~~~~~~~~~~ + +This provides an API to rest the a specific VF's statistic from PF. + + +VF link status change notification +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This provide an API to let a specific VF know if the physical link status +changed. + +Normally if a VF received this notification, the driver should notify the +application to reset the VF port. + + +VF MAC broadcast setting +~~~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable MAC broadcast packet +receiving for a specific VF:: + + set vf broadcast 0 0 on|off + + +VF MAC multicast promiscuous mode +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable MAC multicast +promiscuous mode for a specific VF:: + + set vf allmulti 0 0 on|off + + +VF MAC unicast promiscuous mode +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable MAC unicast +promiscuous mode for a specific VF:: + + set vf promisc 0 0 on|off + + +VF max bandwidth +~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the TX maximum bandwidth for a +specific VF:: + + set vf tx max-bandwidth 0 0 2000 + +The maximum bandwidth is an absolute value in Mbps. + + +VF TC bandwidth allocation +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the TCs (traffic class) TX +bandwidth allocation for a specific VF:: + + set vf tc tx min-bandwidth 0 0 (20,20,20,40) + +The allocated bandwidth should be set for all the TCs. The allocated bandwidth +is a relative value as a percentage. The sum of all the bandwidth should +be 100. + + +VF TC max bandwidth +~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to set the TCs TX maximum bandwidth +for a specific VF:: + + set vf tc tx max-bandwidth 0 0 0 10000 + +The maximum bandwidth is an absolute value in Mbps. + + +TC strict priority scheduling +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Run a testpmd runtime command on the PF to enable/disable several TCs TX +strict priority scheduling:: + + set tx strict-link-priority 0 0x3 + +The 0 in the TC bitmap means disabling the strict priority scheduling for this +TC. To enable use a value of 1. diff --git a/src/seastar/dpdk/doc/guides/howto/virtio_user_as_exceptional_path.rst b/src/seastar/dpdk/doc/guides/howto/virtio_user_as_exceptional_path.rst new file mode 100644 index 00000000..0bbcd3fd --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/virtio_user_as_exceptional_path.rst @@ -0,0 +1,142 @@ +.. 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. + +.. _virtio_user_as_excpetional_path: + +Virtio_user as Exceptional Path +=============================== + +The virtual device, virtio-user, was originally introduced with vhost-user +backend, as a high performance solution for IPC (Inter-Process Communication) +and user space container networking. + +Virtio_user with vhost-kernel backend is a solution for exceptional path, +such as KNI which exchanges packets with kernel networking stack. This +solution is very promising in: + +* Maintenance + + All kernel modules needed by this solution, vhost and vhost-net (kernel), + are upstreamed and extensively used kernel module. + +* Features + + vhost-net is born to be a networking solution, which has lots of networking + related featuers, like multi queue, tso, multi-seg mbuf, etc. + +* Performance + + similar to KNI, this solution would use one or more kthreads to + send/receive packets from user space DPDK applications, which has little + impact on user space polling thread (except that it might enter into kernel + space to wake up those kthreads if necessary). + +The overview of an application using virtio-user as exceptional path is shown +in :numref:`figure_virtio_user_as_exceptional_path`. + +.. _figure_virtio_user_as_exceptional_path: + +.. figure:: img/virtio_user_as_exceptional_path.* + + Overview of a DPDK app using virtio-user as excpetional path + + +Sample Usage +------------ + +As a prerequisite, the vhost/vhost-net kernel CONFIG should be chosen before +compiling the kernel and those kernel modules should be inserted. + +#. Compile DPDK and bind a physical NIC to igb_uio/uio_pci_generic/vfio-pci. + + This physical NIC is for communicating with outside. + +#. Run testpmd. + + .. code-block:: console + + $(testpmd) -l 2-3 -n 4 \ + --vdev=virtio_user0,path=/dev/vhost-net,queue_size=1024 \ + -- -i --txqflags=0x0 --disable-hw-vlan --enable-lro \ + --enable-rx-cksum --rxd=1024 --txd=1024 + + This command runs testpmd with two ports, one physical NIC to communicate + with outside, and one virtio-user to communicate with kernel. + +* ``--enable-lro`` + + This is used to negotiate VIRTIO_NET_F_GUEST_TSO4 and + VIRTIO_NET_F_GUEST_TSO6 feature so that large packets from kernel can be + transmitted DPDK application and further TSOed by physical NIC. + +* ``--enable-rx-cksum`` + + This is used to negotiate VIRTIO_NET_F_GUEST_CSUM so that packets from + kernel can be deemed as valid Rx checksumed. + +* ``queue_size`` + + 256 by default. To avoid shortage of descriptors, we can increase it to 1024. + +* ``queues`` + + Number of multi-queues. Each qeueue will be served by a kthread. For example: + + .. code-block:: console + + $(testpmd) -l 2-3 -n 4 \ + --vdev=virtio_user0,path=/dev/vhost-net,queues=2,queue_size=1024 \ + -- -i --txqflags=0x0 --disable-hw-vlan --enable-lro \ + --enable-rx-cksum --txq=2 --rxq=2 --rxd=1024 \ + --txd=1024 + +#. Start testpmd: + + .. code-block:: console + + (testpmd) start + +#. Configure IP address and start tap: + + .. code-block:: console + + ifconfig tap0 1.1.1.1/24 up + +.. note:: + + The tap device will be named tap0, tap1, etc, by kernel. + +Then, all traffic from physical NIC can be forwarded into kernel stack, and all +traffic on the tap0 can be sent out from physical NIC. + +Limitations +----------- + +This solution is only available on Linux systems. diff --git a/src/seastar/dpdk/doc/guides/howto/virtio_user_for_container_networking.rst b/src/seastar/dpdk/doc/guides/howto/virtio_user_for_container_networking.rst new file mode 100644 index 00000000..f71d0718 --- /dev/null +++ b/src/seastar/dpdk/doc/guides/howto/virtio_user_for_container_networking.rst @@ -0,0 +1,144 @@ +.. 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. + +.. _virtio_user_for_container_networking: + +Virtio_user for Container Networking +==================================== + +Container becomes more and more popular for strengths, like low overhead, fast +boot-up time, and easy to deploy, etc. How to use DPDK to accelerate container +networking becomes a common question for users. There are two use models of +running DPDK inside containers, as shown in +:numref:`figure_use_models_for_running_dpdk_in_containers`. + +.. _figure_use_models_for_running_dpdk_in_containers: + +.. figure:: img/use_models_for_running_dpdk_in_containers.* + + Use models of running DPDK inside container + +This page will only cover aggregation model. + +Overview +-------- + +The virtual device, virtio-user, with unmodified vhost-user backend, is designed +for high performance user space container networking or inter-process +communication (IPC). + +The overview of accelerating container networking by virtio-user is shown +in :numref:`figure_virtio_user_for_container_networking`. + +.. _figure_virtio_user_for_container_networking: + +.. figure:: img/virtio_user_for_container_networking.* + + Overview of accelerating container networking by virtio-user + +Different virtio PCI devices we usually use as a para-virtualization I/O in the +context of QEMU/VM, the basic idea here is to present a kind of virtual devices, +which can be attached and initialized by DPDK. The device emulation layer by +QEMU in VM's context is saved by just registering a new kind of virtual device +in DPDK's ether layer. And to minimize the change, we reuse already-existing +virtio PMD code (driver/net/virtio/). + +Virtio, in essence, is a shm-based solution to transmit/receive packets. How is +memory shared? In VM's case, qemu always shares the whole physical layout of VM +to vhost backend. But it's not feasible for a container, as a process, to share +all virtual memory regions to backend. So only those virtual memory regions +(aka, hugepages initialized in DPDK) are sent to backend. It restricts that only +addresses in these areas can be used to transmit or receive packets. + +Sample Usage +------------ + +Here we use Docker as container engine. It also applies to LXC, Rocket with +some minor changes. + +#. Compile DPDK. + + .. code-block:: console + + make install RTE_SDK=`pwd` T=x86_64-native-linuxapp-gcc + +#. Write a Dockerfile like below. + + .. code-block:: console + + cat <<EOT >> Dockerfile + FROM ubuntu:latest + WORKDIR /usr/src/dpdk + COPY . /usr/src/dpdk + ENV PATH "$PATH:/usr/src/dpdk/x86_64-native-linuxapp-gcc/app/" + EOT + +#. Build a Docker image. + + .. code-block:: console + + docker build -t dpdk-app-testpmd . + +#. Start a testpmd on the host with a vhost-user port. + + .. code-block:: console + + $(testpmd) -l 0-1 -n 4 --socket-mem 1024,1024 \ + --vdev 'eth_vhost0,iface=/tmp/sock0' \ + --file-prefix=host --no-pci -- -i + +#. Start a container instance with a virtio-user port. + + .. code-block:: console + + docker run -i -t -v /tmp/sock0:/var/run/usvhost \ + -v /dev/hugepages:/dev/hugepages \ + dpdk-app-testpmd testpmd -l 6-7 -n 4 -m 1024 --no-pci \ + --vdev=virtio_user0,path=/var/run/usvhost \ + --file-prefix=container \ + -- -i --txqflags=0xf00 --disable-hw-vlan + +Note: If we run all above setup on the host, it's a shm-based IPC. + +Limitations +----------- + +We have below limitations in this solution: + * Cannot work with --huge-unlink option. As we need to reopen the hugepage + file to share with vhost backend. + * Cannot work with --no-huge option. Currently, DPDK uses anonymous mapping + under this option which cannot be reopened to share with vhost backend. + * Cannot work when there are more than VHOST_MEMORY_MAX_NREGIONS(8) hugepages. + In another word, do not use 2MB hugepage so far. + * Applications should not use file name like HUGEFILE_FMT ("%smap_%d"). That + will bring confusion when sharing hugepage files with backend by name. + * Root privilege is a must. DPDK resolves physical addresses of hugepages + which seems not necessary, and some discussions are going on to remove this + restriction. |