All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
@ 2016-06-23  3:02 Jingjing Wu
  2016-06-23 12:58 ` Thomas Monjalon
  2016-07-14  8:04 ` [PATCH v3] doc: flow bifurcation guide on Linux Jingjing Wu
  0 siblings, 2 replies; 12+ messages in thread
From: Jingjing Wu @ 2016-06-23  3:02 UTC (permalink / raw)
  To: john.mcnamara; +Cc: dev, jingjing.wu, yong.liu, helin.zhang

Bifurcated driver is a mechanism which depends the advanced
Ethernet device to split traffic between queues. It provides
the capability to let the kernel driver and DPDK driver co-exist
and take their advantage.
It is achieved by using SRIOV and NIC's advanced filtering. This
patch describes it and adds the user guide on ixgbe NICs.

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
---
 doc/guides/nics/img/bifurcated_driver_overview.svg | 544 +++++++++++++++++++++
 doc/guides/nics/img/ixgbe_bifu_queue_idx.svg       | 101 ++++
 doc/guides/nics/ixgbe.rst                          | 119 +++++
 3 files changed, 764 insertions(+)
 create mode 100644 doc/guides/nics/img/bifurcated_driver_overview.svg
 create mode 100644 doc/guides/nics/img/ixgbe_bifu_queue_idx.svg

