* [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).