Soft Patch Panel
 help / color / mirror / Atom feed
* [spp] [PATCH] docs: add document of vdev_test tool
@ 2020-04-12 23:02 Itsuro Oda
  2020-04-30  2:36 ` [spp] (x-fn-spp-ml 675) " Hideyuki Yamashita
  2020-05-10 23:43 ` [spp] [PATCH v2] " Itsuro Oda
  0 siblings, 2 replies; 5+ messages in thread
From: Itsuro Oda @ 2020-04-12 23:02 UTC (permalink / raw)
  To: spp, ferruh.yigit, yasufum.o

This patch adds a document of vdev_test tool.

Signed-off-by: Itsuro Oda <oda@valinux.co.jp>
---
 .../vdev_test/vdev_test_example_pipe.svg      | 611 ++++++++++++++++++
 .../vdev_test/vdev_test_example_vhost.svg     | 564 ++++++++++++++++
 docs/guides/tools/index.rst                   |   1 +
 docs/guides/tools/vdev_test.rst               |  86 +++
 4 files changed, 1262 insertions(+)
 create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
 create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
 create mode 100644 docs/guides/tools/vdev_test.rst

diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
new file mode 100644
index 0000000..72f5919
--- /dev/null
+++ b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
@@ -0,0 +1,611 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="152.58044mm"
+   height="117.89329mm"
+   viewBox="0 0 540.63939 417.73222"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vdev_test_example_pipe.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6666"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6505"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6503"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-5"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="421.5718"
+     inkscape:cy="86.005928"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1643"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="false"
+     inkscape:bbox-paths="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-nodes="false"
+     inkscape:object-paths="true"
+     inkscape:lockguides="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Host"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="539.15393"
+       height="380.94302"
+       x="11.101632"
+       y="475.28351" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720933;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="273.89044"
+       cy="724.98724"
+       rx="39.606403"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="273.89044"
+       cy="666.16315"
+       rx="39.628456"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="89.119804"
+       height="29.11978"
+       x="119.70796"
+       y="599.95844" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.03222072px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 311.77952,662.6264 44.12544,-0.80843"
+       id="path7074"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="163.33151"
+       height="39.045811"
+       x="87.209244"
+       y="562.58478"
+       ry="19.522905" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 140.0893,722.99672 V 633.28751"
+       id="path162"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391-6"
+       width="89.119804"
+       height="29.11978"
+       x="337.61874"
+       y="599.95844" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-6"
+       width="163.3315"
+       height="39.045807"
+       x="301.37003"
+       y="562.58484"
+       ry="19.522903" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.5358"
+       y="588.19415"
+       id="text4225-6"><tspan
+         sodipodi:role="line"
+         id="tspan4227-0"
+         x="384.5358"
+         y="588.19415"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="381.96436"
+       y="620.48944"
+       id="text4407-8"><tspan
+         sodipodi:role="line"
+         x="381.96436"
+         y="620.48944"
+         id="tspan4411-7"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">pipe:1</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot6464"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion6466"><rect
+           id="rect6468"
+           width="187.14285"
+           height="97.14286"
+           x="722.85712"
+           y="131.09111" /></flowRegion><flowPara
+         id="flowPara6470" /></flowRoot>    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 193.82777,631.047 0.36869,31.583"
+       id="path6472"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
+       d="m 355.53003,630.23137 0.36869,31.583"
+       id="path6472-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.19646,662.63 41.20492,0.09"
+       id="path1432"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.80901474px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 140.2696,723.5229 c 93.75001,0 93.75001,0 93.75001,0"
+       id="path8467"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.80901468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 313.03748,722.98723 c 93.75001,0 93.75001,0 93.75001,0"
+       id="path8467-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 406.78749,722.98723 V 629.07821"
+       id="path8486"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="170.37502"
+       y="588.05133"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="170.37502"
+         y="588.05133"
+         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="45.571438"
+       y="506.36221"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="45.571438"
+         y="506.36221"
+         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="273.62674"
+       y="730.41583"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="273.62674"
+         y="730.41583"
+         style="font-size:22.50000572px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="274.08267"
+       y="671.30603"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="274.08267"
+         y="671.30603"
+         style="font-size:22.50000572px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="167.80359"
+       y="620.5993"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="167.80359"
+         y="620.5993"
+         id="tspan4411"
+         style="font-size:22.50000572px;line-height:1.25">pipe:0</tspan></text>
+  </g>
+</svg>
diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
new file mode 100644
index 0000000..924e7bf
--- /dev/null
+++ b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="152.58044mm"
+   height="117.89329mm"
+   viewBox="0 0 540.63939 417.73222"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vdev_test_example_vhost.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6666"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6505"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6503"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-5"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="183.00037"
+     inkscape:cy="86.005928"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1643"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="false"
+     inkscape:bbox-paths="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-nodes="false"
+     inkscape:object-paths="true"
+     inkscape:lockguides="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Host"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="539.15393"
+       height="380.94302"
+       x="11.101632"
+       y="475.28351" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.05093229;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="127.7884"
+       height="28.949072"
+       x="105.06117"
+       y="600.04376" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="163.33151"
+       height="39.045811"
+       x="87.209244"
+       y="562.58478"
+       ry="19.522905" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 140.0893,722.99672 V 633.28751"
+       id="path162"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.09829414;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391-6"
+       width="139.79459"
+       height="28.901709"
+       x="314.95993"
+       y="600.0675" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-6"
+       width="163.3315"
+       height="39.045807"
+       x="301.37003"
+       y="562.58484"
+       ry="19.522903" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.5358"
+       y="588.19415"
+       id="text4225-6"><tspan
+         sodipodi:role="line"
+         id="tspan4227-0"
+         x="384.5358"
+         y="588.19415"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="383.83936"
+       y="620.48944"
+       id="text4407-8"><tspan
+         sodipodi:role="line"
+         x="383.83936"
+         y="620.48944"
+         id="tspan4411-7"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">virtio_user0</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot6464"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion6466"><rect
+           id="rect6468"
+           width="187.14285"
+           height="97.14286"
+           x="722.85712"
+           y="131.09111" /></flowRegion><flowPara
+         id="flowPara6470" /></flowRoot>    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 193.82777,631.047 0.36869,31.583"
+       id="path6472"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
+       d="m 353.65503,630.23137 0.36869,31.583"
+       id="path6472-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.81228518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.15811,662.63183 160.47807,0.0864"
+       id="path1432"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.36748445px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 140.2696,723.5229 c 267.85717,0 267.85717,0 267.85717,0"
+       id="path8467"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 406.78749,722.98723 V 629.07821"
+       id="path8486"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="167.47279"
+       y="621.73688"
+       id="text4407-8-2"><tspan
+         sodipodi:role="line"
+         x="167.47279"
+         y="621.73688"
+         id="tspan4411-7-7"
+         style="font-size:22.50000191px;line-height:1.25;stroke-width:0.99999994px">eth_vhost0</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="170.37502"
+       y="588.05133"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="170.37502"
+         y="588.05133"
+         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="45.571438"
+       y="506.36221"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="45.571438"
+         y="506.36221"
+         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
+  </g>
+</svg>
diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
index c739d79..495b9a8 100644
--- a/docs/guides/tools/index.rst
+++ b/docs/guides/tools/index.rst
@@ -12,3 +12,4 @@ Tools
 
    sppc/index
    helpers/index