diff --git a/doc/guides/nics/img/bifurcated_driver_overview.svg b/doc/guides/nics/img/bifurcated_driver_overview.svg
new file mode 100644
index 0000000..4fa2764
--- /dev/null
+++ b/doc/guides/nics/img/bifurcated_driver_overview.svg
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export bifurcated_driver_overview.svg Page-1 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="6.71874in"
+   height="4.83839in"
+   viewBox="0 0 483.75 348.364"
+   xml:space="preserve"
+   color-interpolation-filters="sRGB"
+   class="st28"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="bifurcated_driver_overview.svg"><metadata
+     id="metadata240"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1600"
+     inkscape:window-height="837"
+     id="namedview238"
+     showgrid="false"
+     inkscape:zoom="1.0517845"
+     inkscape:cx="215.35622"
+     inkscape:cy="200.74714"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g44" /><style
+     type="text/css"
+     id="style4"><![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.16666em;font-weight:bold;opacity:0.219608}
+		.st4 {fill:none;stroke:#c7c8c8;stroke-width:0.5}
+		.st5 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+		.st6 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.5em;opacity:0.219608}
+		.st7 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st8 {fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75}
+		.st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st10 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st11 {fill:#c00000;stroke:#c7c8c8;stroke-width:0.25}
+		.st12 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
+		.st13 {font-size:1em}
+		.st14 {fill:#ff0000;font-size:1em;font-weight:bold}
+		.st15 {fill:#2e75b5;stroke:#c7c8c8;stroke-width:0.25}
+		.st16 {fill:url(#grad4-50);stroke:#c7c8c8;stroke-width:0.25}
+		.st17 {fill:#feffff;font-family:Calibri;font-size:0.666664em}
+		.st18 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+		.st20 {marker-end:url(#mrkr13-84);marker-start:url(#mrkr13-82);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st21 {fill:#c00000;fill-opacity:1;stroke:#c00000;stroke-opacity:1;stroke-width:0.28409090909091}
+		.st22 {marker-end:url(#mrkr4-90);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st23 {marker-start:url(#mrkr13-106);stroke:#538135;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st24 {fill:#538135;fill-opacity:1;stroke:#538135;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st25 {marker-start:url(#mrkr13-112);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st26 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st27 {fill:none;stroke:none;stroke-width:0.25}
+		.st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]></style><defs
+     id="Patterns_And_Gradients"><radialGradient
+       id="grad4-50"
+       cx="0.5"
+       cy="0"
+       r="1.1"><stop
+         offset="0"
+         stop-color="#a8d08d"
+         stop-opacity="1"
+         id="stop8" /><stop
+         offset="0.24"
+         stop-color="#bedcaa"
+         stop-opacity="1"
+         id="stop10" /><stop
+         offset="0.59"
+         stop-color="#3374af"
+         stop-opacity="1"
+         id="stop12" /><stop
+         offset="0.75"
+         stop-color="#41719c"
+         stop-opacity="1"
+         id="stop14" /><stop
+         offset="1"
+         stop-color="#c5e0b3"
+         stop-opacity="1"
+         id="stop16" /></radialGradient></defs><defs
+     id="Markers"><g
+       id="lend13"><path
+         d="M 3 1 L 0 0 L 3 -1 L 3 1 "
+         style="stroke:none"
+         id="path20" /></g><marker
+       id="mrkr13-82"
+       class="st21"
+       refX="10.2"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(3.52) "
+         id="use23" /></marker><marker
+       id="mrkr13-84"
+       class="st21"
+       refX="-10.56"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(-3.52,-3.52) "
+         id="use26" /></marker><g
+       id="lend4"><path
+         d="M 2 1 L 0 0 L 2 -1 L 2 1 "
+         style="stroke:none"
+         id="path29" /></g><marker
+       id="mrkr4-90"
+       class="st21"
+       refX="-7.04"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend4"
+         transform="scale(-3.52,-3.52) "
+         id="use32" /></marker><marker
+       id="mrkr13-106"
+       class="st24"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use35" /></marker><marker
+       id="mrkr13-112"
+       class="st26"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use38" /></marker></defs><defs
+     id="Filters"><filter
+       id="filter_2"><feGaussianBlur
+         stdDeviation="2"
+         id="feGaussianBlur42" /></filter></defs><g
+     id="g44"><title
+       id="title46">Page-1</title><g
+       id="shape85-1"
+       transform="translate(133.887,-26.1478)"><title
+         id="title49">Sheet.85</title><desc
+         id="desc51">NIC</desc><g
+         id="shadow85-2"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="255.497"
+           width="346.142"
+           height="92.8673"
+           class="st2"
+           id="rect54" /><text
+           x="162.89"
+           y="349.33"
+           class="st3"
+           id="text56">NIC</text>
+</g><rect
+         x="0"
+         y="255.497"
+         width="346.142"
+         height="92.8673"
+         class="st4"
+         id="rect58"
+         style="stroke-width:0.50000076;stroke-miterlimit:3;stroke-dasharray:none" /><text
+         x="162.89"
+         y="349.33"
+         class="st5"
+         id="text60">NIC</text>
+</g><g
+       id="shape20-9"
+       transform="translate(3.0289,-127.458)"><title
+         id="title63">Rounded Rectangle.20</title><desc
+         id="desc65">LINUX</desc><g
+         id="shadow20-10"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180         0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0         0 30.39 348.36 Z"
+           class="st2"
+           id="path68" /><text
+           x="255.32"
+           y="238.8"
+           class="st6"
+           id="text70">LINUX</text>
+</g><path
+         d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0        0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39        348.36 Z"
+         class="st4"
+         id="path72" /><text
+         x="255.32"
+         y="238.8"
+         class="st7"
+         id="text74">LINUX</text>
+</g><g
+       id="shape8-17"
+       transform="translate(95.8962,-140.079)"><title
+         id="title77">Rounded Rectangle.8</title><desc
+         id="desc79">Kernel pf driver</desc><path
+         d="M18.57 348.36 L167.16 348.36 A18.5731 18.5731 -180 0 0 185.73 329.79 L185.73 303.58 A18.5731 18.5731 -180 0        0 167.16 285 L18.57 285 A18.5731 18.5731 -180 0 0 0 303.58 L0 329.79 A18.5731 18.5731 -180 0 0 18.57 348.36        Z"
+         class="st8"
+         id="path81" /><text
+         x="118.71"
+         y="319.68"
+         class="st9"
+         id="text83">Kernel pf driver  </text>
+</g><g
+       id="shape1-20"
+       transform="translate(103.263,-156.88)"><title
+         id="title86">Rounded Rectangle</title><desc
+         id="desc88">Filters support traffic steering to VF</desc><g
+         id="shadow1-21"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180         0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0         0 10.55 348.36 Z"
+           class="st10"
+           id="path91" /></g><path
+         d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0        94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55        348.36 Z"
+         class="st11"
+         id="path93" /><text
+         x="10.03"
+         y="328.39"
+         class="st12"
+         id="text95"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4475">Filters support traffic</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="11.048484"
+         y="340.46152"
+         class="st12"
+         id="text95-1"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4477"
+           x="11.048484"
+           y="340.46152">steering to VF</tspan></text>
+</g><g
+       id="shape3-27"
+       transform="translate(192.985,-73.088)"><title
+         id="title100">Rectangle.3</title><desc
+         id="desc102">Rx Queues (0-N) PF</desc><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st8"
+         id="rect104" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text106"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4512">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.187859"
+         y="333.70471"
+         class="st9"
+         id="text106-2"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4514"
+           x="23.187859"
+           y="333.70471">( 0-N )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="27.490538"
+         y="345.52356"
+         class="st9"
+         id="text106-9"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4516"
+           x="27.490538"
+           y="345.52356"> PF</tspan></text>
+</g><g
+       id="shape4-32"
+       transform="translate(344.949,-73.088)"><title
+         id="title113">Rectangle.4</title><desc
+         id="desc115">Rx Queues (0-M) VF(vf 0)</desc><g
+         id="shadow4-33"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="314.425"
+           width="75.9823"
+           height="33.9388"
+           class="st10"
+           id="rect118" /></g><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st15"
+         id="rect120" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text122"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4571">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="21.777092"
+         y="333.69595"
+         class="st9"
+         id="text122-8"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4569"
+           x="21.777092"
+           y="333.69595">( 0-M )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="21.79059"
+         y="343.91479"
+         class="st9"
+         id="text122-0"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4573"
+           x="21.79059"
+           y="343.91479">VF(vf0)</tspan></text>
+</g><g
+       id="shape5-44"
+       transform="translate(154.994,-43.0328)"><title
+         id="title137">Rectangle.5</title><desc
+         id="desc139">filters</desc><g
+         id="shadow5-45"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="331.479"
+           width="303.929"
+           height="16.885"
+           class="st10"
+           id="rect142" /></g><rect
+         x="0"
+         y="331.479"
+         width="303.929"
+         height="16.885"
+         class="st16"
+         id="rect144" /><text
+         x="140.28"
+         y="342.92"
+         class="st9"
+         id="text146">filters</text>
+</g><g
+       id="shape6-52"
+       transform="translate(95.8962,-224.377)"><title
+         id="title149">Rounded Rectangle.6</title><desc
+         id="desc151">Tools to program filters</desc><path
+         d="m 7.6,347.29783 60.78,0 a 7.59811,7.59811 0 0 0 7.6,-7.59 l 0,-18.58 a 7.59811,7.59811 0 0 0 -7.6,-7.6 l -60.78,0 a 7.59811,7.59811 0 0 0 -7.6,7.6 l 0,18.58 a 7.59811,7.59811 0 0 0 7.6,7.59 z"
+         class="st8"
+         id="path153"
+         inkscape:connector-curvature="0"
+         style="fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75" /><text
+         x="21.74"
+         y="328.48001"
+         class="st9"
+         id="text155"
+         style="font-size:10.00003242px;font-family:Calibri;fill:#000000">Tools to <tspan
+   x="7.6900001"
+   class="st13"
+   id="tspan157"
+   style="font-size:10.00003242px" /></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.40806"
+         y="340.79666"
+         class="st9"
+         id="text155-1"
+         sodipodi:linespacing="125%"><tspan
+           x="9.358057"
+           class="st13"
+           id="tspan157-9"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">program filters</tspan></text>
+</g><g
+       id="shape22-56"
+       transform="translate(11.4714,-156.88)"><title
+         id="title160">2-D word balloon</title><desc
+         id="desc162">Director flows to queue index in specified VF</desc><text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.0559683"
+         y="346.97244"
+         class="st17"
+         id="text169-3-4"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4471"
+           x="8.0559683"
+           y="346.97244">inspecified VF</tspan></text>
+<g
+         id="shadow22-57"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M0 327.15 L0 314.43 L28.49 314.43 L37.99 314.43 L47.49 314.43 L75.98 314.43 L75.98 327.15 L91.79 331.39         L75.98 335.64 L75.98 348.36 L47.49 348.36 L37.99 348.36 L28.49 348.36 L0 348.36 L0 335.64 L0 331.39         L0 327.15 Z"
+           class="st10"
+           id="path165" /></g><path
+         d="m 0.53783484,327.68783 0,-12.72 28.49000016,0 9.5,0 9.5,0 28.49,0 0,12.72 15.81,4.24 -15.81,4.25 0,12.72 -28.49,0 -9.5,0 -9.5,0 -28.49000016,0 0,-12.72 0,-4.25 0,-4.24 z"
+         class="st11"
+         id="path167"
+         inkscape:connector-curvature="0"
+         style="fill:#c00000;stroke:#c7c8c8;stroke-width:0.25" /><text
+         x="7.5599966"
+         y="324.19"
+         class="st17"
+         id="text169"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4446"
+           x="7.5599966"
+           y="324.19">Director flows</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.1099777"
+         y="334.57529"
+         class="st17"
+         id="text169-3"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4469"
+           x="8.1099777"
+           y="334.57529">to queue index</tspan></text>
+<text
+         x="8.5350533"
+         y="345.4624"
+         class="st17"
+         id="text169-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.00001221px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:#feffff;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4479">in specified VF</tspan></text>
+</g><g
+       id="shape24-64"
+       transform="translate(323.843,-285.05)"><title
+         id="title176">Rounded Rectangle.24</title><desc
+         id="desc178">DPDK</desc><g
+         id="shadow24-65"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0         0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29         348.36 Z"
+           class="st10"
+           id="path181" /></g><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st18"
+         id="path183" /><text
+         x="30.57"
+         y="321.61"
+         class="st19"
+         id="text185">DPDK</text>
+</g><g
+       id="shape25-70"
+       transform="translate(192.985,-285.05)"><title
+         id="title188">Rounded Rectangle.25</title><desc
+         id="desc190">Socket</desc><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st8"
+         id="path192" /><text
+         x="27.56"
+         y="321.61"
+         class="st19"
+         id="text194">Socket</text>
+</g><g
+       id="shape44-73"
+       transform="translate(154.994,569.271) rotate(180)"><title
+         id="title197">Simple Arrow.44</title><g
+         id="shadow44-74"
+         transform="matrix(1,0,0,1,-0.345598,-1.97279)"
+         class="st1" /></g><g
+       id="shape52-75"
+       transform="translate(154.994,-127.458)"><title
+         id="title201">Single arrowhead</title></g><g
+       id="shape70-76"
+       transform="translate(221.976,-107.027)"><title
+         id="title204">Dynamic connector.70</title><path
+         d="M9 338.16 L9 337.8 L9 325.87"
+         class="st20"
+         id="path206" /></g><g
+       id="shape81-85"
+       transform="translate(124.887,-224.377)"><title
+         id="title209">Dynamic connector.81</title><path
+         d="M9 348.36 L9 362.26"
+         class="st22"
+         id="path211" /></g><g
+       id="shape83-91"
+       transform="translate(240.398,-57.5029)"><title
+         id="title214">Dynamic connector.83</title><path
+         d="M-8.58 345.95 L-8.97 339.8"
+         class="st22"
+         id="path216" /></g><g
+       id="shape84-96"
+       transform="translate(373.94,-57.5029)"><title
+         id="title219">Dynamic connector.84</title><path
+         d="M9 345.95 L9 339.82"
+         class="st22"
+         id="path221" /></g><g
+       id="shape98-101"
+       transform="translate(539.29,6.22333) rotate(79.2209)"><title
+         id="title224">Sheet.98</title><path
+         d="M11.39 310.28 L11.72 310.42 C54.22 328.18 100.77 337.63 149.11 345.35 C162.41 347.48 175.84 349.47 187.65 347.74        C201.36 345.74 212.87 338.71 218.42 327.59 C222.66 319.09 223.42 308.2 229.69 303.23 C239.2 295.7 261.37        301.76 275.96 305.26"
+         class="st23"
+         id="path226" /></g><g
+       id="shape109-107"
+       transform="translate(712.298,124.855) rotate(100.2)"><title
+         id="title229">Sheet.109</title><path
+         d="M12.03 344.31 L12.38 344.21 C55.98 332.05 99.42 314.86 144.33 309.38 C167.01 306.62 190.06 306.85 204.84 318.11        C212.98 324.32 218.61 333.88 226.49 339.83 C238.38 348.81 255.38 349.56 275.91 347.51"
+         class="st25"
+         id="path231" /></g><g
+       id="shape110-113"
+       transform="translate(108.779,-175.962)"><title
+         id="title234">Sheet.110</title><rect
+         x="0"
+         y="341.614"
+         width="94.5"
+         height="6.75"
+         class="st27"
+         id="rect236" /></g></g></svg>
\ No newline at end of file
diff --git a/doc/guides/nics/img/ixgbe_bifu_queue_idx.svg b/doc/guides/nics/img/ixgbe_bifu_queue_idx.svg
new file mode 100644
index 0000000..f7e2bd8
--- /dev/null
+++ b/doc/guides/nics/img/ixgbe_bifu_queue_idx.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export ixgbe_bifu_queue_idx.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59375in" height="0.535375in"
+		viewBox="0 0 330.75 38.547" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+	<v:documentProperties v:langID="1033" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25}
+		.st4 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st5 {fill:#c5e0b3;stroke:#c7c8c8;stroke-width:0.25}
+		.st6 {fill:#f4b183;stroke:#c7c8c8;stroke-width:0.25}
+		.st7 {fill:none;stroke:none;stroke-width:0.25}
+		.st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Filters">
+		<filter id="filter_2">
+			<feGaussianBlur stdDeviation="2"/>
+		</filter>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(3.0294,-5.34781)">
+			<title>Rectangle</title>
+			<desc>0x000000</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="52.1695" cy="30.3097" width="104.34" height="16.4746"/>
+			<g id="shadow1-2" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st3"/>
+			<text x="32.27" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0x000000</text>		</g>
+		<g id="shape2-7" v:mID="2" v:groupContext="shape" transform="translate(107.368,-5.34781)">
+			<title>Rectangle.2</title>
+			<desc>VF ID + 1</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="30.2034" cy="30.3097" width="60.41" height="16.4746"/>
+			<g id="shadow2-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st5"/>
+			<text x="12.32" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF ID + 1</text>		</g>
+		<g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(167.775,-5.34781)">
+			<title>Rectangle.3</title>
+			<desc>Queue Index</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="79.6271" cy="30.3097" width="159.26" height="16.4746"/>
+			<g id="shadow3-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st6"/>
+			<text x="53.74" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue Index</text>		</g>
+		<g id="shape4-19" v:mID="4" v:groupContext="shape" transform="translate(305.063,-21.8224)">
+			<title>Sheet.4</title>
+			<desc>0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="8.45" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text>		</g>
+		<g id="shape6-22" v:mID="6" v:groupContext="shape" transform="translate(165.029,-21.8224)">
+			<title>Sheet.6</title>
+			<desc>31</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>31</text>		</g>
+		<g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(104.623,-21.8224)">
+			<title>Sheet.7</title>
+			<desc>39</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>39</text>		</g>
+		<g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(3.0294,-21.8224)">
+			<title>Sheet.8</title>
+			<desc>63</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>63</text>		</g>
+	</g>
+</svg>
diff --git a/doc/guides/nics/ixgbe.rst b/doc/guides/nics/ixgbe.rst
index 3dc6b00..74ec4b7 100644
--- a/doc/guides/nics/ixgbe.rst
+++ b/doc/guides/nics/ixgbe.rst
@@ -224,3 +224,122 @@ be calculated as follows:
   max_read_interval = ~4 mins 48 sec.
 
 In order to ensure valid results, it is recommended to poll every 4 minutes.
+
+.. _bifurcated_driver:
+
+Bifurcated driver guide
+-----------------------
+
+Bifurcated driver is a mechanism which depends the advanced Ethernet device to
+split traffic between Linux user space and kernel space. Because it is hardware
+assisted design, this approach can provide the line rate processing capability.
+Other than KNI, the SW is just required to device configuration, no need to
+take care of the packet movement during the traffic split. This can get more
+performance with less CPU overhead.
+
+The Bifurcated driver take advantage of Ethernet device feature to split the
+incoming data traffic to user space application (Such as DPDK application)
+and/or kernel space program (Linux kernel stack). It can direct some traffic
+(e.g data plane traffic) to DPDK, while direct some other traffic (e.g 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 split as
+multiple virtual functions. Each virtual function has separated queues with
+physical function. Traffic with a virtual function’s destination MAC address
+from network adapter will be directed to it. In a sense, SR-IOV has the
+capability on queue division.
+
+Packet classification filtering is the hardware capability available on most
+network adapters. Filters can be configured to direct specific flows to a given
+receive queue by hardware. Different NIC may have different filter types to
+direct flow to a Virtual Function or a queue belong to it.
+
+Linux network can receive the specific traffic through kernel driver, while
+DPDK can receive the specific traffic bypassing the Linux kernel by using
+drivers like VFIO or DPDK igb_uio module.
+
+.. _figure_bifurcated_driver_overview:
+
+.. figure:: img/bifurcated_driver_overview.*
+
+   Bifurcated Driver Overview
+
+Use Bifurcated driver on IXGBE in Linux
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+On Intel® 82599 10 Gigabit Ethernet Controller series NICs, Bifurcated driver
+can be achieved by SR-IOV and flow director technologies. So the traffic can
+be directed to queues by flow director capability, typically by matching 5-tuple
+of UDP/TCP packets.
+
+The step procedure is as following:
+
+#.  Boot 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_PF: [queue index]
+
+        *   $queue_index_in_VFn: Bits 39:32 of the variable defines VF id + 1; lower 32 bits indicates the queue index of VF.
+
+            *   $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 and insert igb_uio or probe vfio-pci kernel modules as normal.
+
+#.  Bind virtual function:
+
+    .. code-block:: console
+
+        modprobe vfio-pci
+        dpdk_nic_bind.py -b vfio-pci 01:10.0
+        dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#.  run DPDK application on VFs:
+
+    .. code-block:: console
+
+        testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+In this example, traffic matching the rules will go through VF by matching the
+filter rule. All other traffic which mismatching the rules, will go through
+the default queue or scaling on queues in PF. That is to say UDP packets with
+those IP source and destination addresses will go through the DPDK. 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 Bifurcated driver is implemented in Linux kernel and ixgbe kernel driver by 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/>`_
+
+    *   Ethtool's version used in this example is 3.18.
\ No newline at end of file
-- 
2.4.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
  2016-06-23  3:02 [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic Jingjing Wu
@ 2016-06-23 12:58 ` Thomas Monjalon
  2016-07-08  8:42   ` Wu, Jingjing
  2016-07-14  8:04 ` [PATCH v3] doc: flow bifurcation guide on Linux Jingjing Wu
  1 sibling, 1 reply; 12+ messages in thread
From: Thomas Monjalon @ 2016-06-23 12:58 UTC (permalink / raw)
  To: Jingjing Wu; +Cc: dev, john.mcnamara, yong.liu, helin.zhang

Hi,

Thank you for providing more doc.
I am just not convinced it is the right place
and it must be discussed.
Some questions below to help deciding where it must be.

2016-06-23 11:02, Jingjing Wu:
> Bifurcated driver is a mechanism which depends the advanced
> Ethernet device to split traffic between queues. It provides
> the capability to let the kernel driver and DPDK driver co-exist
> and take their advantage.

The name "bifurcated driver" was used for a real driver proposal
in Linux. I don't think it applies here.

> It is achieved by using SRIOV and NIC's advanced filtering. This
> patch describes it and adds the user guide on ixgbe NICs.

It is not a DPDK feature, just a use case.
What do we learn about DPDK?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
  2016-06-23 12:58 ` Thomas Monjalon
@ 2016-07-08  8:42   ` Wu, Jingjing
  2016-07-08  9:14     ` Thomas Monjalon
  0 siblings, 1 reply; 12+ messages in thread
From: Wu, Jingjing @ 2016-07-08  8:42 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, Mcnamara, John, Liu, Yong, Zhang, Helin

Hi, Thomas

> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Thursday, June 23, 2016 8:59 PM
> To: Wu, Jingjing <jingjing.wu@intel.com>
> Cc: dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>; Liu, Yong
> <yong.liu@intel.com>; Zhang, Helin <helin.zhang@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
> 
> Hi,
> 
> Thank you for providing more doc.
> I am just not convinced it is the right place
> and it must be discussed.
> Some questions below to help deciding where it must be.
> 
> 2016-06-23 11:02, Jingjing Wu:
> > Bifurcated driver is a mechanism which depends the advanced
> > Ethernet device to split traffic between queues. It provides
> > the capability to let the kernel driver and DPDK driver co-exist
> > and take their advantage.
> 
> The name "bifurcated driver" was used for a real driver proposal
> in Linux. I don't think it applies here.
> 
> > It is achieved by using SRIOV and NIC's advanced filtering. This
> > patch describes it and adds the user guide on ixgbe NICs.
> 
> It is not a DPDK feature, just a use case.
> What do we learn about DPDK?

Yes, it is an feature in Linux driver. And the typical use case how DPDK co-work with Linux networking.
I think it will be a good reference. When I preparde this patch, I'm also doubt where to put, and the behavior
may be NIC specific, so I added it here.

Any other suggestion?

Thanks
Jingjing

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
  2016-07-08  8:42   ` Wu, Jingjing
@ 2016-07-08  9:14     ` Thomas Monjalon
  2016-07-08  9:24       ` Mcnamara, John
  2016-07-11  5:50       ` Wu, Jingjing
  0 siblings, 2 replies; 12+ messages in thread
From: Thomas Monjalon @ 2016-07-08  9:14 UTC (permalink / raw)
  To: Wu, Jingjing
  Cc: dev, Mcnamara, John, Liu, Yong, Zhang, Helin, bernard.iremonger

2016-07-08 08:42, Wu, Jingjing:
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> > Thank you for providing more doc.
> > I am just not convinced it is the right place
> > and it must be discussed.
> > Some questions below to help deciding where it must be.
> > 
> > 2016-06-23 11:02, Jingjing Wu:
> > > Bifurcated driver is a mechanism which depends the advanced
> > > Ethernet device to split traffic between queues. It provides
> > > the capability to let the kernel driver and DPDK driver co-exist
> > > and take their advantage.
> > 
> > The name "bifurcated driver" was used for a real driver proposal
> > in Linux. I don't think it applies here.

Where does the "bifurcated" name come from?
Could we rename it to "flow bifurcation" or "partial kernel bypass"?

> > > It is achieved by using SRIOV and NIC's advanced filtering. This
> > > patch describes it and adds the user guide on ixgbe NICs.
> > 
> > It is not a DPDK feature, just a use case.
> > What do we learn about DPDK?
> 
> Yes, it is an feature in Linux driver. And the typical use case how DPDK co-work with Linux networking.
> I think it will be a good reference. When I preparde this patch, I'm also doubt where to put, and the behavior
> may be NIC specific, so I added it here.
> 
> Any other suggestion?

Bernard is creating an howto section.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
  2016-07-08  9:14     ` Thomas Monjalon
@ 2016-07-08  9:24       ` Mcnamara, John
  2016-07-11  5:50       ` Wu, Jingjing
  1 sibling, 0 replies; 12+ messages in thread
From: Mcnamara, John @ 2016-07-08  9:24 UTC (permalink / raw)
  To: Thomas Monjalon, Wu, Jingjing
  Cc: dev, Liu, Yong, Zhang, Helin, Iremonger, Bernard

> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Friday, July 8, 2016 10:14 AM
> To: Wu, Jingjing <jingjing.wu@intel.com>
> Cc: dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>; Liu, Yong
> <yong.liu@intel.com>; Zhang, Helin <helin.zhang@intel.com>; Iremonger,
> Bernard <bernard.iremonger@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 1/2] doc: add bifurcated driver guide on
> ixgbe nic
> 
> >
> > Yes, it is an feature in Linux driver. And the typical use case how DPDK
> co-work with Linux networking.
> > I think it will be a good reference. When I preparde this patch, I'm
> > also doubt where to put, and the behavior may be NIC specific, so I
> added it here.
> >
> > Any other suggestion?
> 
> Bernard is creating an howto section.


I think a howto section would be good for this too.

John

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic
  2016-07-08  9:14     ` Thomas Monjalon
  2016-07-08  9:24       ` Mcnamara, John
@ 2016-07-11  5:50       ` Wu, Jingjing
  1 sibling, 0 replies; 12+ messages in thread
From: Wu, Jingjing @ 2016-07-11  5:50 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Mcnamara, John, Liu, Yong, Zhang, Helin, Iremonger, Bernard



> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Friday, July 8, 2016 5:14 PM
> To: Wu, Jingjing
> Cc: dev@dpdk.org; Mcnamara, John; Liu, Yong; Zhang, Helin; Iremonger,
> Bernard
> Subject: Re: [dpdk-dev] [PATCH v2 1/2] doc: add bifurcated driver guide on
> ixgbe nic
> 
> 2016-07-08 08:42, Wu, Jingjing:
> > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> > > Thank you for providing more doc.
> > > I am just not convinced it is the right place and it must be
> > > discussed.
> > > Some questions below to help deciding where it must be.
> > >
> > > 2016-06-23 11:02, Jingjing Wu:
> > > > Bifurcated driver is a mechanism which depends the advanced
> > > > Ethernet device to split traffic between queues. It provides the
> > > > capability to let the kernel driver and DPDK driver co-exist and
> > > > take their advantage.
> > >
> > > The name "bifurcated driver" was used for a real driver proposal in
> > > Linux. I don't think it applies here.
> 
> Where does the "bifurcated" name come from?
> Could we rename it to "flow bifurcation" or "partial kernel bypass"?
> 
It is our internal name. It is also called as queue split between drivers.
And I like the "flow bifurcation" one, let me rename it. Thanks for the suggestion.

> > > > It is achieved by using SRIOV and NIC's advanced filtering. This
> > > > patch describes it and adds the user guide on ixgbe NICs.
> > >
> > > It is not a DPDK feature, just a use case.
> > > What do we learn about DPDK?
> >
> > Yes, it is an feature in Linux driver. And the typical use case how DPDK co-
> work with Linux networking.
> > I think it will be a good reference. When I preparde this patch, I'm
> > also doubt where to put, and the behavior may be NIC specific, so I added
> it here.
> >
> > Any other suggestion?
> 
> Bernard is creating an howto section.
Yes, just saw it. Will re-organize it to howto.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3] doc: flow bifurcation guide on Linux
  2016-06-23  3:02 [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic Jingjing Wu
  2016-06-23 12:58 ` Thomas Monjalon
@ 2016-07-14  8:04 ` Jingjing Wu
  2016-07-17 19:31   ` Mcnamara, John
  2016-07-19  3:31   ` [PATCH v4] " Jingjing Wu
  1 sibling, 2 replies; 12+ messages in thread
From: Jingjing Wu @ 2016-07-14  8:04 UTC (permalink / raw)
  To: john.mcnamara; +Cc: dev, jingjing.wu, yong.liu, helin.zhang

Flow bifurcation is a mechanism which depends the advanced
Ethernet device to split traffic between queues. It provides
the capability to let the kernel driver and DPDK driver co-exist
and take their advantages.
It is achieved by using SRIOV and NIC's advanced filtering. This
patch describes it and adds the user guide on ixgbe and i40 NICs.

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
---
v3 changes:
 - rename bifurcated driver to flow bifurcation
 - move the doc from nics to howto

This patch is based on patch set "[PATCH v3 0/2] doc: live migration procedure"
   http://www.dpdk.org/ml/archives/dev/2016-July/043476.html

 doc/guides/howto/flow_bifurcation.rst              | 288 +++++++++++
 doc/guides/howto/img/flow_bifurcation_overview.svg | 544 +++++++++++++++++++++
 doc/guides/howto/img/ixgbe_bifu_queue_idx.svg      | 101 ++++
 doc/guides/howto/index.rst                         |   1 +
 4 files changed, 934 insertions(+)
 create mode 100644 doc/guides/howto/flow_bifurcation.rst
 create mode 100644 doc/guides/howto/img/flow_bifurcation_overview.svg
 create mode 100644 doc/guides/howto/img/ixgbe_bifu_queue_idx.svg

diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst
new file mode 100644
index 0000000..5e10952
--- /dev/null
+++ b/doc/guides/howto/flow_bifurcation.rst
@@ -0,0 +1,288 @@
+..  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 guide
+======================
+
+Flow bifurcation is a mechanism which depends the advanced Ethernet device to
+split traffic between Linux user space and kernel space. Because it is hardware
+assisted design, this approach can provide the line rate processing capability.
+Other than KNI, the SW is just required to device configuration, no need to
+take care of the packet movement during the traffic split. This can get more
+performance with less CPU overhead.
+
+The Flow bifurcation takes advantage of Ethernet device feature to split the
+incoming data traffic to user space application (Such as DPDK application)
+and/or kernel space program (Linux kernel stack). It can direct some traffic
+(e.g data plane traffic) to DPDK, while direct some other traffic (e.g 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 split as
+multiple virtual functions. Each virtual function has separated queues with
+physical function. Traffic with a virtual function's destination MAC address
+from network adapter will be directed to it. In a sense, SR-IOV has the
+capability on queue division.
+
+Packet classification filtering is the hardware capability available on most
+network adapters. Filters can be configured to direct specific flows to a given
+receive queue by hardware. Different NIC may have different filter types to
+direct flow to a Virtual Function or a queue belong to it.
+
+Linux network can receive the specific traffic through kernel driver, while
+DPDK can receive the specific traffic bypassing the Linux kernel by using
+drivers like VFIO or DPDK igb_uio module.
+
+.. _figure_flow_bifurcation_overview:
+
+.. figure:: img/flow_bifurcation_overview.*
+
+   Flow Bifucation Overview
+
+
+Use Flow bifurcation on IXGBE in Linux
+--------------------------------------
+
+On Intel 82599 10 Gigabit Ethernet Controller series NICs, Flow bifurcation
+can be achieved by SR-IOV and flow director technologies. So the traffic can
+be directed to queues by flow director capability, typically by matching 5-tuple
+of UDP/TCP packets.
+
+The step procedure is as following:
+
+#.  Boot 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_PF: [queue index]
+
+        *   $queue_index_in_VFn: Bits 39:32 of the variable defines VF id + 1; lower 32 bits indicates the queue index of VF.
+
+            *   $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 and insert igb_uio or probe vfio-pci kernel modules as normal.
+
+#.  Bind virtual function:
+
+    .. code-block:: console
+
+        modprobe vfio-pci
+        dpdk_nic_bind.py -b vfio-pci 01:10.0
+        dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#.  run DPDK application on VFs:
+
+    .. code-block:: console
+
+        testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+In this example, traffic matching the rules will go through VF by matching the
+filter rule. All other traffic which mismatching the rules, will go through
+the default queue or scaling on queues in PF. That is to say UDP packets with
+those IP source and destination addresses will go through the DPDK. 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 by 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/>`_
+
+    *   Ethtool's version used in this example is 3.18.
+
+
+Use 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. So the traffic can be directed to queues by
+cloud filter and L3 VEB switch's matching rule.
+
+*   L3 VEB filter for non-tunnelled packets. It can direct a packet just by the
+    Destination IP address to a queue in a VF.
+
+*   Cloud filters for tunnelled packets have following types.
+
+    *   Inner mac
+
+    *   Inner mac + VNI
+
+    *   Outer mac + Inner mac + VNI
+
+    *   Inner mac + Inner vlan + VNI
+
+    *   Inner mac + Inner vlan
+
+The step procedure is as following:
+
+#.  Boot system without iommu, or with ``iommu=pt``.
+
+#.  Build and insert 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 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 <dev_name>
+        ifconfig vxlan0 up
+        ip -d li show vxlan0
+
+    .. note::
+
+        Print ``add vxlan port 8472, index 0 success`` can be found in system log.
+
+#.  Enable and set flow filters:
+
+    *   L3 VEB filter, route whose dest IP = 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, route whose inner dest mac = 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, route whose inner dest mac = 0:0:0:0:9:0 and VNI = 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, route whose outer mac= 68:05:ca:24:03:8b, inner dest mac
+        = c2:1a:e1:53:bc:57, and VNI = 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, route whose inner dest mac = 00:00:00:00:20:00,
+        inner vlan = 10, and VNI = 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, route whose inner dest mac = 00:00:00:00:20:00,
+        and inner vlan = 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, filter on. For all these examples dst and src mac
+            address fields are overloaded dst == outer, src == inner.
+
+        *   Filter will be directing a packet who matching the rule to a vf id
+            specified in the lower 32 bit of user-def to 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 and insert igb_uio or probe vfio-pci kernel modules as normal.
+
+#.  Bind virtual function:
+
+    .. code-block:: console
+
+        modprobe vfio-pci
+        dpdk_nic_bind.py -b vfio-pci 01:10.0
+        dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#.  run DPDK application on VFs:
+
+    .. code-block:: console
+
+        testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+.. note::
+
+    *   The above steps work on the i40e Linux kernel driver v1.5.16.
+
+    *   Ethtool's version used in this example is 3.18. And the mask ``ff`` means not involved, while ``00`` or don't set mask means involved.
+
+    *   For more details of the configuration, can refer to the `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
diff --git a/doc/guides/howto/img/flow_bifurcation_overview.svg b/doc/guides/howto/img/flow_bifurcation_overview.svg
new file mode 100644
index 0000000..4fa2764
--- /dev/null
+++ b/doc/guides/howto/img/flow_bifurcation_overview.svg
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export bifurcated_driver_overview.svg Page-1 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="6.71874in"
+   height="4.83839in"
+   viewBox="0 0 483.75 348.364"
+   xml:space="preserve"
+   color-interpolation-filters="sRGB"
+   class="st28"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="bifurcated_driver_overview.svg"><metadata
+     id="metadata240"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1600"
+     inkscape:window-height="837"
+     id="namedview238"
+     showgrid="false"
+     inkscape:zoom="1.0517845"
+     inkscape:cx="215.35622"
+     inkscape:cy="200.74714"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g44" /><style
+     type="text/css"
+     id="style4"><![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.16666em;font-weight:bold;opacity:0.219608}
+		.st4 {fill:none;stroke:#c7c8c8;stroke-width:0.5}
+		.st5 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+		.st6 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.5em;opacity:0.219608}
+		.st7 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st8 {fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75}
+		.st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st10 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st11 {fill:#c00000;stroke:#c7c8c8;stroke-width:0.25}
+		.st12 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
+		.st13 {font-size:1em}
+		.st14 {fill:#ff0000;font-size:1em;font-weight:bold}
+		.st15 {fill:#2e75b5;stroke:#c7c8c8;stroke-width:0.25}
+		.st16 {fill:url(#grad4-50);stroke:#c7c8c8;stroke-width:0.25}
+		.st17 {fill:#feffff;font-family:Calibri;font-size:0.666664em}
+		.st18 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+		.st20 {marker-end:url(#mrkr13-84);marker-start:url(#mrkr13-82);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st21 {fill:#c00000;fill-opacity:1;stroke:#c00000;stroke-opacity:1;stroke-width:0.28409090909091}
+		.st22 {marker-end:url(#mrkr4-90);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st23 {marker-start:url(#mrkr13-106);stroke:#538135;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st24 {fill:#538135;fill-opacity:1;stroke:#538135;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st25 {marker-start:url(#mrkr13-112);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st26 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st27 {fill:none;stroke:none;stroke-width:0.25}
+		.st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]></style><defs
+     id="Patterns_And_Gradients"><radialGradient
+       id="grad4-50"
+       cx="0.5"
+       cy="0"
+       r="1.1"><stop
+         offset="0"
+         stop-color="#a8d08d"
+         stop-opacity="1"
+         id="stop8" /><stop
+         offset="0.24"
+         stop-color="#bedcaa"
+         stop-opacity="1"
+         id="stop10" /><stop
+         offset="0.59"
+         stop-color="#3374af"
+         stop-opacity="1"
+         id="stop12" /><stop
+         offset="0.75"
+         stop-color="#41719c"
+         stop-opacity="1"
+         id="stop14" /><stop
+         offset="1"
+         stop-color="#c5e0b3"
+         stop-opacity="1"
+         id="stop16" /></radialGradient></defs><defs
+     id="Markers"><g
+       id="lend13"><path
+         d="M 3 1 L 0 0 L 3 -1 L 3 1 "
+         style="stroke:none"
+         id="path20" /></g><marker
+       id="mrkr13-82"
+       class="st21"
+       refX="10.2"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(3.52) "
+         id="use23" /></marker><marker
+       id="mrkr13-84"
+       class="st21"
+       refX="-10.56"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(-3.52,-3.52) "
+         id="use26" /></marker><g
+       id="lend4"><path
+         d="M 2 1 L 0 0 L 2 -1 L 2 1 "
+         style="stroke:none"
+         id="path29" /></g><marker
+       id="mrkr4-90"
+       class="st21"
+       refX="-7.04"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend4"
+         transform="scale(-3.52,-3.52) "
+         id="use32" /></marker><marker
+       id="mrkr13-106"
+       class="st24"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use35" /></marker><marker
+       id="mrkr13-112"
+       class="st26"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use38" /></marker></defs><defs
+     id="Filters"><filter
+       id="filter_2"><feGaussianBlur
+         stdDeviation="2"
+         id="feGaussianBlur42" /></filter></defs><g
+     id="g44"><title
+       id="title46">Page-1</title><g
+       id="shape85-1"
+       transform="translate(133.887,-26.1478)"><title
+         id="title49">Sheet.85</title><desc
+         id="desc51">NIC</desc><g
+         id="shadow85-2"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="255.497"
+           width="346.142"
+           height="92.8673"
+           class="st2"
+           id="rect54" /><text
+           x="162.89"
+           y="349.33"
+           class="st3"
+           id="text56">NIC</text>
+</g><rect
+         x="0"
+         y="255.497"
+         width="346.142"
+         height="92.8673"
+         class="st4"
+         id="rect58"
+         style="stroke-width:0.50000076;stroke-miterlimit:3;stroke-dasharray:none" /><text
+         x="162.89"
+         y="349.33"
+         class="st5"
+         id="text60">NIC</text>
+</g><g
+       id="shape20-9"
+       transform="translate(3.0289,-127.458)"><title
+         id="title63">Rounded Rectangle.20</title><desc
+         id="desc65">LINUX</desc><g
+         id="shadow20-10"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180         0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0         0 30.39 348.36 Z"
+           class="st2"
+           id="path68" /><text
+           x="255.32"
+           y="238.8"
+           class="st6"
+           id="text70">LINUX</text>
+</g><path
+         d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0        0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39        348.36 Z"
+         class="st4"
+         id="path72" /><text
+         x="255.32"
+         y="238.8"
+         class="st7"
+         id="text74">LINUX</text>
+</g><g
+       id="shape8-17"
+       transform="translate(95.8962,-140.079)"><title
+         id="title77">Rounded Rectangle.8</title><desc
+         id="desc79">Kernel pf driver</desc><path
+         d="M18.57 348.36 L167.16 348.36 A18.5731 18.5731 -180 0 0 185.73 329.79 L185.73 303.58 A18.5731 18.5731 -180 0        0 167.16 285 L18.57 285 A18.5731 18.5731 -180 0 0 0 303.58 L0 329.79 A18.5731 18.5731 -180 0 0 18.57 348.36        Z"
+         class="st8"
+         id="path81" /><text
+         x="118.71"
+         y="319.68"
+         class="st9"
+         id="text83">Kernel pf driver  </text>
+</g><g
+       id="shape1-20"
+       transform="translate(103.263,-156.88)"><title
+         id="title86">Rounded Rectangle</title><desc
+         id="desc88">Filters support traffic steering to VF</desc><g
+         id="shadow1-21"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180         0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0         0 10.55 348.36 Z"
+           class="st10"
+           id="path91" /></g><path
+         d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0        94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55        348.36 Z"
+         class="st11"
+         id="path93" /><text
+         x="10.03"
+         y="328.39"
+         class="st12"
+         id="text95"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4475">Filters support traffic</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="11.048484"
+         y="340.46152"
+         class="st12"
+         id="text95-1"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4477"
+           x="11.048484"
+           y="340.46152">steering to VF</tspan></text>
+</g><g
+       id="shape3-27"
+       transform="translate(192.985,-73.088)"><title
+         id="title100">Rectangle.3</title><desc
+         id="desc102">Rx Queues (0-N) PF</desc><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st8"
+         id="rect104" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text106"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4512">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.187859"
+         y="333.70471"
+         class="st9"
+         id="text106-2"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4514"
+           x="23.187859"
+           y="333.70471">( 0-N )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="27.490538"
+         y="345.52356"
+         class="st9"
+         id="text106-9"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4516"
+           x="27.490538"
+           y="345.52356"> PF</tspan></text>
+</g><g
+       id="shape4-32"
+       transform="translate(344.949,-73.088)"><title
+         id="title113">Rectangle.4</title><desc
+         id="desc115">Rx Queues (0-M) VF(vf 0)</desc><g
+         id="shadow4-33"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="314.425"
+           width="75.9823"
+           height="33.9388"
+           class="st10"
+           id="rect118" /></g><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st15"
+         id="rect120" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text122"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4571">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="21.777092"
+         y="333.69595"
+         class="st9"
+         id="text122-8"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4569"
+           x="21.777092"
+           y="333.69595">( 0-M )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="21.79059"
+         y="343.91479"
+         class="st9"
+         id="text122-0"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4573"
+           x="21.79059"
+           y="343.91479">VF(vf0)</tspan></text>
+</g><g
+       id="shape5-44"
+       transform="translate(154.994,-43.0328)"><title
+         id="title137">Rectangle.5</title><desc
+         id="desc139">filters</desc><g
+         id="shadow5-45"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="331.479"
+           width="303.929"
+           height="16.885"
+           class="st10"
+           id="rect142" /></g><rect
+         x="0"
+         y="331.479"
+         width="303.929"
+         height="16.885"
+         class="st16"
+         id="rect144" /><text
+         x="140.28"
+         y="342.92"
+         class="st9"
+         id="text146">filters</text>
+</g><g
+       id="shape6-52"
+       transform="translate(95.8962,-224.377)"><title
+         id="title149">Rounded Rectangle.6</title><desc
+         id="desc151">Tools to program filters</desc><path
+         d="m 7.6,347.29783 60.78,0 a 7.59811,7.59811 0 0 0 7.6,-7.59 l 0,-18.58 a 7.59811,7.59811 0 0 0 -7.6,-7.6 l -60.78,0 a 7.59811,7.59811 0 0 0 -7.6,7.6 l 0,18.58 a 7.59811,7.59811 0 0 0 7.6,7.59 z"
+         class="st8"
+         id="path153"
+         inkscape:connector-curvature="0"
+         style="fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75" /><text
+         x="21.74"
+         y="328.48001"
+         class="st9"
+         id="text155"
+         style="font-size:10.00003242px;font-family:Calibri;fill:#000000">Tools to <tspan
+   x="7.6900001"
+   class="st13"
+   id="tspan157"
+   style="font-size:10.00003242px" /></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.40806"
+         y="340.79666"
+         class="st9"
+         id="text155-1"
+         sodipodi:linespacing="125%"><tspan
+           x="9.358057"
+           class="st13"
+           id="tspan157-9"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">program filters</tspan></text>
+</g><g
+       id="shape22-56"
+       transform="translate(11.4714,-156.88)"><title
+         id="title160">2-D word balloon</title><desc
+         id="desc162">Director flows to queue index in specified VF</desc><text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.0559683"
+         y="346.97244"
+         class="st17"
+         id="text169-3-4"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4471"
+           x="8.0559683"
+           y="346.97244">inspecified VF</tspan></text>
+<g
+         id="shadow22-57"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M0 327.15 L0 314.43 L28.49 314.43 L37.99 314.43 L47.49 314.43 L75.98 314.43 L75.98 327.15 L91.79 331.39         L75.98 335.64 L75.98 348.36 L47.49 348.36 L37.99 348.36 L28.49 348.36 L0 348.36 L0 335.64 L0 331.39         L0 327.15 Z"
+           class="st10"
+           id="path165" /></g><path
+         d="m 0.53783484,327.68783 0,-12.72 28.49000016,0 9.5,0 9.5,0 28.49,0 0,12.72 15.81,4.24 -15.81,4.25 0,12.72 -28.49,0 -9.5,0 -9.5,0 -28.49000016,0 0,-12.72 0,-4.25 0,-4.24 z"
+         class="st11"
+         id="path167"
+         inkscape:connector-curvature="0"
+         style="fill:#c00000;stroke:#c7c8c8;stroke-width:0.25" /><text
+         x="7.5599966"
+         y="324.19"
+         class="st17"
+         id="text169"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4446"
+           x="7.5599966"
+           y="324.19">Director flows</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.1099777"
+         y="334.57529"
+         class="st17"
+         id="text169-3"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4469"
+           x="8.1099777"
+           y="334.57529">to queue index</tspan></text>
+<text
+         x="8.5350533"
+         y="345.4624"
+         class="st17"
+         id="text169-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.00001221px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:#feffff;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4479">in specified VF</tspan></text>
+</g><g
+       id="shape24-64"
+       transform="translate(323.843,-285.05)"><title
+         id="title176">Rounded Rectangle.24</title><desc
+         id="desc178">DPDK</desc><g
+         id="shadow24-65"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0         0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29         348.36 Z"
+           class="st10"
+           id="path181" /></g><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st18"
+         id="path183" /><text
+         x="30.57"
+         y="321.61"
+         class="st19"
+         id="text185">DPDK</text>
+</g><g
+       id="shape25-70"
+       transform="translate(192.985,-285.05)"><title
+         id="title188">Rounded Rectangle.25</title><desc
+         id="desc190">Socket</desc><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st8"
+         id="path192" /><text
+         x="27.56"
+         y="321.61"
+         class="st19"
+         id="text194">Socket</text>
+</g><g
+       id="shape44-73"
+       transform="translate(154.994,569.271) rotate(180)"><title
+         id="title197">Simple Arrow.44</title><g
+         id="shadow44-74"
+         transform="matrix(1,0,0,1,-0.345598,-1.97279)"
+         class="st1" /></g><g
+       id="shape52-75"
+       transform="translate(154.994,-127.458)"><title
+         id="title201">Single arrowhead</title></g><g
+       id="shape70-76"
+       transform="translate(221.976,-107.027)"><title
+         id="title204">Dynamic connector.70</title><path
+         d="M9 338.16 L9 337.8 L9 325.87"
+         class="st20"
+         id="path206" /></g><g
+       id="shape81-85"
+       transform="translate(124.887,-224.377)"><title
+         id="title209">Dynamic connector.81</title><path
+         d="M9 348.36 L9 362.26"
+         class="st22"
+         id="path211" /></g><g
+       id="shape83-91"
+       transform="translate(240.398,-57.5029)"><title
+         id="title214">Dynamic connector.83</title><path
+         d="M-8.58 345.95 L-8.97 339.8"
+         class="st22"
+         id="path216" /></g><g
+       id="shape84-96"
+       transform="translate(373.94,-57.5029)"><title
+         id="title219">Dynamic connector.84</title><path
+         d="M9 345.95 L9 339.82"
+         class="st22"
+         id="path221" /></g><g
+       id="shape98-101"
+       transform="translate(539.29,6.22333) rotate(79.2209)"><title
+         id="title224">Sheet.98</title><path
+         d="M11.39 310.28 L11.72 310.42 C54.22 328.18 100.77 337.63 149.11 345.35 C162.41 347.48 175.84 349.47 187.65 347.74        C201.36 345.74 212.87 338.71 218.42 327.59 C222.66 319.09 223.42 308.2 229.69 303.23 C239.2 295.7 261.37        301.76 275.96 305.26"
+         class="st23"
+         id="path226" /></g><g
+       id="shape109-107"
+       transform="translate(712.298,124.855) rotate(100.2)"><title
+         id="title229">Sheet.109</title><path
+         d="M12.03 344.31 L12.38 344.21 C55.98 332.05 99.42 314.86 144.33 309.38 C167.01 306.62 190.06 306.85 204.84 318.11        C212.98 324.32 218.61 333.88 226.49 339.83 C238.38 348.81 255.38 349.56 275.91 347.51"
+         class="st25"
+         id="path231" /></g><g
+       id="shape110-113"
+       transform="translate(108.779,-175.962)"><title
+         id="title234">Sheet.110</title><rect
+         x="0"
+         y="341.614"
+         width="94.5"
+         height="6.75"
+         class="st27"
+         id="rect236" /></g></g></svg>
\ No newline at end of file
diff --git a/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
new file mode 100644
index 0000000..f7e2bd8
--- /dev/null
+++ b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export ixgbe_bifu_queue_idx.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59375in" height="0.535375in"
+		viewBox="0 0 330.75 38.547" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+	<v:documentProperties v:langID="1033" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25}
+		.st4 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st5 {fill:#c5e0b3;stroke:#c7c8c8;stroke-width:0.25}
+		.st6 {fill:#f4b183;stroke:#c7c8c8;stroke-width:0.25}
+		.st7 {fill:none;stroke:none;stroke-width:0.25}
+		.st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Filters">
+		<filter id="filter_2">
+			<feGaussianBlur stdDeviation="2"/>
+		</filter>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(3.0294,-5.34781)">
+			<title>Rectangle</title>
+			<desc>0x000000</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="52.1695" cy="30.3097" width="104.34" height="16.4746"/>
+			<g id="shadow1-2" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st3"/>
+			<text x="32.27" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0x000000</text>		</g>
+		<g id="shape2-7" v:mID="2" v:groupContext="shape" transform="translate(107.368,-5.34781)">
+			<title>Rectangle.2</title>
+			<desc>VF ID + 1</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="30.2034" cy="30.3097" width="60.41" height="16.4746"/>
+			<g id="shadow2-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st5"/>
+			<text x="12.32" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF ID + 1</text>		</g>
+		<g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(167.775,-5.34781)">
+			<title>Rectangle.3</title>
+			<desc>Queue Index</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="79.6271" cy="30.3097" width="159.26" height="16.4746"/>
+			<g id="shadow3-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st6"/>
+			<text x="53.74" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue Index</text>		</g>
+		<g id="shape4-19" v:mID="4" v:groupContext="shape" transform="translate(305.063,-21.8224)">
+			<title>Sheet.4</title>
+			<desc>0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="8.45" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text>		</g>
+		<g id="shape6-22" v:mID="6" v:groupContext="shape" transform="translate(165.029,-21.8224)">
+			<title>Sheet.6</title>
+			<desc>31</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>31</text>		</g>
+		<g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(104.623,-21.8224)">
+			<title>Sheet.7</title>
+			<desc>39</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>39</text>		</g>
+		<g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(3.0294,-21.8224)">
+			<title>Sheet.8</title>
+			<desc>63</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>63</text>		</g>
+	</g>
+</svg>
diff --git a/doc/guides/howto/index.rst b/doc/guides/howto/index.rst
index 4b97a32..a912d82 100644
--- a/doc/guides/howto/index.rst
+++ b/doc/guides/howto/index.rst
@@ -36,3 +36,4 @@ How To User Guide
     :numbered:
 
     lm_bond_virtio_sriov
+    flow_bifurcation
-- 
2.4.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3] doc: flow bifurcation guide on Linux
  2016-07-14  8:04 ` [PATCH v3] doc: flow bifurcation guide on Linux Jingjing Wu
@ 2016-07-17 19:31   ` Mcnamara, John
  2016-07-19  3:31   ` [PATCH v4] " Jingjing Wu
  1 sibling, 0 replies; 12+ messages in thread
From: Mcnamara, John @ 2016-07-17 19:31 UTC (permalink / raw)
  To: Wu, Jingjing; +Cc: dev, Liu, Yong, Zhang, Helin

> -----Original Message-----
> From: Wu, Jingjing
> Sent: Thursday, July 14, 2016 9:04 AM
> To: Mcnamara, John <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; Liu, Yong
> <yong.liu@intel.com>; Zhang, Helin <helin.zhang@intel.com>
> Subject: [PATCH v3] doc: flow bifurcation guide on Linux
> 
> Flow bifurcation is a mechanism which depends the advanced Ethernet device
> to split traffic between queues. It provides the capability to let the
> kernel driver and DPDK driver co-exist and take their advantages.
> It is achieved by using SRIOV and NIC's advanced filtering. This patch
> describes it and adds the user guide on ixgbe and i40 NICs.

Hi Jingjing,

Thanks for the nice clear document with clear examples and images.

Some minor comments below.

> +Other than KNI, the SW is just required to device configuration, no
> +need to take care of the packet movement during the traffic split. This
> +can get more performance with less CPU overhead.

It isn't clear here what KNIs involvement is, if any, or why it is different.
I'd suggest clarifying if it is important or just omitting otherwise.


> +.. _figure_flow_bifurcation_overview:
> +
> +.. figure:: img/flow_bifurcation_overview.*
> +
> +   Flow Bifucation Overview

s/Bifucation/Bifurcation/

Also, I'd suggest using capitalized "Flow Bifurcation" consistently throughout the doc.

> +    .. 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_PF: [queue index]

I don't see '$queue_index_in_PF' used in this example.


> +#.  Enable and set flow filters:
> +
> +    *   L3 VEB filter, route whose dest IP = 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
> +


I think the code-block level is wrong in these sections.

I'll send you on some other minor grammatical changes.

Thanks,

John

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v4] doc: flow bifurcation guide on Linux
  2016-07-14  8:04 ` [PATCH v3] doc: flow bifurcation guide on Linux Jingjing Wu
  2016-07-17 19:31   ` Mcnamara, John
@ 2016-07-19  3:31   ` Jingjing Wu
  2016-07-19 16:34     ` Mcnamara, John
  1 sibling, 1 reply; 12+ messages in thread
From: Jingjing Wu @ 2016-07-19  3:31 UTC (permalink / raw)
  To: john.mcnamara; +Cc: dev, jingjing.wu, yong.liu, helin.zhang

Flow Bifurcation is a mechanism which uses features of advanced
Ethernet devices to split traffic between queues. It provides
the capability to let the kernel driver and DPDK driver co-exist
and take advantage of both.

It is achieved by using SR-IOV and the NIC's advanced filtering. This
patch describes Flow Bifurcation and adds the user guide for ixgbe
and i40e NICs.

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
---
v3 changes:
 - rename bifurcated driver to flow bifurcation.
 - move the doc from nics to howto.

v4 changes:
 - rework on John's comments about format.

 doc/guides/howto/flow_bifurcation.rst              | 299 +++++++++++
 doc/guides/howto/img/flow_bifurcation_overview.svg | 544 +++++++++++++++++++++
 doc/guides/howto/img/ixgbe_bifu_queue_idx.svg      | 101 ++++
 doc/guides/howto/index.rst                         |   1 +
 4 files changed, 945 insertions(+)
 create mode 100644 doc/guides/howto/flow_bifurcation.rst
 create mode 100644 doc/guides/howto/img/flow_bifurcation_overview.svg
 create mode 100644 doc/guides/howto/img/ixgbe_bifu_queue_idx.svg

diff --git a/doc/guides/howto/flow_bifurcation.rst b/doc/guides/howto/flow_bifurcation.rst
new file mode 100644
index 0000000..a1c6262
--- /dev/null
+++ b/doc/guides/howto/flow_bifurcation.rst
@@ -0,0 +1,299 @@
+..  BSD LICENSE
+    Copyright(c) 2016 Intel Corporation. All rights reserved.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+    * Neither the name of Intel Corporation nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Flow Bifurcation How-to Guide
+=============================
+
+Flow Bifurcation is a mechanism which uses hardware capable Ethernet devices
+to split traffic between Linux user space and kernel space. Since it is a
+hardware assisted feature this approach can provide line rate processing
+capability. Other than :ref:`KNI <kni>`, the software is just required to
+enable device configuration, there is no need to take care of the packet
+movement during the traffic split. This can yield better performance with
+less CPU overhead.
+
+The Flow Bifurcation splits the incoming data traffic to user space
+applications (such as DPDK applications) and/or kernel space programs (such as
+the Linux kernel stack). It can direct some traffic, for example data plane
+traffic, to DPDK, while directing some other traffic, for example control
+plane traffic, to the traditional Linux networking stack.
+
+There are a number of technical options to achieve this. A typical example is
+to combine the technology of SR-IOV and packet classification filtering.
+
+SR-IOV is a PCI standard that allows the same physical adapter to be split as
+multiple virtual functions. Each virtual function (VF) has separated queues
+with physical functions (PF). The network adapter will direct traffic to a
+virtual function with a matching destination MAC address. In a sense, SR-IOV
+has the capability for queue division.
+
+Packet classification filtering is a hardware capability available on most
+network adapters. Filters can be configured to direct specific flows to a
+given receive queue by hardware. Different NICs may have different filter
+types to direct flows to a Virtual Function or a queue that belong to it.
+
+In this way the Linux networking stack can receive specific traffic through
+the kernel driver while a DPDK application can receive specific traffic
+bypassing the Linux kernel by using drivers like VFIO or the DPDK ``igb_uio``
+module.
+
+.. _figure_flow_bifurcation_overview:
+
+.. figure:: img/flow_bifurcation_overview.*
+
+   Flow Bifurcation Overview
+
+
+Using Flow Bifurcation on IXGBE in Linux
+----------------------------------------
+
+On Intel 82599 10 Gigabit Ethernet Controller series NICs Flow Bifurcation can
+be achieved by SR-IOV and Intel Flow Director technologies. Traffic can be
+directed to queues by the Flow Director capability, typically by matching
+5-tuple of UDP/TCP packets.
+
+The typical procedure to achieve this is as follows:
+
+#. Boot the system without iommu, or with ``iommu=pt``.
+
+#. Create Virtual Functions:
+
+   .. code-block:: console
+
+       echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
+
+#. Enable and set flow filters:
+
+   .. code-block:: console
+
+       ethtool -K eth1 ntuple on
+       ethtool -N eth1 flow-type udp4 src-ip 192.0.2.2 dst-ip 198.51.100.2 \
+               action $queue_index_in_VF0
+       ethtool -N eth1 flow-type udp4 src-ip 198.51.100.2 dst-ip 192.0.2.2 \
+               action $queue_index_in_VF1
+
+   Where:
+
+   * ``$queue_index_in_VFn``: Bits 39:32 of the variable defines VF id + 1; the lower 32 bits indicates the queue index of the VF. Thus:
+
+     * ``$queue_index_in_VF0`` = ``(0x1 & 0xFF) << 32 + [queue index]``.
+
+     * ``$queue_index_in_VF1`` = ``(0x2 & 0xFF) << 32 + [queue index]``.
+
+   .. _figure_ixgbe_bifu_queue_idx:
+
+   .. figure:: img/ixgbe_bifu_queue_idx.*
+
+#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci`` kernel modules as normal.
+
+#. Bind the virtual functions:
+
+   .. code-block:: console
+
+       modprobe vfio-pci
+       dpdk_nic_bind.py -b vfio-pci 01:10.0
+       dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#. Run a DPDK application on the VFs:
+
+   .. code-block:: console
+
+       testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+In this example, traffic matching the rules will go through the VF by matching
+the filter rule. All other traffic, not matching the rules, will go through
+the default queue or scaling on queues in the PF. That is to say UDP packets
+with the specified IP source and destination addresses will go through the
+DPDK application. All other traffic, with different hosts or different
+protocols, will go through the Linux networking stack.
+
+.. note::
+
+    * The above steps work on the Linux kernel v4.2.
+
+    * The Flow Bifurcation is implemented in Linux kernel and ixgbe kernel driver using the following patches:
+
+        * `ethtool: Add helper routines to pass vf to rx_flow_spec <https://patchwork.ozlabs.org/patch/476511/>`_
+
+        * `ixgbe: Allow flow director to use entire queue space <https://patchwork.ozlabs.org/patch/476516/>`_
+
+    * The Ethtool version used in this example is 3.18.
+
+
+Using Flow Bifurcation on I40E in Linux
+---------------------------------------
+
+On Intel X710/XL710 series Ethernet Controllers Flow Bifurcation can be
+achieved by SR-IOV, Cloud Filter and L3 VEB switch. The traffic can be
+directed to queues by the Cloud Filter and L3 VEB switch's matching rule.
+
+* L3 VEB filters work for non-tunneled packets. It can direct a packet just by
+  the Destination IP address to a queue in a VF.
+
+* Cloud filters work for the following types of tunneled packets.
+
+    * Inner mac.
+
+    * Inner mac + VNI.
+
+    * Outer mac + Inner mac + VNI.
+
+    * Inner mac + Inner vlan + VNI.
+
+    * Inner mac + Inner vlan.
+
+The typical procedure to achieve this is as follows:
+
+#. Boot the system without iommu, or with ``iommu=pt``.
+
+#. Build and insert the ``i40e.ko`` module.
+
+#. Create Virtual Functions:
+
+   .. code-block:: console
+
+       echo 2 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
+
+#. Add udp port offload to the NIC if using cloud filter:
+
+   .. code-block:: console
+
+       ip li add vxlan0 type vxlan id 42 group 239.1.1.1 local 10.16.43.214 dev <name>
+       ifconfig vxlan0 up
+       ip -d li show vxlan0
+
+   .. note::
+
+       Output such as ``add vxlan port 8472, index 0 success`` should be
+       found in the system log.
+
+#. Examples of enabling and setting flow filters:
+
+   * L3 VEB filter, for a route whose destination IP is 192.168.50.108 to VF
+     0's queue 2.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ip4 dst-ip 192.168.50.108 \
+               user-def 0xffffffff00000000 action 2 loc 8
+
+   * Inner mac, for a route whose inner destination mac is 0:0:0:0:9:0 to
+     PF's queue 6.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \
+               m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \
+               user-def 0xffffffff00000003 action 6 loc 1
+
+   * Inner mac + VNI, for a route whose inner destination mac is 0:0:0:0:9:0
+     and VNI is 8 to PF's queue 4.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ether dst 00:00:00:00:00:00 \
+               m ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \
+               user-def 0x800000003 action 4 loc 4
+
+   * Outer mac + Inner mac + VNI, for a route whose outer mac is
+     68:05:ca:24:03:8b, inner destination mac is c2:1a:e1:53:bc:57, and VNI
+     is 8 to PF's queue 2.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ether dst 68:05:ca:24:03:8b \
+               m 00:00:00:00:00:00 src c2:1a:e1:53:bc:57 m 00:00:00:00:00:00 \
+               user-def 0x800000003 action 2 loc 2
+
+   * Inner mac + Inner vlan + VNI, for a route whose inner destination mac is
+     00:00:00:00:20:00, inner vlan is 10, and VNI is 8 to VF 0's queue 1.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \
+               m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \
+               vlan 10 user-def 0x800000000 action 1 loc 5
+
+   * Inner mac + Inner vlan, for a route whose inner destination mac is
+     00:00:00:00:20:00, and inner vlan is 10 to VF 0's queue 1.
+
+     .. code-block:: console
+
+       ethtool -N <dev_name> flow-type ether dst 00:00:00:00:01:00 \
+               m ff:ff:ff:ff:ff:ff src 00:00:00:00:20:00 m 00:00:00:00:00:00 \
+               vlan 10 user-def 0xffffffff00000000 action 1 loc 5
+
+   .. note::
+
+       * If the upper 32 bits of 'user-def' are ``0xffffffff``, then the
+         filter can be used for programming an L3 VEB filter, otherwise the
+         upper 32 bits of 'user-def' can carry the tenant ID/VNI if
+         specified/required.
+
+       * Cloud filters can be defined with inner mac, outer mac, inner ip,
+         inner vlan and VNI as part of the cloud tuple. It is always the
+         destination (not source) mac/ip that these filters use. For all
+         these examples dst and src mac address fields are overloaded dst ==
+         outer, src == inner.
+
+       * The filter will direct a packet matching the rule to a vf id
+         specified in the lower 32 bit of user-def to the queue specified by
+         'action'.
+
+       * If the vf id specified by the lower 32 bit of user-def is greater
+         than or equal to ``max_vfs``, then the filter is for the PF queues.
+
+#. Compile the DPDK application and insert ``igb_uio`` or probe the ``vfio-pci``
+   kernel modules as normal.
+
+#. Bind the virtual function:
+
+   .. code-block:: console
+
+       modprobe vfio-pci
+       dpdk_nic_bind.py -b vfio-pci 01:10.0
+       dpdk_nic_bind.py -b vfio-pci 01:10.1
+
+#. run DPDK application on VFs:
+
+   .. code-block:: console
+
+       testpmd -c 0xff -n 4 -- -i -w 01:10.0 -w 01:10.1 --forward-mode=mac
+
+.. note::
+
+   * The above steps work on the i40e Linux kernel driver v1.5.16.
+
+   * The Ethtool version used in this example is 3.18. The mask ``ff`` means
+     'not involved', while ``00`` or no mask means 'involved'.
+
+   * For more details of the configuration, refer to the
+     `cloud filter test plan <http://dpdk.org/browse/tools/dts/tree/test_plans/cloud_filter_test_plan.rst>`_
diff --git a/doc/guides/howto/img/flow_bifurcation_overview.svg b/doc/guides/howto/img/flow_bifurcation_overview.svg
new file mode 100644
index 0000000..4fa2764
--- /dev/null
+++ b/doc/guides/howto/img/flow_bifurcation_overview.svg
@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export bifurcated_driver_overview.svg Page-1 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="6.71874in"
+   height="4.83839in"
+   viewBox="0 0 483.75 348.364"
+   xml:space="preserve"
+   color-interpolation-filters="sRGB"
+   class="st28"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="bifurcated_driver_overview.svg"><metadata
+     id="metadata240"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1600"
+     inkscape:window-height="837"
+     id="namedview238"
+     showgrid="false"
+     inkscape:zoom="1.0517845"
+     inkscape:cx="215.35622"
+     inkscape:cy="200.74714"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g44" /><style
+     type="text/css"
+     id="style4"><![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:none;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.16666em;font-weight:bold;opacity:0.219608}
+		.st4 {fill:none;stroke:#c7c8c8;stroke-width:0.5}
+		.st5 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+		.st6 {fill:#5b9bd5;filter:url(#filter_2);font-family:Calibri;font-size:1.5em;opacity:0.219608}
+		.st7 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st8 {fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75}
+		.st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st10 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st11 {fill:#c00000;stroke:#c7c8c8;stroke-width:0.25}
+		.st12 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
+		.st13 {font-size:1em}
+		.st14 {fill:#ff0000;font-size:1em;font-weight:bold}
+		.st15 {fill:#2e75b5;stroke:#c7c8c8;stroke-width:0.25}
+		.st16 {fill:url(#grad4-50);stroke:#c7c8c8;stroke-width:0.25}
+		.st17 {fill:#feffff;font-family:Calibri;font-size:0.666664em}
+		.st18 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+		.st20 {marker-end:url(#mrkr13-84);marker-start:url(#mrkr13-82);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st21 {fill:#c00000;fill-opacity:1;stroke:#c00000;stroke-opacity:1;stroke-width:0.28409090909091}
+		.st22 {marker-end:url(#mrkr4-90);stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st23 {marker-start:url(#mrkr13-106);stroke:#538135;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st24 {fill:#538135;fill-opacity:1;stroke:#538135;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st25 {marker-start:url(#mrkr13-112);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75}
+		.st26 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.40983606557377}
+		.st27 {fill:none;stroke:none;stroke-width:0.25}
+		.st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]></style><defs
+     id="Patterns_And_Gradients"><radialGradient
+       id="grad4-50"
+       cx="0.5"
+       cy="0"
+       r="1.1"><stop
+         offset="0"
+         stop-color="#a8d08d"
+         stop-opacity="1"
+         id="stop8" /><stop
+         offset="0.24"
+         stop-color="#bedcaa"
+         stop-opacity="1"
+         id="stop10" /><stop
+         offset="0.59"
+         stop-color="#3374af"
+         stop-opacity="1"
+         id="stop12" /><stop
+         offset="0.75"
+         stop-color="#41719c"
+         stop-opacity="1"
+         id="stop14" /><stop
+         offset="1"
+         stop-color="#c5e0b3"
+         stop-opacity="1"
+         id="stop16" /></radialGradient></defs><defs
+     id="Markers"><g
+       id="lend13"><path
+         d="M 3 1 L 0 0 L 3 -1 L 3 1 "
+         style="stroke:none"
+         id="path20" /></g><marker
+       id="mrkr13-82"
+       class="st21"
+       refX="10.2"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(3.52) "
+         id="use23" /></marker><marker
+       id="mrkr13-84"
+       class="st21"
+       refX="-10.56"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(-3.52,-3.52) "
+         id="use26" /></marker><g
+       id="lend4"><path
+         d="M 2 1 L 0 0 L 2 -1 L 2 1 "
+         style="stroke:none"
+         id="path29" /></g><marker
+       id="mrkr4-90"
+       class="st21"
+       refX="-7.04"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend4"
+         transform="scale(-3.52,-3.52) "
+         id="use32" /></marker><marker
+       id="mrkr13-106"
+       class="st24"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use35" /></marker><marker
+       id="mrkr13-112"
+       class="st26"
+       refX="7.1142857142857"
+       orient="auto"
+       markerUnits="strokeWidth"
+       overflow="visible"><use
+         xlink:href="#lend13"
+         transform="scale(2.44) "
+         id="use38" /></marker></defs><defs
+     id="Filters"><filter
+       id="filter_2"><feGaussianBlur
+         stdDeviation="2"
+         id="feGaussianBlur42" /></filter></defs><g
+     id="g44"><title
+       id="title46">Page-1</title><g
+       id="shape85-1"
+       transform="translate(133.887,-26.1478)"><title
+         id="title49">Sheet.85</title><desc
+         id="desc51">NIC</desc><g
+         id="shadow85-2"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="255.497"
+           width="346.142"
+           height="92.8673"
+           class="st2"
+           id="rect54" /><text
+           x="162.89"
+           y="349.33"
+           class="st3"
+           id="text56">NIC</text>
+</g><rect
+         x="0"
+         y="255.497"
+         width="346.142"
+         height="92.8673"
+         class="st4"
+         id="rect58"
+         style="stroke-width:0.50000076;stroke-miterlimit:3;stroke-dasharray:none" /><text
+         x="162.89"
+         y="349.33"
+         class="st5"
+         id="text60">NIC</text>
+</g><g
+       id="shape20-9"
+       transform="translate(3.0289,-127.458)"><title
+         id="title63">Rounded Rectangle.20</title><desc
+         id="desc65">LINUX</desc><g
+         id="shadow20-10"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180         0 0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0         0 30.39 348.36 Z"
+           class="st2"
+           id="path68" /><text
+           x="255.32"
+           y="238.8"
+           class="st6"
+           id="text70">LINUX</text>
+</g><path
+         d="M30.39 348.36 L273.54 348.36 A30.3924 30.3924 -180 0 0 303.93 317.97 L303.93 235.23 A30.3924 30.3924 -180 0        0 273.54 204.84 L30.39 204.84 A30.3924 30.3924 -180 0 0 0 235.23 L0 317.97 A30.3924 30.3924 -180 0 0 30.39        348.36 Z"
+         class="st4"
+         id="path72" /><text
+         x="255.32"
+         y="238.8"
+         class="st7"
+         id="text74">LINUX</text>
+</g><g
+       id="shape8-17"
+       transform="translate(95.8962,-140.079)"><title
+         id="title77">Rounded Rectangle.8</title><desc
+         id="desc79">Kernel pf driver</desc><path
+         d="M18.57 348.36 L167.16 348.36 A18.5731 18.5731 -180 0 0 185.73 329.79 L185.73 303.58 A18.5731 18.5731 -180 0        0 167.16 285 L18.57 285 A18.5731 18.5731 -180 0 0 0 303.58 L0 329.79 A18.5731 18.5731 -180 0 0 18.57 348.36        Z"
+         class="st8"
+         id="path81" /><text
+         x="118.71"
+         y="319.68"
+         class="st9"
+         id="text83">Kernel pf driver  </text>
+</g><g
+       id="shape1-20"
+       transform="translate(103.263,-156.88)"><title
+         id="title86">Rounded Rectangle</title><desc
+         id="desc88">Filters support traffic steering to VF</desc><g
+         id="shadow1-21"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180         0 0 94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0         0 10.55 348.36 Z"
+           class="st10"
+           id="path91" /></g><path
+         d="M10.55 348.36 L94.98 348.36 A10.5529 10.5529 -180 0 0 105.53 337.81 L105.53 324.98 A10.5529 10.5529 -180 0 0        94.98 314.43 L10.55 314.43 A10.5529 10.5529 -180 0 0 0 324.98 L0 337.81 A10.5529 10.5529 -180 0 0 10.55        348.36 Z"
+         class="st11"
+         id="path93" /><text
+         x="10.03"
+         y="328.39"
+         class="st12"
+         id="text95"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4475">Filters support traffic</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="11.048484"
+         y="340.46152"
+         class="st12"
+         id="text95-1"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4477"
+           x="11.048484"
+           y="340.46152">steering to VF</tspan></text>
+</g><g
+       id="shape3-27"
+       transform="translate(192.985,-73.088)"><title
+         id="title100">Rectangle.3</title><desc
+         id="desc102">Rx Queues (0-N) PF</desc><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st8"
+         id="rect104" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text106"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4512">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.187859"
+         y="333.70471"
+         class="st9"
+         id="text106-2"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4514"
+           x="23.187859"
+           y="333.70471">( 0-N )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="27.490538"
+         y="345.52356"
+         class="st9"
+         id="text106-9"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4516"
+           x="27.490538"
+           y="345.52356"> PF</tspan></text>
+</g><g
+       id="shape4-32"
+       transform="translate(344.949,-73.088)"><title
+         id="title113">Rectangle.4</title><desc
+         id="desc115">Rx Queues (0-M) VF(vf 0)</desc><g
+         id="shadow4-33"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="314.425"
+           width="75.9823"
+           height="33.9388"
+           class="st10"
+           id="rect118" /></g><rect
+         x="0"
+         y="314.425"
+         width="75.9823"
+         height="33.9388"
+         class="st15"
+         id="rect120" /><text
+         x="16.43"
+         y="322.39"
+         class="st9"
+         id="text122"
+         style="-inkscape-font-specification:'Calibri, Normal';font-family:Calibri;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:10.00001526px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4571">Rx Queues</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="21.777092"
+         y="333.69595"
+         class="st9"
+         id="text122-8"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4569"
+           x="21.777092"
+           y="333.69595">( 0-M )</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"
+         x="21.79059"
+         y="343.91479"
+         class="st9"
+         id="text122-0"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4573"
+           x="21.79059"
+           y="343.91479">VF(vf0)</tspan></text>
+</g><g
+       id="shape5-44"
+       transform="translate(154.994,-43.0328)"><title
+         id="title137">Rectangle.5</title><desc
+         id="desc139">filters</desc><g
+         id="shadow5-45"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><rect
+           x="0"
+           y="331.479"
+           width="303.929"
+           height="16.885"
+           class="st10"
+           id="rect142" /></g><rect
+         x="0"
+         y="331.479"
+         width="303.929"
+         height="16.885"
+         class="st16"
+         id="rect144" /><text
+         x="140.28"
+         y="342.92"
+         class="st9"
+         id="text146">filters</text>
+</g><g
+       id="shape6-52"
+       transform="translate(95.8962,-224.377)"><title
+         id="title149">Rounded Rectangle.6</title><desc
+         id="desc151">Tools to program filters</desc><path
+         d="m 7.6,347.29783 60.78,0 a 7.59811,7.59811 0 0 0 7.6,-7.59 l 0,-18.58 a 7.59811,7.59811 0 0 0 -7.6,-7.6 l -60.78,0 a 7.59811,7.59811 0 0 0 -7.6,7.6 l 0,18.58 a 7.59811,7.59811 0 0 0 7.6,7.59 z"
+         class="st8"
+         id="path153"
+         inkscape:connector-curvature="0"
+         style="fill:#a8d08d;stroke:#4f87bb;stroke-width:0.75" /><text
+         x="21.74"
+         y="328.48001"
+         class="st9"
+         id="text155"
+         style="font-size:10.00003242px;font-family:Calibri;fill:#000000">Tools to <tspan
+   x="7.6900001"
+   class="st13"
+   id="tspan157"
+   style="font-size:10.00003242px" /></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000"
+         x="23.40806"
+         y="340.79666"
+         class="st9"
+         id="text155-1"
+         sodipodi:linespacing="125%"><tspan
+           x="9.358057"
+           class="st13"
+           id="tspan157-9"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.00001526px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">program filters</tspan></text>
+</g><g
+       id="shape22-56"
+       transform="translate(11.4714,-156.88)"><title
+         id="title160">2-D word balloon</title><desc
+         id="desc162">Director flows to queue index in specified VF</desc><text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.0559683"
+         y="346.97244"
+         class="st17"
+         id="text169-3-4"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4471"
+           x="8.0559683"
+           y="346.97244">inspecified VF</tspan></text>
+<g
+         id="shadow22-57"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M0 327.15 L0 314.43 L28.49 314.43 L37.99 314.43 L47.49 314.43 L75.98 314.43 L75.98 327.15 L91.79 331.39         L75.98 335.64 L75.98 348.36 L47.49 348.36 L37.99 348.36 L28.49 348.36 L0 348.36 L0 335.64 L0 331.39         L0 327.15 Z"
+           class="st10"
+           id="path165" /></g><path
+         d="m 0.53783484,327.68783 0,-12.72 28.49000016,0 9.5,0 9.5,0 28.49,0 0,12.72 15.81,4.24 -15.81,4.25 0,12.72 -28.49,0 -9.5,0 -9.5,0 -28.49000016,0 0,-12.72 0,-4.25 0,-4.24 z"
+         class="st11"
+         id="path167"
+         inkscape:connector-curvature="0"
+         style="fill:#c00000;stroke:#c7c8c8;stroke-width:0.25" /><text
+         x="7.5599966"
+         y="324.19"
+         class="st17"
+         id="text169"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4446"
+           x="7.5599966"
+           y="324.19">Director flows</tspan></text>
+<text
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.0000124px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#feffff"
+         x="8.1099777"
+         y="334.57529"
+         class="st17"
+         id="text169-3"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4469"
+           x="8.1099777"
+           y="334.57529">to queue index</tspan></text>
+<text
+         x="8.5350533"
+         y="345.4624"
+         class="st17"
+         id="text169-5"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.00001221px;line-height:125%;font-family:Calibri;-inkscape-font-specification:'Calibri, Normal';text-align:start;writing-mode:lr;text-anchor:start;fill:#feffff;"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4479">in specified VF</tspan></text>
+</g><g
+       id="shape24-64"
+       transform="translate(323.843,-285.05)"><title
+         id="title176">Rounded Rectangle.24</title><desc
+         id="desc178">DPDK</desc><g
+         id="shadow24-65"
+         transform="matrix(1,0,0,1,0.345598,1.97279)"
+         class="st1"><path
+           d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0         0 83.58 286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29         348.36 Z"
+           class="st10"
+           id="path181" /></g><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st18"
+         id="path183" /><text
+         x="30.57"
+         y="321.61"
+         class="st19"
+         id="text185">DPDK</text>
+</g><g
+       id="shape25-70"
+       transform="translate(192.985,-285.05)"><title
+         id="title188">Rounded Rectangle.25</title><desc
+         id="desc190">Socket</desc><path
+         d="M9.29 348.36 L83.58 348.36 A9.28657 9.28657 -180 0 0 92.87 339.08 L92.87 295.74 A9.28657 9.28657 -180 0 0 83.58        286.45 L9.29 286.45 A9.28657 9.28657 -180 0 0 0 295.74 L0 339.08 A9.28657 9.28657 -180 0 0 9.29 348.36 Z"
+         class="st8"
+         id="path192" /><text
+         x="27.56"
+         y="321.61"
+         class="st19"
+         id="text194">Socket</text>
+</g><g
+       id="shape44-73"
+       transform="translate(154.994,569.271) rotate(180)"><title
+         id="title197">Simple Arrow.44</title><g
+         id="shadow44-74"
+         transform="matrix(1,0,0,1,-0.345598,-1.97279)"
+         class="st1" /></g><g
+       id="shape52-75"
+       transform="translate(154.994,-127.458)"><title
+         id="title201">Single arrowhead</title></g><g
+       id="shape70-76"
+       transform="translate(221.976,-107.027)"><title
+         id="title204">Dynamic connector.70</title><path
+         d="M9 338.16 L9 337.8 L9 325.87"
+         class="st20"
+         id="path206" /></g><g
+       id="shape81-85"
+       transform="translate(124.887,-224.377)"><title
+         id="title209">Dynamic connector.81</title><path
+         d="M9 348.36 L9 362.26"
+         class="st22"
+         id="path211" /></g><g
+       id="shape83-91"
+       transform="translate(240.398,-57.5029)"><title
+         id="title214">Dynamic connector.83</title><path
+         d="M-8.58 345.95 L-8.97 339.8"
+         class="st22"
+         id="path216" /></g><g
+       id="shape84-96"
+       transform="translate(373.94,-57.5029)"><title
+         id="title219">Dynamic connector.84</title><path
+         d="M9 345.95 L9 339.82"
+         class="st22"
+         id="path221" /></g><g
+       id="shape98-101"
+       transform="translate(539.29,6.22333) rotate(79.2209)"><title
+         id="title224">Sheet.98</title><path
+         d="M11.39 310.28 L11.72 310.42 C54.22 328.18 100.77 337.63 149.11 345.35 C162.41 347.48 175.84 349.47 187.65 347.74        C201.36 345.74 212.87 338.71 218.42 327.59 C222.66 319.09 223.42 308.2 229.69 303.23 C239.2 295.7 261.37        301.76 275.96 305.26"
+         class="st23"
+         id="path226" /></g><g
+       id="shape109-107"
+       transform="translate(712.298,124.855) rotate(100.2)"><title
+         id="title229">Sheet.109</title><path
+         d="M12.03 344.31 L12.38 344.21 C55.98 332.05 99.42 314.86 144.33 309.38 C167.01 306.62 190.06 306.85 204.84 318.11        C212.98 324.32 218.61 333.88 226.49 339.83 C238.38 348.81 255.38 349.56 275.91 347.51"
+         class="st25"
+         id="path231" /></g><g
+       id="shape110-113"
+       transform="translate(108.779,-175.962)"><title
+         id="title234">Sheet.110</title><rect
+         x="0"
+         y="341.614"
+         width="94.5"
+         height="6.75"
+         class="st27"
+         id="rect236" /></g></g></svg>
\ No newline at end of file
diff --git a/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
new file mode 100644
index 0000000..f7e2bd8
--- /dev/null
+++ b/doc/guides/howto/img/ixgbe_bifu_queue_idx.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export ixgbe_bifu_queue_idx.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59375in" height="0.535375in"
+		viewBox="0 0 330.75 38.547" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+	<v:documentProperties v:langID="1033" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {visibility:visible}
+		.st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
+		.st3 {fill:#ffffff;stroke:#c7c8c8;stroke-width:0.25}
+		.st4 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st5 {fill:#c5e0b3;stroke:#c7c8c8;stroke-width:0.25}
+		.st6 {fill:#f4b183;stroke:#c7c8c8;stroke-width:0.25}
+		.st7 {fill:none;stroke:none;stroke-width:0.25}
+		.st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Filters">
+		<filter id="filter_2">
+			<feGaussianBlur stdDeviation="2"/>
+		</filter>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(3.0294,-5.34781)">
+			<title>Rectangle</title>
+			<desc>0x000000</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="52.1695" cy="30.3097" width="104.34" height="16.4746"/>
+			<g id="shadow1-2" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="104.339" height="16.4746" class="st3"/>
+			<text x="32.27" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0x000000</text>		</g>
+		<g id="shape2-7" v:mID="2" v:groupContext="shape" transform="translate(107.368,-5.34781)">
+			<title>Rectangle.2</title>
+			<desc>VF ID + 1</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="30.2034" cy="30.3097" width="60.41" height="16.4746"/>
+			<g id="shadow2-8" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="60.4068" height="16.4746" class="st5"/>
+			<text x="12.32" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>VF ID + 1</text>		</g>
+		<g id="shape3-13" v:mID="3" v:groupContext="shape" transform="translate(167.775,-5.34781)">
+			<title>Rectangle.3</title>
+			<desc>Queue Index</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="79.6271" cy="30.3097" width="159.26" height="16.4746"/>
+			<g id="shadow3-14" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
+					transform="matrix(1,0,0,1,0.345598,1.97279)" class="st1">
+				<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st2"/>
+			</g>
+			<rect x="0" y="22.0724" width="159.254" height="16.4746" class="st6"/>
+			<text x="53.74" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue Index</text>		</g>
+		<g id="shape4-19" v:mID="4" v:groupContext="shape" transform="translate(305.063,-21.8224)">
+			<title>Sheet.4</title>
+			<desc>0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="8.45" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>0</text>		</g>
+		<g id="shape6-22" v:mID="6" v:groupContext="shape" transform="translate(165.029,-21.8224)">
+			<title>Sheet.6</title>
+			<desc>31</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>31</text>		</g>
+		<g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(104.623,-21.8224)">
+			<title>Sheet.7</title>
+			<desc>39</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>39</text>		</g>
+		<g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(3.0294,-21.8224)">
+			<title>Sheet.8</title>
+			<desc>63</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)"/>
+			<v:textRect cx="10.9831" cy="30.3097" width="21.97" height="16.4746"/>
+			<rect x="0" y="22.0724" width="21.9661" height="16.4746" class="st7"/>
+			<text x="5.91" y="33.31" class="st4" v:langID="2052"><v:paragraph v:horizAlign="1"/><v:tabList/>63</text>		</g>
+	</g>
+</svg>
diff --git a/doc/guides/howto/index.rst b/doc/guides/howto/index.rst
index 4b97a32..a912d82 100644
--- a/doc/guides/howto/index.rst
+++ b/doc/guides/howto/index.rst
@@ -36,3 +36,4 @@ How To User Guide
     :numbered:
 
     lm_bond_virtio_sriov
+    flow_bifurcation
-- 
2.4.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] doc: flow bifurcation guide on Linux
  2016-07-19  3:31   ` [PATCH v4] " Jingjing Wu
@ 2016-07-19 16:34     ` Mcnamara, John
  2016-07-20  0:59       ` Wu, Jingjing
  2016-07-22 17:23       ` Thomas Monjalon
  0 siblings, 2 replies; 12+ messages in thread
From: Mcnamara, John @ 2016-07-19 16:34 UTC (permalink / raw)
  To: Wu, Jingjing; +Cc: dev, Liu, Yong, Zhang, Helin, Iremonger, Bernard



> -----Original Message-----
> From: Wu, Jingjing
> Sent: Tuesday, July 19, 2016 4:31 AM
> To: Mcnamara, John <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; Liu, Yong
> <yong.liu@intel.com>; Zhang, Helin <helin.zhang@intel.com>
> Subject: [PATCH v4] doc: flow bifurcation guide on Linux
> 
> Flow Bifurcation is a mechanism which uses features of advanced Ethernet
> devices to split traffic between queues. It provides the capability to let
> the kernel driver and DPDK driver co-exist and take advantage of both.
> 
> It is achieved by using SR-IOV and the NIC's advanced filtering. This
> patch describes Flow Bifurcation and adds the user guide for ixgbe and
> i40e NICs.
> 
> Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>




This patch is dependent on:
    [PATCH v5 1/2] doc: live migration of VM with Virtio and VF

The following patch is also dependent on it:

    [PATCH v3 1/2] doc: live migration of VM with vhost_user on host

There is now a merge conflict between your patch and the second patch
because index.rst has been changed.

Maybe the 2 patches above could be combined and you can rebase your
patch against it.

But as for the patch itself:


Acked-by: John McNamara <john.mcnamara@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] doc: flow bifurcation guide on Linux
  2016-07-19 16:34     ` Mcnamara, John
@ 2016-07-20  0:59       ` Wu, Jingjing
  2016-07-22 17:23       ` Thomas Monjalon
  1 sibling, 0 replies; 12+ messages in thread
From: Wu, Jingjing @ 2016-07-20  0:59 UTC (permalink / raw)
  To: Mcnamara, John; +Cc: dev, Liu, Yong, Zhang, Helin, Iremonger, Bernard



> -----Original Message-----
> From: Mcnamara, John
> Sent: Wednesday, July 20, 2016 12:35 AM
> To: Wu, Jingjing
> Cc: dev@dpdk.org; Liu, Yong; Zhang, Helin; Iremonger, Bernard
> Subject: RE: [PATCH v4] doc: flow bifurcation guide on Linux
> 
> 
> 
> > -----Original Message-----
> > From: Wu, Jingjing
> > Sent: Tuesday, July 19, 2016 4:31 AM
> > To: Mcnamara, John <john.mcnamara@intel.com>
> > Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; Liu, Yong
> > <yong.liu@intel.com>; Zhang, Helin <helin.zhang@intel.com>
> > Subject: [PATCH v4] doc: flow bifurcation guide on Linux
> >
> > Flow Bifurcation is a mechanism which uses features of advanced
> > Ethernet devices to split traffic between queues. It provides the
> > capability to let the kernel driver and DPDK driver co-exist and take
> advantage of both.
> >
> > It is achieved by using SR-IOV and the NIC's advanced filtering. This
> > patch describes Flow Bifurcation and adds the user guide for ixgbe and
> > i40e NICs.
> >
> > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
> 
> 
> 
> 
> This patch is dependent on:
>     [PATCH v5 1/2] doc: live migration of VM with Virtio and VF
> 
> The following patch is also dependent on it:
> 
>     [PATCH v3 1/2] doc: live migration of VM with vhost_user on host
> 
> There is now a merge conflict between your patch and the second patch
> because index.rst has been changed.
> 
> Maybe the 2 patches above could be combined and you can rebase your
> patch against it.
> 
Sure, I can definitely rebase if above one or two patches are merged. Thanks.

> But as for the patch itself:
> 
> 
> Acked-by: John McNamara <john.mcnamara@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v4] doc: flow bifurcation guide on Linux
  2016-07-19 16:34     ` Mcnamara, John
  2016-07-20  0:59       ` Wu, Jingjing
@ 2016-07-22 17:23       ` Thomas Monjalon
  1 sibling, 0 replies; 12+ messages in thread
From: Thomas Monjalon @ 2016-07-22 17:23 UTC (permalink / raw)
  To: Wu, Jingjing
  Cc: dev, Mcnamara, John, Liu, Yong, Zhang, Helin, Iremonger, Bernard

> > Flow Bifurcation is a mechanism which uses features of advanced Ethernet
> > devices to split traffic between queues. It provides the capability to let
> > the kernel driver and DPDK driver co-exist and take advantage of both.
> > 
> > It is achieved by using SR-IOV and the NIC's advanced filtering. This
> > patch describes Flow Bifurcation and adds the user guide for ixgbe and
> > i40e NICs.
> > 
> > Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
> 
> Acked-by: John McNamara <john.mcnamara@intel.com>

Applied, thanks

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-07-22 17:23 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-23  3:02 [PATCH v2 1/2] doc: add bifurcated driver guide on ixgbe nic Jingjing Wu
2016-06-23 12:58 ` Thomas Monjalon
2016-07-08  8:42   ` Wu, Jingjing
2016-07-08  9:14     ` Thomas Monjalon
2016-07-08  9:24       ` Mcnamara, John
2016-07-11  5:50       ` Wu, Jingjing
2016-07-14  8:04 ` [PATCH v3] doc: flow bifurcation guide on Linux Jingjing Wu
2016-07-17 19:31   ` Mcnamara, John
2016-07-19  3:31   ` [PATCH v4] " Jingjing Wu
2016-07-19 16:34     ` Mcnamara, John
2016-07-20  0:59       ` Wu, Jingjing
2016-07-22 17:23       ` Thomas Monjalon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.