+   vdev_test.rst
diff --git a/docs/guides/tools/vdev_test.rst b/docs/guides/tools/vdev_test.rst
new file mode 100644
index 0000000..10d6924
--- /dev/null
+++ b/docs/guides/tools/vdev_test.rst
@@ -0,0 +1,86 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2020 Nippon Telegraph and Telephone Corporation
+
+.. _spp_tools_vdev_test:
+
+Vdev_test
+=========
+
+Vdev_test is a simple application that it forwards packets received
+from rx queue to tx queue on the main core. It can become a secondary
+process of the spp_primary. It is mainly used for testing spp_pipe
+but it can be used to test any virtual Ethernet devices as well.
+
+Usage
+-----
+
+.. code-block:: none
+
+    vdev_test [EAL options] -- [--send] [--create devargs] device-name
+
+Vdev_test runs foreground and stops when Ctrl-C is pressed. If ``--send``
+option specified a packet is sent first. The virtual Ethernet device can
+be created to specify ``--create`` option.
+
+.. note::
+
+    Since the device can be created by EAL ``--vdev`` option for a
+    primary process, ``--create`` option mainly used by a secondary
+    process.
+
+Examples
+--------
+
+Examining spp_pipe
+~~~~~~~~~~~~~~~~~~
+
+.. _figure_vdev_test_example_pipe:
+
+.. figure:: ../images/tools/vdev_test/vdev_test_example_pipe.*
+   :width: 50%
+
+It is assumed that pipe ports were created beforehand. First run vdev_test
+without ``--send`` option.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 8 -n 4 --proc-type secondary -- spp_pipe0
+
+Then run vdev_test with ``--send`` option on another terminal.
+
+.. code-block:: console
+
+    # terminal 2
+    $ sudo vdev_test -l 9 -n 4 --proc-type secondary -- --send spp_pipe1
+
+Press Ctrl-C to stop processes on both terminals after for a while.
+
+Examining vhost
+~~~~~~~~~~~~~~~
+
+.. _figure_vdev_test_example_vhost:
+
+.. figure:: ../images/tools/vdev_test/vdev_test_example_vhost.*
+   :width: 50%
+
+This example is independent of SPP. First run vdev_test using eth_vhost0
+without ``--send`` option.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 8 -n 4 --vdev eht_vhost0,iface=/tmp/sock0,client=1 \
+      --file-prefix=app1 -- eth_vhost0
+
+Then run vdev_test using virtio_user0 with ``--send`` option on another
+terminal.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 9 -n 4 --vdev virtio_user0,path=/tmp/sock0,server=1 \
+      --file-prefix=app2 --single-file-segments -- --send virtio_user0
+
+Press Ctrl-C to stop processes on both terminals after for a while.
+
-- 
2.17.0


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

* Re: [spp] (x-fn-spp-ml 675) [PATCH] docs: add document of vdev_test tool
  2020-04-12 23:02 [spp] [PATCH] docs: add document of vdev_test tool Itsuro Oda
@ 2020-04-30  2:36 ` Hideyuki Yamashita
  2020-05-10 23:43 ` [spp] [PATCH v2] " Itsuro Oda
  1 sibling, 0 replies; 5+ messages in thread
From: Hideyuki Yamashita @ 2020-04-30  2:36 UTC (permalink / raw)
  To: Itsuro Oda; +Cc: spp, ferruh.yigit, yasufum.o

Hello Itsuro,

Thanks for your input.
However, when I try to patch with git am, the follwoing error pops up.
1 warning. So I can build the document. But I need your confirmation

Applying: (x-fn-spp-ml 675) [spp] [PATCH] docs: add document of vdev_test tool
.git/rebase-apply/patch:1298: new blank line at EOF.
+
warning: 1 line adds whitespace errors.

BR,
Hideyuki Yamashita
NTT TechnoCross

> This patch adds a document of vdev_test tool.
> 
> Signed-off-by: Itsuro Oda <oda@valinux.co.jp>
> ---
>  .../vdev_test/vdev_test_example_pipe.svg      | 611 ++++++++++++++++++
>  .../vdev_test/vdev_test_example_vhost.svg     | 564 ++++++++++++++++
>  docs/guides/tools/index.rst                   |   1 +
>  docs/guides/tools/vdev_test.rst               |  86 +++
>  4 files changed, 1262 insertions(+)
>  create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
>  create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
>  create mode 100644 docs/guides/tools/vdev_test.rst
> 
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> new file mode 100644
> index 0000000..72f5919
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> @@ -0,0 +1,611 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_pipe.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="421.5718"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title></dc:title>
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720933;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4297"
> +       cx="273.89044"
> +       cy="724.98724"
> +       rx="39.606403"
> +       ry="19.606396" />
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4301"
> +       cx="273.89044"
> +       cy="666.16315"
> +       rx="39.628456"
> +       ry="18.699877" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="89.119804"
> +       height="29.11978"
> +       x="119.70796"
> +       y="599.95844" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.03222072px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 311.77952,662.6264 44.12544,-0.80843"
> +       id="path7074"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="89.119804"
> +       height="29.11978"
> +       x="337.61874"
> +       y="599.95844" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="381.96436"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="381.96436"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">pipe:1</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 355.53003,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.19646,662.63 41.20492,0.09"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.80901474px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.80901468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 313.03748,722.98723 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467-2"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="273.62674"
> +       y="730.41583"
> +       id="text4351"><tspan
> +         sodipodi:role="line"
> +         id="tspan4353"
> +         x="273.62674"
> +         y="730.41583"
> +         style="font-size:22.50000572px;line-height:1.25">ring:0</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="274.08267"
> +       y="671.30603"
> +       id="text4359"><tspan
> +         sodipodi:role="line"
> +         id="tspan4361"
> +         x="274.08267"
> +         y="671.30603"
> +         style="font-size:22.50000572px;line-height:1.25">ring:1</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.80359"
> +       y="620.5993"
> +       id="text4407"><tspan
> +         sodipodi:role="line"
> +         x="167.80359"
> +         y="620.5993"
> +         id="tspan4411"
> +         style="font-size:22.50000572px;line-height:1.25">pipe:0</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> new file mode 100644
> index 0000000..924e7bf
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> @@ -0,0 +1,564 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_vhost.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="183.00037"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title />
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)" />
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.05093229;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="127.7884"
> +       height="28.949072"
> +       x="105.06117"
> +       y="600.04376" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.09829414;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="139.79459"
> +       height="28.901709"
> +       x="314.95993"
> +       y="600.0675" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="383.83936"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="383.83936"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">virtio_user0</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 353.65503,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.81228518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.15811,662.63183 160.47807,0.0864"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.36748445px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 267.85717,0 267.85717,0 267.85717,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.47279"
> +       y="621.73688"
> +       id="text4407-8-2"><tspan
> +         sodipodi:role="line"
> +         x="167.47279"
> +         y="621.73688"
> +         id="tspan4411-7-7"
> +         style="font-size:22.50000191px;line-height:1.25;stroke-width:0.99999994px">eth_vhost0</tspan></text>
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
> index c739d79..495b9a8 100644
> --- a/docs/guides/tools/index.rst
> +++ b/docs/guides/tools/index.rst
> @@ -12,3 +12,4 @@ Tools
>  
>     sppc/index
>     helpers/index
> +   vdev_test.rst
> diff --git a/docs/guides/tools/vdev_test.rst b/docs/guides/tools/vdev_test.rst
> new file mode 100644
> index 0000000..10d6924
> --- /dev/null
> +++ b/docs/guides/tools/vdev_test.rst
> @@ -0,0 +1,86 @@
> +..  SPDX-License-Identifier: BSD-3-Clause
> +    Copyright(c) 2020 Nippon Telegraph and Telephone Corporation
> +
> +.. _spp_tools_vdev_test:
> +
> +Vdev_test
> +=========
> +
> +Vdev_test is a simple application that it forwards packets received
> +from rx queue to tx queue on the main core. It can become a secondary
> +process of the spp_primary. It is mainly used for testing spp_pipe
> +but it can be used to test any virtual Ethernet devices as well.
> +
> +Usage
> +-----
> +
> +.. code-block:: none
> +
> +    vdev_test [EAL options] -- [--send] [--create devargs] device-name
> +
> +Vdev_test runs foreground and stops when Ctrl-C is pressed. If ``--send``
> +option specified a packet is sent first. The virtual Ethernet device can
> +be created to specify ``--create`` option.
> +
> +.. note::
> +
> +    Since the device can be created by EAL ``--vdev`` option for a
> +    primary process, ``--create`` option mainly used by a secondary
> +    process.
> +
> +Examples
> +--------
> +
> +Examining spp_pipe
> +~~~~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_pipe:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_pipe.*
> +   :width: 50%
> +
> +It is assumed that pipe ports were created beforehand. First run vdev_test
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --proc-type secondary -- spp_pipe0
> +
> +Then run vdev_test with ``--send`` option on another terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 2
> +    $ sudo vdev_test -l 9 -n 4 --proc-type secondary -- --send spp_pipe1
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> +
> +Examining vhost
> +~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_vhost:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_vhost.*
> +   :width: 50%
> +
> +This example is independent of SPP. First run vdev_test using eth_vhost0
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --vdev eht_vhost0,iface=/tmp/sock0,client=1 \
> +      --file-prefix=app1 -- eth_vhost0
> +
> +Then run vdev_test using virtio_user0 with ``--send`` option on another
> +terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 9 -n 4 --vdev virtio_user0,path=/tmp/sock0,server=1 \
> +      --file-prefix=app2 --single-file-segments -- --send virtio_user0
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> +
> -- 
> 2.17.0



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

* [spp] [PATCH v2] docs: add document of vdev_test tool
  2020-04-12 23:02 [spp] [PATCH] docs: add document of vdev_test tool Itsuro Oda
  2020-04-30  2:36 ` [spp] (x-fn-spp-ml 675) " Hideyuki Yamashita
@ 2020-05-10 23:43 ` Itsuro Oda
  2020-05-11  2:53   ` [spp] (x-fn-spp-ml 744) " Hideyuki Yamashita
  2020-05-25  3:08   ` [spp] " Yasufumi Ogawa
  1 sibling, 2 replies; 5+ messages in thread
From: Itsuro Oda @ 2020-05-10 23:43 UTC (permalink / raw)
  To: spp, ferruh.yigit, yasufum.o

This patch adds a document of vdev_test tool.

Signed-off-by: Itsuro Oda <oda@valinux.co.jp>
---
v2:
* remove a blank line at EOF

 .../vdev_test/vdev_test_example_pipe.svg      | 611 ++++++++++++++++++
 .../vdev_test/vdev_test_example_vhost.svg     | 564 ++++++++++++++++
 docs/guides/tools/index.rst                   |   1 +
 docs/guides/tools/vdev_test.rst               |  85 +++
 4 files changed, 1261 insertions(+)
 create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
 create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
 create mode 100644 docs/guides/tools/vdev_test.rst

diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
new file mode 100644
index 0000000..72f5919
--- /dev/null
+++ b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
@@ -0,0 +1,611 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="152.58044mm"
+   height="117.89329mm"
+   viewBox="0 0 540.63939 417.73222"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vdev_test_example_pipe.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6666"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6505"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6503"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-5"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="421.5718"
+     inkscape:cy="86.005928"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1643"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="false"
+     inkscape:bbox-paths="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-nodes="false"
+     inkscape:object-paths="true"
+     inkscape:lockguides="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Host"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="539.15393"
+       height="380.94302"
+       x="11.101632"
+       y="475.28351" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720933;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4297"
+       cx="273.89044"
+       cy="724.98724"
+       rx="39.606403"
+       ry="19.606396" />
+    <ellipse
+       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path4301"
+       cx="273.89044"
+       cy="666.16315"
+       rx="39.628456"
+       ry="18.699877" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="89.119804"
+       height="29.11978"
+       x="119.70796"
+       y="599.95844" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.03222072px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 311.77952,662.6264 44.12544,-0.80843"
+       id="path7074"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="163.33151"
+       height="39.045811"
+       x="87.209244"
+       y="562.58478"
+       ry="19.522905" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 140.0893,722.99672 V 633.28751"
+       id="path162"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391-6"
+       width="89.119804"
+       height="29.11978"
+       x="337.61874"
+       y="599.95844" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-6"
+       width="163.3315"
+       height="39.045807"
+       x="301.37003"
+       y="562.58484"
+       ry="19.522903" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.5358"
+       y="588.19415"
+       id="text4225-6"><tspan
+         sodipodi:role="line"
+         id="tspan4227-0"
+         x="384.5358"
+         y="588.19415"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="381.96436"
+       y="620.48944"
+       id="text4407-8"><tspan
+         sodipodi:role="line"
+         x="381.96436"
+         y="620.48944"
+         id="tspan4411-7"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">pipe:1</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot6464"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion6466"><rect
+           id="rect6468"
+           width="187.14285"
+           height="97.14286"
+           x="722.85712"
+           y="131.09111" /></flowRegion><flowPara
+         id="flowPara6470" /></flowRoot>    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 193.82777,631.047 0.36869,31.583"
+       id="path6472"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
+       d="m 355.53003,630.23137 0.36869,31.583"
+       id="path6472-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.19646,662.63 41.20492,0.09"
+       id="path1432"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.80901474px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 140.2696,723.5229 c 93.75001,0 93.75001,0 93.75001,0"
+       id="path8467"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.80901468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 313.03748,722.98723 c 93.75001,0 93.75001,0 93.75001,0"
+       id="path8467-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 406.78749,722.98723 V 629.07821"
+       id="path8486"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="170.37502"
+       y="588.05133"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="170.37502"
+         y="588.05133"
+         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="45.571438"
+       y="506.36221"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="45.571438"
+         y="506.36221"
+         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="273.62674"
+       y="730.41583"
+       id="text4351"><tspan
+         sodipodi:role="line"
+         id="tspan4353"
+         x="273.62674"
+         y="730.41583"
+         style="font-size:22.50000572px;line-height:1.25">ring:0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="274.08267"
+       y="671.30603"
+       id="text4359"><tspan
+         sodipodi:role="line"
+         id="tspan4361"
+         x="274.08267"
+         y="671.30603"
+         style="font-size:22.50000572px;line-height:1.25">ring:1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="167.80359"
+       y="620.5993"
+       id="text4407"><tspan
+         sodipodi:role="line"
+         x="167.80359"
+         y="620.5993"
+         id="tspan4411"
+         style="font-size:22.50000572px;line-height:1.25">pipe:0</tspan></text>
+  </g>
+</svg>
diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
new file mode 100644
index 0000000..924e7bf
--- /dev/null
+++ b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="152.58044mm"
+   height="117.89329mm"
+   viewBox="0 0 540.63939 417.73222"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+   sodipodi:docname="vdev_test_example_vhost.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6666"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6505"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path6503"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend"
+       inkscape:collect="always">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker4479"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4481"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker1450"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path1448"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5907"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5909"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5813"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5815"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5725"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5727"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5643"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5645"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5421"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5423"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5137"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5139"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5051"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5053"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5017"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5019"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4989"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4991"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4462"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5567-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5569-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path4411-5"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker4627-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4629-2" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="marker5091-0"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5093-6"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="183.00037"
+     inkscape:cy="86.005928"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1643"
+     inkscape:window-height="854"
+     inkscape:window-x="167"
+     inkscape:window-y="74"
+     inkscape:window-maximized="0"
+     units="mm"
+     width="230mm"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     inkscape:snap-bbox="true"
+     inkscape:snap-nodes="true"
+     inkscape:snap-others="false"
+     inkscape:bbox-paths="true"
+     inkscape:snap-intersection-paths="false"
+     inkscape:object-nodes="false"
+     inkscape:object-paths="true"
+     inkscape:lockguides="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Host"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4136"
+       width="539.15393"
+       height="380.94302"
+       x="11.101632"
+       y="475.28351" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Host-Resource"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Container"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <rect
+       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.05093229;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391"
+       width="127.7884"
+       height="28.949072"
+       x="105.06117"
+       y="600.04376" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="App"
+     transform="translate(-10.358874,-474.54075)"
+     style="display:inline">
+    <rect
+       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223"
+       width="163.33151"
+       height="39.045811"
+       x="87.209244"
+       y="562.58478"
+       ry="19.522905" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
+       d="M 140.0893,722.99672 V 633.28751"
+       id="path162"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.09829414;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4391-6"
+       width="139.79459"
+       height="28.901709"
+       x="314.95993"
+       y="600.0675" />
+    <rect
+       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect4223-6"
+       width="163.3315"
+       height="39.045807"
+       x="301.37003"
+       y="562.58484"
+       ry="19.522903" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="384.5358"
+       y="588.19415"
+       id="text4225-6"><tspan
+         sodipodi:role="line"
+         id="tspan4227-0"
+         x="384.5358"
+         y="588.19415"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="383.83936"
+       y="620.48944"
+       id="text4407-8"><tspan
+         sodipodi:role="line"
+         x="383.83936"
+         y="620.48944"
+         id="tspan4411-7"
+         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">virtio_user0</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot6464"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion6466"><rect
+           id="rect6468"
+           width="187.14285"
+           height="97.14286"
+           x="722.85712"
+           y="131.09111" /></flowRegion><flowPara
+         id="flowPara6470" /></flowRoot>    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 193.82777,631.047 0.36869,31.583"
+       id="path6472"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
+       d="m 353.65503,630.23137 0.36869,31.583"
+       id="path6472-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.81228518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.15811,662.63183 160.47807,0.0864"
+       id="path1432"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.36748445px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 140.2696,723.5229 c 267.85717,0 267.85717,0 267.85717,0"
+       id="path8467"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 406.78749,722.98723 V 629.07821"
+       id="path8486"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="167.47279"
+       y="621.73688"
+       id="text4407-8-2"><tspan
+         sodipodi:role="line"
+         x="167.47279"
+         y="621.73688"
+         id="tspan4411-7-7"
+         style="font-size:22.50000191px;line-height:1.25;stroke-width:0.99999994px">eth_vhost0</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Label"
+     style="display:inline"
+     transform="translate(-10.358874,-474.54075)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="170.37502"
+       y="588.05133"
+       id="text4225"><tspan
+         sodipodi:role="line"
+         id="tspan4227"
+         x="170.37502"
+         y="588.05133"
+         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="45.571438"
+       y="506.36221"
+       id="text4327"><tspan
+         sodipodi:role="line"
+         id="tspan4329"
+         x="45.571438"
+         y="506.36221"
+         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
+  </g>
+</svg>
diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
index c739d79..495b9a8 100644
--- a/docs/guides/tools/index.rst
+++ b/docs/guides/tools/index.rst
@@ -12,3 +12,4 @@ Tools
 
    sppc/index
    helpers/index
+   vdev_test.rst
diff --git a/docs/guides/tools/vdev_test.rst b/docs/guides/tools/vdev_test.rst
new file mode 100644
index 0000000..90a2647
--- /dev/null
+++ b/docs/guides/tools/vdev_test.rst
@@ -0,0 +1,85 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2020 Nippon Telegraph and Telephone Corporation
+
+.. _spp_tools_vdev_test:
+
+Vdev_test
+=========
+
+Vdev_test is a simple application that it forwards packets received
+from rx queue to tx queue on the main core. It can become a secondary
+process of the spp_primary. It is mainly used for testing spp_pipe
+but it can be used to test any virtual Ethernet devices as well.
+
+Usage
+-----
+
+.. code-block:: none
+
+    vdev_test [EAL options] -- [--send] [--create devargs] device-name
+
+Vdev_test runs foreground and stops when Ctrl-C is pressed. If ``--send``
+option specified a packet is sent first. The virtual Ethernet device can
+be created to specify ``--create`` option.
+
+.. note::
+
+    Since the device can be created by EAL ``--vdev`` option for a
+    primary process, ``--create`` option mainly used by a secondary
+    process.
+
+Examples
+--------
+
+Examining spp_pipe
+~~~~~~~~~~~~~~~~~~
+
+.. _figure_vdev_test_example_pipe:
+
+.. figure:: ../images/tools/vdev_test/vdev_test_example_pipe.*
+   :width: 50%
+
+It is assumed that pipe ports were created beforehand. First run vdev_test
+without ``--send`` option.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 8 -n 4 --proc-type secondary -- spp_pipe0
+
+Then run vdev_test with ``--send`` option on another terminal.
+
+.. code-block:: console
+
+    # terminal 2
+    $ sudo vdev_test -l 9 -n 4 --proc-type secondary -- --send spp_pipe1
+
+Press Ctrl-C to stop processes on both terminals after for a while.
+
+Examining vhost
+~~~~~~~~~~~~~~~
+
+.. _figure_vdev_test_example_vhost:
+
+.. figure:: ../images/tools/vdev_test/vdev_test_example_vhost.*
+   :width: 50%
+
+This example is independent of SPP. First run vdev_test using eth_vhost0
+without ``--send`` option.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 8 -n 4 --vdev eht_vhost0,iface=/tmp/sock0,client=1 \
+      --file-prefix=app1 -- eth_vhost0
+
+Then run vdev_test using virtio_user0 with ``--send`` option on another
+terminal.
+
+.. code-block:: console
+
+    # terminal 1
+    $ sudo vdev_test -l 9 -n 4 --vdev virtio_user0,path=/tmp/sock0,server=1 \
+      --file-prefix=app2 --single-file-segments -- --send virtio_user0
+
+Press Ctrl-C to stop processes on both terminals after for a while.
-- 
2.17.0


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

* Re: [spp] (x-fn-spp-ml 744) [PATCH v2] docs: add document of vdev_test tool
  2020-05-10 23:43 ` [spp] [PATCH v2] " Itsuro Oda
@ 2020-05-11  2:53   ` Hideyuki Yamashita
  2020-05-25  3:08   ` [spp] " Yasufumi Ogawa
  1 sibling, 0 replies; 5+ messages in thread
From: Hideyuki Yamashita @ 2020-05-11  2:53 UTC (permalink / raw)
  To: Itsuro Oda; +Cc: spp, ferruh.yigit, yasufum.o

Reviewed-by: Hideyuki Yamashita <yamashita.hideyuki@ntt-tx.co.jp>
> This patch adds a document of vdev_test tool.
> 
> Signed-off-by: Itsuro Oda <oda@valinux.co.jp>
> ---
> v2:
> * remove a blank line at EOF
> 
>  .../vdev_test/vdev_test_example_pipe.svg      | 611 ++++++++++++++++++
>  .../vdev_test/vdev_test_example_vhost.svg     | 564 ++++++++++++++++
>  docs/guides/tools/index.rst                   |   1 +
>  docs/guides/tools/vdev_test.rst               |  85 +++
>  4 files changed, 1261 insertions(+)
>  create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
>  create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
>  create mode 100644 docs/guides/tools/vdev_test.rst
> 
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> new file mode 100644
> index 0000000..72f5919
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> @@ -0,0 +1,611 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_pipe.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="421.5718"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title></dc:title>
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720933;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4297"
> +       cx="273.89044"
> +       cy="724.98724"
> +       rx="39.606403"
> +       ry="19.606396" />
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4301"
> +       cx="273.89044"
> +       cy="666.16315"
> +       rx="39.628456"
> +       ry="18.699877" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="89.119804"
> +       height="29.11978"
> +       x="119.70796"
> +       y="599.95844" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.03222072px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 311.77952,662.6264 44.12544,-0.80843"
> +       id="path7074"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="89.119804"
> +       height="29.11978"
> +       x="337.61874"
> +       y="599.95844" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="381.96436"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="381.96436"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">pipe:1</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 355.53003,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.19646,662.63 41.20492,0.09"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.80901474px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.80901468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 313.03748,722.98723 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467-2"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="273.62674"
> +       y="730.41583"
> +       id="text4351"><tspan
> +         sodipodi:role="line"
> +         id="tspan4353"
> +         x="273.62674"
> +         y="730.41583"
> +         style="font-size:22.50000572px;line-height:1.25">ring:0</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="274.08267"
> +       y="671.30603"
> +       id="text4359"><tspan
> +         sodipodi:role="line"
> +         id="tspan4361"
> +         x="274.08267"
> +         y="671.30603"
> +         style="font-size:22.50000572px;line-height:1.25">ring:1</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.80359"
> +       y="620.5993"
> +       id="text4407"><tspan
> +         sodipodi:role="line"
> +         x="167.80359"
> +         y="620.5993"
> +         id="tspan4411"
> +         style="font-size:22.50000572px;line-height:1.25">pipe:0</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> new file mode 100644
> index 0000000..924e7bf
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> @@ -0,0 +1,564 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_vhost.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="183.00037"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title />
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)" />
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.05093229;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="127.7884"
> +       height="28.949072"
> +       x="105.06117"
> +       y="600.04376" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.09829414;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="139.79459"
> +       height="28.901709"
> +       x="314.95993"
> +       y="600.0675" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="383.83936"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="383.83936"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">virtio_user0</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 353.65503,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.81228518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.15811,662.63183 160.47807,0.0864"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.36748445px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 267.85717,0 267.85717,0 267.85717,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.47279"
> +       y="621.73688"
> +       id="text4407-8-2"><tspan
> +         sodipodi:role="line"
> +         x="167.47279"
> +         y="621.73688"
> +         id="tspan4411-7-7"
> +         style="font-size:22.50000191px;line-height:1.25;stroke-width:0.99999994px">eth_vhost0</tspan></text>
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
> index c739d79..495b9a8 100644
> --- a/docs/guides/tools/index.rst
> +++ b/docs/guides/tools/index.rst
> @@ -12,3 +12,4 @@ Tools
>  
>     sppc/index
>     helpers/index
> +   vdev_test.rst
> diff --git a/docs/guides/tools/vdev_test.rst b/docs/guides/tools/vdev_test.rst
> new file mode 100644
> index 0000000..90a2647
> --- /dev/null
> +++ b/docs/guides/tools/vdev_test.rst
> @@ -0,0 +1,85 @@
> +..  SPDX-License-Identifier: BSD-3-Clause
> +    Copyright(c) 2020 Nippon Telegraph and Telephone Corporation
> +
> +.. _spp_tools_vdev_test:
> +
> +Vdev_test
> +=========
> +
> +Vdev_test is a simple application that it forwards packets received
> +from rx queue to tx queue on the main core. It can become a secondary
> +process of the spp_primary. It is mainly used for testing spp_pipe
> +but it can be used to test any virtual Ethernet devices as well.
> +
> +Usage
> +-----
> +
> +.. code-block:: none
> +
> +    vdev_test [EAL options] -- [--send] [--create devargs] device-name
> +
> +Vdev_test runs foreground and stops when Ctrl-C is pressed. If ``--send``
> +option specified a packet is sent first. The virtual Ethernet device can
> +be created to specify ``--create`` option.
> +
> +.. note::
> +
> +    Since the device can be created by EAL ``--vdev`` option for a
> +    primary process, ``--create`` option mainly used by a secondary
> +    process.
> +
> +Examples
> +--------
> +
> +Examining spp_pipe
> +~~~~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_pipe:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_pipe.*
> +   :width: 50%
> +
> +It is assumed that pipe ports were created beforehand. First run vdev_test
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --proc-type secondary -- spp_pipe0
> +
> +Then run vdev_test with ``--send`` option on another terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 2
> +    $ sudo vdev_test -l 9 -n 4 --proc-type secondary -- --send spp_pipe1
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> +
> +Examining vhost
> +~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_vhost:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_vhost.*
> +   :width: 50%
> +
> +This example is independent of SPP. First run vdev_test using eth_vhost0
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --vdev eht_vhost0,iface=/tmp/sock0,client=1 \
> +      --file-prefix=app1 -- eth_vhost0
> +
> +Then run vdev_test using virtio_user0 with ``--send`` option on another
> +terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 9 -n 4 --vdev virtio_user0,path=/tmp/sock0,server=1 \
> +      --file-prefix=app2 --single-file-segments -- --send virtio_user0
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> -- 
> 2.17.0




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

* Re: [spp] [PATCH v2] docs: add document of vdev_test tool
  2020-05-10 23:43 ` [spp] [PATCH v2] " Itsuro Oda
  2020-05-11  2:53   ` [spp] (x-fn-spp-ml 744) " Hideyuki Yamashita
@ 2020-05-25  3:08   ` Yasufumi Ogawa
  1 sibling, 0 replies; 5+ messages in thread
From: Yasufumi Ogawa @ 2020-05-25  3:08 UTC (permalink / raw)
  To: Itsuro Oda, spp

> This patch adds a document of vdev_test tool.
Acked-by: Yasufumi Ogawa <yasufum.o@gmail.com>

> 
> Signed-off-by: Itsuro Oda <oda@valinux.co.jp>
> ---
> v2:
> * remove a blank line at EOF
> 
>   .../vdev_test/vdev_test_example_pipe.svg      | 611 ++++++++++++++++++
>   .../vdev_test/vdev_test_example_vhost.svg     | 564 ++++++++++++++++
>   docs/guides/tools/index.rst                   |   1 +
>   docs/guides/tools/vdev_test.rst               |  85 +++
>   4 files changed, 1261 insertions(+)
>   create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
>   create mode 100644 docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
>   create mode 100644 docs/guides/tools/vdev_test.rst
> 
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> new file mode 100644
> index 0000000..72f5919
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_pipe.svg
> @@ -0,0 +1,611 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_pipe.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="421.5718"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title></dc:title>
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.78720933;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4297"
> +       cx="273.89044"
> +       cy="724.98724"
> +       rx="39.606403"
> +       ry="19.606396" />
> +    <ellipse
> +       style="opacity:1;fill:#cbffce;fill-opacity:1;stroke:#000000;stroke-width:0.74310595;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="path4301"
> +       cx="273.89044"
> +       cy="666.16315"
> +       rx="39.628456"
> +       ry="18.699877" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="89.119804"
> +       height="29.11978"
> +       x="119.70796"
> +       y="599.95844" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.03222072px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 311.77952,662.6264 44.12544,-0.80843"
> +       id="path7074"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:0.88022333;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="89.119804"
> +       height="29.11978"
> +       x="337.61874"
> +       y="599.95844" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="381.96436"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="381.96436"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">pipe:1</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 355.53003,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.19646,662.63 41.20492,0.09"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.80901474px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.80901468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 313.03748,722.98723 c 93.75001,0 93.75001,0 93.75001,0"
> +       id="path8467-2"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="273.62674"
> +       y="730.41583"
> +       id="text4351"><tspan
> +         sodipodi:role="line"
> +         id="tspan4353"
> +         x="273.62674"
> +         y="730.41583"
> +         style="font-size:22.50000572px;line-height:1.25">ring:0</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="274.08267"
> +       y="671.30603"
> +       id="text4359"><tspan
> +         sodipodi:role="line"
> +         id="tspan4361"
> +         x="274.08267"
> +         y="671.30603"
> +         style="font-size:22.50000572px;line-height:1.25">ring:1</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.80359"
> +       y="620.5993"
> +       id="text4407"><tspan
> +         sodipodi:role="line"
> +         x="167.80359"
> +         y="620.5993"
> +         id="tspan4411"
> +         style="font-size:22.50000572px;line-height:1.25">pipe:0</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> new file mode 100644
> index 0000000..924e7bf
> --- /dev/null
> +++ b/docs/guides/images/tools/vdev_test/vdev_test_example_vhost.svg
> @@ -0,0 +1,564 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   xmlns:dc="http://purl.org/dc/elements/1.1/"
> +   xmlns:cc="http://creativecommons.org/ns#"
> +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> +   xmlns:svg="http://www.w3.org/2000/svg"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   width="152.58044mm"
> +   height="117.89329mm"
> +   viewBox="0 0 540.63939 417.73222"
> +   id="svg2"
> +   version="1.1"
> +   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
> +   sodipodi:docname="vdev_test_example_vhost.svg">
> +  <defs
> +     id="defs4">
> +    <marker
> +       inkscape:stockid="Arrow1Lstart"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lstart"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6666"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(0.8,0,0,0.8,10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker6505"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path6503"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend"
> +       inkscape:collect="always">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker4479"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4481"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="marker1450"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path1448"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5907"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5909"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5813"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5815"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5725"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5727"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5643"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5645"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5421"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5423"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5137"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5139"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5051"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5053"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5017"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5019"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4989"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4991"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow1Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow1Lend"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4462"
> +         d="M 0,0 5,-5 -12.5,0 5,5 Z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
> +         transform="matrix(-0.8,0,0,-0.8,-10,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5567-3"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5569-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:stockid="Arrow2Lend"
> +       orient="auto"
> +       refY="0"
> +       refX="0"
> +       id="Arrow2Lend-7"
> +       style="overflow:visible"
> +       inkscape:isstock="true">
> +      <path
> +         id="path4411-5"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker4627-1"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         inkscape:connector-curvature="0"
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path4629-2" />
> +    </marker>
> +    <marker
> +       inkscape:isstock="true"
> +       style="overflow:visible"
> +       id="marker5091-0"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Arrow2Lend">
> +      <path
> +         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
> +         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
> +         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
> +         id="path5093-6"
> +         inkscape:connector-curvature="0" />
> +    </marker>
> +  </defs>
> +  <sodipodi:namedview
> +     id="base"
> +     pagecolor="#ffffff"
> +     bordercolor="#666666"
> +     borderopacity="1.0"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pageshadow="2"
> +     inkscape:zoom="0.7"
> +     inkscape:cx="183.00037"
> +     inkscape:cy="86.005928"
> +     inkscape:document-units="px"
> +     inkscape:current-layer="layer5"
> +     showgrid="false"
> +     inkscape:window-width="1643"
> +     inkscape:window-height="854"
> +     inkscape:window-x="167"
> +     inkscape:window-y="74"
> +     inkscape:window-maximized="0"
> +     units="mm"
> +     width="230mm"
> +     fit-margin-top="0"
> +     fit-margin-left="0"
> +     fit-margin-right="0"
> +     fit-margin-bottom="0"
> +     inkscape:snap-global="true"
> +     inkscape:snap-bbox="true"
> +     inkscape:snap-nodes="true"
> +     inkscape:snap-others="false"
> +     inkscape:bbox-paths="true"
> +     inkscape:snap-intersection-paths="false"
> +     inkscape:object-nodes="false"
> +     inkscape:object-paths="true"
> +     inkscape:lockguides="true" />
> +  <metadata
> +     id="metadata7">
> +    <rdf:RDF>
> +      <cc:Work
> +         rdf:about="">
> +        <dc:format>image/svg+xml</dc:format>
> +        <dc:type
> +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
> +        <dc:title />
> +      </cc:Work>
> +    </rdf:RDF>
> +  </metadata>
> +  <g
> +     inkscape:label="Host"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.48551643;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4136"
> +       width="539.15393"
> +       height="380.94302"
> +       x="11.101632"
> +       y="475.28351" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer7"
> +     inkscape:label="Host-Resource"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)" />
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer3"
> +     inkscape:label="Container"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <rect
> +       style="opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.05093229;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391"
> +       width="127.7884"
> +       height="28.949072"
> +       x="105.06117"
> +       y="600.04376" />
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer5"
> +     inkscape:label="App"
> +     transform="translate(-10.358874,-474.54075)"
> +     style="display:inline">
> +    <rect
> +       style="opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223"
> +       width="163.33151"
> +       height="39.045811"
> +       x="87.209244"
> +       y="562.58478"
> +       ry="19.522905" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.10747123px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4627)"
> +       d="M 140.0893,722.99672 V 633.28751"
> +       id="path162"
> +       inkscape:connector-curvature="0" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffff6e;fill-opacity:1;stroke:#000000;stroke-width:1.09829414;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4391-6"
> +       width="139.79459"
> +       height="28.901709"
> +       x="314.95993"
> +       y="600.0675" />
> +    <rect
> +       style="display:inline;opacity:1;fill:#ffffd3;fill-opacity:1;stroke:#000000;stroke-width:0.9541887;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
> +       id="rect4223-6"
> +       width="163.3315"
> +       height="39.045807"
> +       x="301.37003"
> +       y="562.58484"
> +       ry="19.522903" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="384.5358"
> +       y="588.19415"
> +       id="text4225-6"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227-0"
> +         x="384.5358"
> +         y="588.19415"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="383.83936"
> +       y="620.48944"
> +       id="text4407-8"><tspan
> +         sodipodi:role="line"
> +         x="383.83936"
> +         y="620.48944"
> +         id="tspan4411-7"
> +         style="font-size:22.50000381px;line-height:1.25;stroke-width:0.99999994px">virtio_user0</tspan></text>
> +    <flowRoot
> +       xml:space="preserve"
> +       id="flowRoot6464"
> +       style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
> +         id="flowRegion6466"><rect
> +           id="rect6468"
> +           width="187.14285"
> +           height="97.14286"
> +           x="722.85712"
> +           y="131.09111" /></flowRegion><flowPara
> +         id="flowPara6470" /></flowRoot>    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 193.82777,631.047 0.36869,31.583"
> +       id="path6472"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="display:inline;fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart)"
> +       d="m 353.65503,630.23137 0.36869,31.583"
> +       id="path6472-0"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.81228518px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 194.15811,662.63183 160.47807,0.0864"
> +       id="path1432"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:1.36748445px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="m 140.2696,723.5229 c 267.85717,0 267.85717,0 267.85717,0"
> +       id="path8467"
> +       inkscape:connector-curvature="0" />
> +    <path
> +       style="fill:none;stroke:#000000;stroke-width:0.93750012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       d="M 406.78749,722.98723 V 629.07821"
> +       id="path8486"
> +       inkscape:connector-curvature="0" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="167.47279"
> +       y="621.73688"
> +       id="text4407-8-2"><tspan
> +         sodipodi:role="line"
> +         x="167.47279"
> +         y="621.73688"
> +         id="tspan4411-7-7"
> +         style="font-size:22.50000191px;line-height:1.25;stroke-width:0.99999994px">eth_vhost0</tspan></text>
> +  </g>
> +  <g
> +     inkscape:groupmode="layer"
> +     id="layer4"
> +     inkscape:label="Label"
> +     style="display:inline"
> +     transform="translate(-10.358874,-474.54075)">
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="170.37502"
> +       y="588.05133"
> +       id="text4225"><tspan
> +         sodipodi:role="line"
> +         id="tspan4227"
> +         x="170.37502"
> +         y="588.05133"
> +         style="font-size:22.50000572px;line-height:1.25">vdev_test</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
> +       x="45.571438"
> +       y="506.36221"
> +       id="text4327"><tspan
> +         sodipodi:role="line"
> +         id="tspan4329"
> +         x="45.571438"
> +         y="506.36221"
> +         style="font-size:22.50000572px;line-height:1.25">host</tspan></text>
> +  </g>
> +</svg>
> diff --git a/docs/guides/tools/index.rst b/docs/guides/tools/index.rst
> index c739d79..495b9a8 100644
> --- a/docs/guides/tools/index.rst
> +++ b/docs/guides/tools/index.rst
> @@ -12,3 +12,4 @@ Tools
>   
>      sppc/index
>      helpers/index
> +   vdev_test.rst
> diff --git a/docs/guides/tools/vdev_test.rst b/docs/guides/tools/vdev_test.rst
> new file mode 100644
> index 0000000..90a2647
> --- /dev/null
> +++ b/docs/guides/tools/vdev_test.rst
> @@ -0,0 +1,85 @@
> +..  SPDX-License-Identifier: BSD-3-Clause
> +    Copyright(c) 2020 Nippon Telegraph and Telephone Corporation
> +
> +.. _spp_tools_vdev_test:
> +
> +Vdev_test
> +=========
> +
> +Vdev_test is a simple application that it forwards packets received
> +from rx queue to tx queue on the main core. It can become a secondary
> +process of the spp_primary. It is mainly used for testing spp_pipe
> +but it can be used to test any virtual Ethernet devices as well.
> +
> +Usage
> +-----
> +
> +.. code-block:: none
> +
> +    vdev_test [EAL options] -- [--send] [--create devargs] device-name
> +
> +Vdev_test runs foreground and stops when Ctrl-C is pressed. If ``--send``
> +option specified a packet is sent first. The virtual Ethernet device can
> +be created to specify ``--create`` option.
> +
> +.. note::
> +
> +    Since the device can be created by EAL ``--vdev`` option for a
> +    primary process, ``--create`` option mainly used by a secondary
> +    process.
> +
> +Examples
> +--------
> +
> +Examining spp_pipe
> +~~~~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_pipe:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_pipe.*
> +   :width: 50%
> +
> +It is assumed that pipe ports were created beforehand. First run vdev_test
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --proc-type secondary -- spp_pipe0
> +
> +Then run vdev_test with ``--send`` option on another terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 2
> +    $ sudo vdev_test -l 9 -n 4 --proc-type secondary -- --send spp_pipe1
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> +
> +Examining vhost
> +~~~~~~~~~~~~~~~
> +
> +.. _figure_vdev_test_example_vhost:
> +
> +.. figure:: ../images/tools/vdev_test/vdev_test_example_vhost.*
> +   :width: 50%
> +
> +This example is independent of SPP. First run vdev_test using eth_vhost0
> +without ``--send`` option.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 8 -n 4 --vdev eht_vhost0,iface=/tmp/sock0,client=1 \
> +      --file-prefix=app1 -- eth_vhost0
> +
> +Then run vdev_test using virtio_user0 with ``--send`` option on another
> +terminal.
> +
> +.. code-block:: console
> +
> +    # terminal 1
> +    $ sudo vdev_test -l 9 -n 4 --vdev virtio_user0,path=/tmp/sock0,server=1 \
> +      --file-prefix=app2 --single-file-segments -- --send virtio_user0
> +
> +Press Ctrl-C to stop processes on both terminals after for a while.
> 

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

end of thread, other threads:[~2020-05-25  3:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-12 23:02 [spp] [PATCH] docs: add document of vdev_test tool Itsuro Oda
2020-04-30  2:36 ` [spp] (x-fn-spp-ml 675) " Hideyuki Yamashita
2020-05-10 23:43 ` [spp] [PATCH v2] " Itsuro Oda
2020-05-11  2:53   ` [spp] (x-fn-spp-ml 744) " Hideyuki Yamashita
2020-05-25  3:08   ` [spp] " Yasufumi Ogawa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).