Add Neutron density test plan and results
Change-Id: I64d186c1c5e4c759ff692d4e411b6b9d91805ae3
@ -7,8 +7,7 @@ Neutron features test plans
|
|||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
:glob:
|
||||||
:maxdepth: 3
|
:maxdepth: 3
|
||||||
|
|
||||||
l3_ha/plan
|
*/plan
|
||||||
resource_density/plan
|
|
||||||
agent_restart/plan
|
|
||||||
|
564
doc/source/test_plans/neutron_features/vm_density/deployment.svg
Normal file
@ -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="210mm"
|
||||||
|
height="148mm"
|
||||||
|
viewBox="0 0 744.09449 524.40944"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="deployment.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0.0"
|
||||||
|
refX="0.0"
|
||||||
|
id="Arrow1Mend"
|
||||||
|
style="overflow:visible;"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
id="path9869"
|
||||||
|
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||||
|
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
|
||||||
|
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible"
|
||||||
|
id="marker7286"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#37c8ab;fill-opacity:1;fill-rule:evenodd;stroke:#37c8ab;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||||
|
id="path7288" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:isstock="true"
|
||||||
|
style="overflow:visible"
|
||||||
|
id="marker7240"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||||
|
id="path7242" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
orient="auto"
|
||||||
|
refY="0"
|
||||||
|
refX="0"
|
||||||
|
id="marker7200"
|
||||||
|
style="overflow:visible"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path7202"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||||
|
style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.98994949"
|
||||||
|
inkscape:cx="394.15889"
|
||||||
|
inkscape:cy="288.89394"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1855"
|
||||||
|
inkscape:window-height="1056"
|
||||||
|
inkscape:window-x="65"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-527.95276)">
|
||||||
|
<path
|
||||||
|
style="fill:#ff7f2a;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:2.5, 2.50000000000000000;stroke-dashoffset:0"
|
||||||
|
d="m 83.842661,751.33675 12.121831,0"
|
||||||
|
id="path8319"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#800080;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="rect3342"
|
||||||
|
width="189.42633"
|
||||||
|
height="198.80818"
|
||||||
|
x="70.560921"
|
||||||
|
y="606.18964"
|
||||||
|
rx="11.434299"
|
||||||
|
ry="18.566986" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text3350"
|
||||||
|
y="755.901"
|
||||||
|
x="170.55754"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="scale(0.97958908,1.0208362)"><tspan
|
||||||
|
y="755.901"
|
||||||
|
x="170.55754"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff"
|
||||||
|
id="tspan7398">compute node 1</tspan></text>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text3436"
|
||||||
|
y="731.74591"
|
||||||
|
x="623.22168"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="scale(0.97958908,1.0208362)"><tspan
|
||||||
|
y="731.74591"
|
||||||
|
x="623.22168"
|
||||||
|
id="tspan3438"
|
||||||
|
sodipodi:role="line">slave_2</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="7.8269691"
|
||||||
|
rx="7.5107188"
|
||||||
|
y="931.41754"
|
||||||
|
x="307.83142"
|
||||||
|
height="83.808189"
|
||||||
|
width="124.42634"
|
||||||
|
id="rect4274"
|
||||||
|
style="fill:#ff9955;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text4276"
|
||||||
|
y="949.33862"
|
||||||
|
x="377.34213"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="scale(0.97958908,1.0208362)"><tspan
|
||||||
|
y="949.33862"
|
||||||
|
x="377.34213"
|
||||||
|
id="tspan4278"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle">monitoring</tspan><tspan
|
||||||
|
y="970.90265"
|
||||||
|
x="377.34213"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle"
|
||||||
|
id="tspan7198">server</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:11.25px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="228.77196"
|
||||||
|
y="233.99899"
|
||||||
|
id="text4280"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4282"
|
||||||
|
x="228.77196"
|
||||||
|
y="233.99899" /></text>
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#e6e6e6;stroke-width:2.82461405;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="rect4693"
|
||||||
|
width="697.15302"
|
||||||
|
height="485.94333"
|
||||||
|
x="22.085979"
|
||||||
|
y="548.15527"
|
||||||
|
rx="6.5504303"
|
||||||
|
ry="8.3168802" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:#e6e6e6;stroke-width:3.19071031;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="rect4703"
|
||||||
|
width="647.75543"
|
||||||
|
height="338.68234"
|
||||||
|
x="46.166878"
|
||||||
|
y="568.17017"
|
||||||
|
rx="7.3791161"
|
||||||
|
ry="12.652016" />
|
||||||
|
<text
|
||||||
|
transform="scale(0.97958908,1.0208362)"
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#666666;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="604.56537"
|
||||||
|
y="877.90247"
|
||||||
|
id="text4726"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';fill:#666666"
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4728"
|
||||||
|
x="604.56537"
|
||||||
|
y="877.90247">OpenStack</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="fill:#b3b3b3;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="rect4262"
|
||||||
|
width="337.3356"
|
||||||
|
height="29.630671"
|
||||||
|
x="201.37679"
|
||||||
|
y="854.42059"
|
||||||
|
rx="9.7375231"
|
||||||
|
ry="7.8269691" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="373.55719"
|
||||||
|
y="857.56354"
|
||||||
|
id="text4264"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
transform="scale(0.97958908,1.0208362)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4266"
|
||||||
|
x="373.55719"
|
||||||
|
y="857.56354">virtual router</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0"
|
||||||
|
id="rect7400"
|
||||||
|
width="146.42856"
|
||||||
|
height="23.57143"
|
||||||
|
x="92.059807"
|
||||||
|
y="618.93365"
|
||||||
|
rx="12.31758"
|
||||||
|
ry="9.1478748" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="133.1647"
|
||||||
|
y="635.21936"
|
||||||
|
id="text7406"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan7408"
|
||||||
|
x="133.1647"
|
||||||
|
y="635.21936"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="618.93365"
|
||||||
|
x="92.059807"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412"
|
||||||
|
y="635.21936"
|
||||||
|
x="133.1647"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="635.21936"
|
||||||
|
x="133.1647"
|
||||||
|
id="tspan7414"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="656.71851"
|
||||||
|
x="92.059807"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410-1"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7"
|
||||||
|
y="673.00421"
|
||||||
|
x="133.1647"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="673.00421"
|
||||||
|
x="133.1647"
|
||||||
|
id="tspan7414-8"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="740.05615"
|
||||||
|
x="92.059807"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410-1-5"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7-7"
|
||||||
|
y="756.34186"
|
||||||
|
x="133.1647"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="756.34186"
|
||||||
|
x="133.1647"
|
||||||
|
id="tspan7414-8-4"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g8321"
|
||||||
|
transform="translate(-3.1282349,0)">
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44586"
|
||||||
|
cx="129.25891"
|
||||||
|
id="path8024"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44592"
|
||||||
|
cx="168.1498"
|
||||||
|
id="path8024-1"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="711.45605"
|
||||||
|
cx="207.54573"
|
||||||
|
id="path8024-8"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7-7-5"
|
||||||
|
y="790.8114"
|
||||||
|
x="113.6049"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000"
|
||||||
|
y="790.8114"
|
||||||
|
x="113.6049"
|
||||||
|
id="tspan7414-8-4-9"
|
||||||
|
sodipodi:role="line">compute node</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#800080;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect3342-5"
|
||||||
|
width="189.42633"
|
||||||
|
height="198.80818"
|
||||||
|
x="478.14395"
|
||||||
|
y="604.38672"
|
||||||
|
rx="11.434299"
|
||||||
|
ry="18.566986" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text3350-3"
|
||||||
|
y="754.13483"
|
||||||
|
x="586.63312"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"
|
||||||
|
transform="scale(0.97958908,1.0208362)"><tspan
|
||||||
|
y="754.13483"
|
||||||
|
x="586.63312"
|
||||||
|
sodipodi:role="line"
|
||||||
|
style="text-align:center;text-anchor:middle;fill:#ffffff"
|
||||||
|
id="tspan7398-8">compute node 1</tspan></text>
|
||||||
|
<rect
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0"
|
||||||
|
id="rect7400-8"
|
||||||
|
width="146.42856"
|
||||||
|
height="23.57143"
|
||||||
|
x="499.64285"
|
||||||
|
y="617.13074"
|
||||||
|
rx="12.31758"
|
||||||
|
ry="9.1478748" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="540.74774"
|
||||||
|
y="633.41644"
|
||||||
|
id="text7406-3"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan7408-1"
|
||||||
|
x="540.74774"
|
||||||
|
y="633.41644"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="617.13074"
|
||||||
|
x="499.64285"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410-8"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-9"
|
||||||
|
y="633.41644"
|
||||||
|
x="540.74774"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="633.41644"
|
||||||
|
x="540.74774"
|
||||||
|
id="tspan7414-6"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="654.91559"
|
||||||
|
x="499.64285"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410-1-4"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7-3"
|
||||||
|
y="671.20129"
|
||||||
|
x="540.74774"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="671.20129"
|
||||||
|
x="540.74774"
|
||||||
|
id="tspan7414-8-3"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<rect
|
||||||
|
ry="9.1478748"
|
||||||
|
rx="12.31758"
|
||||||
|
y="738.25323"
|
||||||
|
x="499.64285"
|
||||||
|
height="23.57143"
|
||||||
|
width="146.42856"
|
||||||
|
id="rect7410-1-5-3"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:0" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7-7-8"
|
||||||
|
y="754.53894"
|
||||||
|
x="540.74774"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff"
|
||||||
|
y="754.53894"
|
||||||
|
x="540.74774"
|
||||||
|
id="tspan7414-8-4-6"
|
||||||
|
sodipodi:role="line">instance</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g8321-0"
|
||||||
|
transform="translate(404.45482,-1.802949)">
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44586"
|
||||||
|
cx="129.25891"
|
||||||
|
id="path8024-4"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44592"
|
||||||
|
cx="168.1498"
|
||||||
|
id="path8024-1-8"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="711.45605"
|
||||||
|
cx="207.54573"
|
||||||
|
id="path8024-8-8"
|
||||||
|
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text7412-7-7-5-9"
|
||||||
|
y="789.00848"
|
||||||
|
x="521.18793"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000"
|
||||||
|
y="789.00848"
|
||||||
|
x="521.18793"
|
||||||
|
id="tspan7414-8-4-9-7"
|
||||||
|
sodipodi:role="line">compute node</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g8321-4"
|
||||||
|
transform="translate(203.74054,-1.4458927)"
|
||||||
|
style="fill:#800080">
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44586"
|
||||||
|
cx="129.25891"
|
||||||
|
id="path8024-0"
|
||||||
|
style="fill:#800080;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="710.44592"
|
||||||
|
cx="168.1498"
|
||||||
|
id="path8024-1-6"
|
||||||
|
style="fill:#800080;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<circle
|
||||||
|
r="4.0406103"
|
||||||
|
cy="711.45605"
|
||||||
|
cx="207.54573"
|
||||||
|
id="path8024-8-2"
|
||||||
|
style="fill:#800080;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 238.57143,632.36221 2.85714,0 69.28572,0 0,225.71428"
|
||||||
|
id="path10166"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 237.85714,670.21935 60.71429,0 0,184.28572"
|
||||||
|
id="path10168"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 237.85714,752.36221 48.57143,0 0,102.85714"
|
||||||
|
id="path10170"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 498.57143,628.07649 -75,0 0,227.85715"
|
||||||
|
id="path10172"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 499.28571,668.07649 -62.14285,0 0,190"
|
||||||
|
id="path10174"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 498.57143,751.64792 -47.14286,0 0,103.57143"
|
||||||
|
id="path10176"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 368.42857,883.79078 0,47.14286"
|
||||||
|
id="path10178"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 446 KiB |
After Width: | Height: | Size: 517 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 195 KiB |
After Width: | Height: | Size: 204 KiB |
After Width: | Height: | Size: 129 KiB |
304
doc/source/test_plans/neutron_features/vm_density/plan.rst
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
.. _neutron_vm_density_test_plan:
|
||||||
|
|
||||||
|
=================================
|
||||||
|
OpenStack Neutron Density Testing
|
||||||
|
=================================
|
||||||
|
|
||||||
|
:status: **ready**
|
||||||
|
:version: 1.0
|
||||||
|
|
||||||
|
:Abstract:
|
||||||
|
|
||||||
|
With density testing we are able to launch many instances on a single
|
||||||
|
OpenStack cluster. But except obtaining high numbers we also would like to
|
||||||
|
ensure that all instances are properly wired into the network and,
|
||||||
|
which is more important, have connectivity with public network.
|
||||||
|
|
||||||
|
|
||||||
|
Test Plan
|
||||||
|
=========
|
||||||
|
|
||||||
|
The goal of this test is to launch as many as possible instances in the
|
||||||
|
OpenStack cloud and verify that all of them have correct connectivity with
|
||||||
|
public network. Upon start each instance reports itself to the external
|
||||||
|
monitoring server. On success server logs should contain instances' IPs and a
|
||||||
|
number of attempts to get IP from metadata and send it to the server.
|
||||||
|
|
||||||
|
|
||||||
|
Test Environment
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Preparation
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
This test plan is performed against existing OpenStack cloud. The monitoring
|
||||||
|
server is deployed on a machine outside of the cloud.
|
||||||
|
|
||||||
|
.. image:: deployment.svg
|
||||||
|
|
||||||
|
During each iteration instances are created and connected to the same Neutron
|
||||||
|
network, which is plugged into Neutron router that connects OpenStack with
|
||||||
|
external network. The case with multiple Neutron networks being used may also
|
||||||
|
be considered.
|
||||||
|
|
||||||
|
|
||||||
|
Environment description
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The environment description includes hardware specification of servers,
|
||||||
|
network parameters, operation system and OpenStack deployment characteristics.
|
||||||
|
|
||||||
|
Hardware
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
This section contains list of all types of hardware nodes.
|
||||||
|
|
||||||
|
+-----------+-------+----------------------------------------------------+
|
||||||
|
| Parameter | Value | Comments |
|
||||||
|
+-----------+-------+----------------------------------------------------+
|
||||||
|
| model | | e.g. Supermicro X9SRD-F |
|
||||||
|
+-----------+-------+----------------------------------------------------+
|
||||||
|
| CPU | | e.g. 6 x Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz |
|
||||||
|
+-----------+-------+----------------------------------------------------+
|
||||||
|
| role | | e.g. compute or network |
|
||||||
|
+-----------+-------+----------------------------------------------------+
|
||||||
|
|
||||||
|
Network
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
This section contains list of interfaces and network parameters.
|
||||||
|
For complicated cases this section may include topology diagram and switch
|
||||||
|
parameters.
|
||||||
|
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| Parameter | Value | Comments |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| network role | | e.g. provider or public |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| card model | | e.g. Intel |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| driver | | e.g. ixgbe |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| speed | | e.g. 10G or 1G |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| MTU | | e.g. 9000 |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
| offloading modes | | e.g. default |
|
||||||
|
+------------------+-------+-------------------------+
|
||||||
|
|
||||||
|
Software
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
This section describes installed software.
|
||||||
|
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| Parameter | Value | Comments |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| OS | | e.g. Ubuntu 14.04.3 |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| OpenStack | | e.g. Mitaka |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| Hypervisor | | e.g. KVM |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| Neutron plugin | | e.g. ML2 + OVS |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| L2 segmentation | | e.g. VxLAN |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
| virtual routers | | e.g. DVR |
|
||||||
|
+-----------------+-------+---------------------------+
|
||||||
|
|
||||||
|
Test Case 1: VM density check
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Description
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
The goal of this test is to launch as many as possible instances in the
|
||||||
|
OpenStack cloud and verify that all of them have correct connectivity with
|
||||||
|
public network. Instances can be launched in batches (i.e. via Heat). When
|
||||||
|
instance starts it sends IP to monitoring server located outside of the
|
||||||
|
cloud.
|
||||||
|
|
||||||
|
The test is treated as successful if all instances report their status. As an
|
||||||
|
extension for this test plan reverted test case might be taken into account:
|
||||||
|
when external resource is trying to connect to each VM using floating IP
|
||||||
|
address. This should be treated as a separate test case.
|
||||||
|
|
||||||
|
|
||||||
|
List of performance metrics
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
======== =============== ====================== ======================================
|
||||||
|
Priority Value Measurement Units Description
|
||||||
|
======== =============== ====================== ======================================
|
||||||
|
1 Total count Total number of instances
|
||||||
|
1 Density count per compute node Max instances per compute node
|
||||||
|
======== =============== ====================== ======================================
|
||||||
|
|
||||||
|
|
||||||
|
Tools
|
||||||
|
-----
|
||||||
|
|
||||||
|
To execute the test plan:
|
||||||
|
|
||||||
|
1. Disable quotas in OpenStack cloud (since we are going far beyond limits that
|
||||||
|
are usually allowed):
|
||||||
|
|
||||||
|
.. literalinclude:: scripts/unset_quotas.sh
|
||||||
|
:language: bash
|
||||||
|
|
||||||
|
2. Configure a machine for monitoring server. Copy the script into it:
|
||||||
|
|
||||||
|
.. literalinclude:: scripts/server.py
|
||||||
|
:language: python
|
||||||
|
|
||||||
|
Copy Heat teamplate:
|
||||||
|
|
||||||
|
.. literalinclude:: scripts/instance_metadata.hot
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
|
||||||
|
3. Start the server:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
python server.py -p <PORT> -l <LOG_DIR>
|
||||||
|
|
||||||
|
The server writes logs about incoming connections into
|
||||||
|
``/tmp/instance_<timestamp>.txt`` file. Each line contains instance's IP
|
||||||
|
identifying which instance sent the report.
|
||||||
|
|
||||||
|
.. note:: If the server is restarted, it will create a new
|
||||||
|
"instance_<timestamp>.txt" file with new timestamp
|
||||||
|
|
||||||
|
|
||||||
|
4. Provision VM instances:
|
||||||
|
|
||||||
|
#. Define number of compute nodes you have in the cluster. Let's say this
|
||||||
|
number is ``NUM_COMPUTES``.
|
||||||
|
#. Make sure that ``IMAGE_ID`` and ``FLAVOR`` exist.
|
||||||
|
#. Put address of monitoring server into ``SERVER_ADDRESS``.
|
||||||
|
#. Run Heat stack using the template from above:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
heat stack-create -f instance_metadata.hot \
|
||||||
|
-P "image=IMAGE_ID;flavor=FLAVOR;instance_count=NUM_COMPUTES;\
|
||||||
|
server_endpoint=SERVER_ADDRESS" STACK_NAME
|
||||||
|
|
||||||
|
#. Repeat step 4 as many times as you need.
|
||||||
|
#. Each step monitor ``instances_<timestamp>.txt`` using ``wc -l`` to
|
||||||
|
validate that all instances are booted and connected to the HTTP server.
|
||||||
|
|
||||||
|
Test Case 2: Additional integrity check
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
As an option, one more test can be run between density
|
||||||
|
`Test Case 1: VM density check`_ and other researches on the environment (or
|
||||||
|
between multiple density tests if they are run against the same OpenStack
|
||||||
|
environment). The idea of this test is to create a group of resources and
|
||||||
|
verify that it stays persistent no matter what other operations are performed
|
||||||
|
on the environment (resources creation/deletion, heavy workloads, etc.).
|
||||||
|
|
||||||
|
Testing workflow
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Create 20 instances in two server groups `server-group-floating` and
|
||||||
|
`server-group-non-floating` in proportion 10:10, with each server group having
|
||||||
|
the anti-affinity policy. Instances from different server groups are located in
|
||||||
|
different subnets plugged into a router. Instances from `server-group-floating`
|
||||||
|
have assigned floating IPs while instances from `server-group-non-floating`
|
||||||
|
have only fixed IPs.
|
||||||
|
|
||||||
|
.. image:: integrity_images/integrity1.png
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
For each of the instances the following connectivity checks are made:
|
||||||
|
|
||||||
|
1. SSH into an instance.
|
||||||
|
2. Ping an external resource (eg. 8.8.8.8)
|
||||||
|
3. Ping other VMs (by fixed or floating IPs)
|
||||||
|
|
||||||
|
.. image:: integrity_images/integrity2.png
|
||||||
|
:alt: Traffic flow during connectivity check
|
||||||
|
:width: 650px
|
||||||
|
|
||||||
|
Lists of IPs to ping from VM are formed in a way to check all possible
|
||||||
|
combinations with minimum redundancy. Having VMs from different subnets with
|
||||||
|
and without floating IPs ping each other and external resource (8.8.8.8) allows
|
||||||
|
to check that all possible traffic routes are working, i.e.:
|
||||||
|
|
||||||
|
From fixed IP to fixed IP in the same subnet:
|
||||||
|
|
||||||
|
.. image:: integrity_images/route1.png
|
||||||
|
:alt: From fixed IP to fixed IP in the same subnet
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
From fixed IP to fixed IP in different subnets:
|
||||||
|
|
||||||
|
.. image:: integrity_images/route2.png
|
||||||
|
:alt: From fixed IP to fixed IP in different subnets
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
From floating IP to fixed IP (same path as in 2):
|
||||||
|
|
||||||
|
.. image:: integrity_images/route3.png
|
||||||
|
:alt: From floating IP to fixed IP (same path as in 2)
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
From floating IP to floating IP:
|
||||||
|
|
||||||
|
.. image:: integrity_images/route4.png
|
||||||
|
:alt: From floating IP to floating IP
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
From fixed IP to floating IP:
|
||||||
|
|
||||||
|
.. image:: integrity_images/route5.png
|
||||||
|
:alt: From fixed IP to floating IP
|
||||||
|
:width: 550px
|
||||||
|
|
||||||
|
Test steps
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
* Create integrity stack using the following Heat template:
|
||||||
|
|
||||||
|
.. literalinclude:: scripts/integrity_vm.hot
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
Use this command to create a Heat stack:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
heat stack-create -f integrity_check/integrity_vm.hot -P "image=IMAGE_ID;flavor=m1.micro;instance_count_floating=10;instance_count_non_floating=10" integrity_stack
|
||||||
|
|
||||||
|
* Assign floating IPs to instances
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
assign_floatingips --sg-floating nova_server_group_floating
|
||||||
|
|
||||||
|
* Run connectivity check
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
connectivity_check -s ~/ips.json
|
||||||
|
|
||||||
|
.. note:: ``~/ips.json`` is a path to file used to store instances' IPs.
|
||||||
|
|
||||||
|
.. note:: Make sure to run this check only on controller with qdhcp namespace
|
||||||
|
of integrity_network.
|
||||||
|
|
||||||
|
* At the very end of the testing please cleaunup an integrity stack:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
assign_floatingips --sg-floating nova_server_group_floating --cleanup
|
||||||
|
heat stack-delete integrity_stack
|
||||||
|
rm ~/ips.json
|
||||||
|
|
||||||
|
Reports
|
||||||
|
=======
|
||||||
|
|
||||||
|
Test plan execution reports:
|
||||||
|
* :ref:`neutron_vm_density_test_report`
|
@ -0,0 +1,109 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: Template to create multiple instances.
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
image:
|
||||||
|
type: string
|
||||||
|
description: Image used for servers
|
||||||
|
flavor:
|
||||||
|
type: string
|
||||||
|
description: flavor used by the servers
|
||||||
|
default: m1.micro
|
||||||
|
constraints:
|
||||||
|
- custom_constraint: nova.flavor
|
||||||
|
public_network:
|
||||||
|
type: string
|
||||||
|
label: Public network name or ID
|
||||||
|
description: Public network with floating IP addresses.
|
||||||
|
default: admin_floating_net
|
||||||
|
instance_count:
|
||||||
|
type: number
|
||||||
|
description: Number of instances to create
|
||||||
|
default: 1
|
||||||
|
server_endpoint:
|
||||||
|
type: string
|
||||||
|
description: Server endpoint address
|
||||||
|
cidr:
|
||||||
|
type: string
|
||||||
|
description: Private subnet CIDR
|
||||||
|
|
||||||
|
resources:
|
||||||
|
|
||||||
|
private_network:
|
||||||
|
type: OS::Neutron::Net
|
||||||
|
|
||||||
|
private_subnet:
|
||||||
|
type: OS::Neutron::Subnet
|
||||||
|
properties:
|
||||||
|
network_id: { get_resource: private_network }
|
||||||
|
cidr: { get_param: cidr }
|
||||||
|
dns_nameservers:
|
||||||
|
- 8.8.8.8
|
||||||
|
|
||||||
|
router:
|
||||||
|
type: OS::Neutron::Router
|
||||||
|
properties:
|
||||||
|
external_gateway_info:
|
||||||
|
network: { get_param: public_network }
|
||||||
|
|
||||||
|
router-interface:
|
||||||
|
type: OS::Neutron::RouterInterface
|
||||||
|
properties:
|
||||||
|
router_id: { get_resource: router }
|
||||||
|
subnet: { get_resource: private_subnet }
|
||||||
|
|
||||||
|
server_security_group:
|
||||||
|
type: OS::Neutron::SecurityGroup
|
||||||
|
properties:
|
||||||
|
rules: [
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: tcp,
|
||||||
|
port_range_min: 1,
|
||||||
|
port_range_max: 65535},
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: udp,
|
||||||
|
port_range_min: 1,
|
||||||
|
port_range_max: 65535},
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: icmp}]
|
||||||
|
|
||||||
|
policy_group:
|
||||||
|
type: OS::Nova::ServerGroup
|
||||||
|
properties:
|
||||||
|
name: nova-server-group
|
||||||
|
policies: [anti-affinity]
|
||||||
|
|
||||||
|
server_group:
|
||||||
|
type: OS::Heat::ResourceGroup
|
||||||
|
properties:
|
||||||
|
count: { get_param: instance_count}
|
||||||
|
resource_def:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
image: { get_param: image }
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
networks:
|
||||||
|
- subnet: { get_resource: private_subnet }
|
||||||
|
scheduler_hints: { group: { get_resource: policy_group} }
|
||||||
|
security_groups: [{get_resource: server_security_group}]
|
||||||
|
user_data_format: RAW
|
||||||
|
user_data:
|
||||||
|
str_replace:
|
||||||
|
template: |
|
||||||
|
#!/bin/sh -x
|
||||||
|
RETRY_COUNT=${RETRY_COUNT:-10}
|
||||||
|
RETRY_DELAY=${RETRY_DELAY:-3}
|
||||||
|
for i in `seq 1 $RETRY_COUNT`; do
|
||||||
|
instance_ip=`curl http://169.254.169.254/latest/meta-data/local-ipv4`
|
||||||
|
[[ -n "$instance_ip" ]] && break
|
||||||
|
echo "Retry get_instance_ip $i"
|
||||||
|
sleep $RETRY_DELAY
|
||||||
|
done
|
||||||
|
for j in `seq 1 $RETRY_COUNT`; do
|
||||||
|
curl -vX POST http://$SERVER_ENDPOINT:4242/ -d "{\"instance_ip\": \"$instance_ip\", \"retry_get\": $i, \"retry_send\": $j}"
|
||||||
|
[ $? = 0 ] && break
|
||||||
|
echo "Retry send_instance_ip $j"
|
||||||
|
sleep $RETRY_DELAY
|
||||||
|
done
|
||||||
|
params:
|
||||||
|
"$SERVER_ENDPOINT": { get_param: server_endpoint }
|
@ -0,0 +1,126 @@
|
|||||||
|
heat_template_version: 2013-05-23
|
||||||
|
description: Template to create multiple instances.
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
image:
|
||||||
|
type: string
|
||||||
|
description: Image used for servers
|
||||||
|
flavor:
|
||||||
|
type: string
|
||||||
|
description: flavor used by the servers
|
||||||
|
default: m1.micro
|
||||||
|
constraints:
|
||||||
|
- custom_constraint: nova.flavor
|
||||||
|
public_network:
|
||||||
|
type: string
|
||||||
|
label: Public network name or ID
|
||||||
|
description: Public network with floating IP addresses.
|
||||||
|
default: admin_floating_net
|
||||||
|
instance_count_floating:
|
||||||
|
type: number
|
||||||
|
description: Number of instances to create
|
||||||
|
default: 1
|
||||||
|
instance_count_non_floating:
|
||||||
|
type: number
|
||||||
|
description: Number of instances to create
|
||||||
|
default: 1
|
||||||
|
|
||||||
|
|
||||||
|
resources:
|
||||||
|
|
||||||
|
private_network:
|
||||||
|
type: OS::Neutron::Net
|
||||||
|
properties:
|
||||||
|
name: integrity_network
|
||||||
|
|
||||||
|
private_subnet_floating:
|
||||||
|
type: OS::Neutron::Subnet
|
||||||
|
properties:
|
||||||
|
name: integrity_floating_subnet
|
||||||
|
network_id: { get_resource: private_network }
|
||||||
|
cidr: 10.10.10.0/24
|
||||||
|
dns_nameservers:
|
||||||
|
- 8.8.8.8
|
||||||
|
|
||||||
|
private_subnet_non_floating:
|
||||||
|
type: OS::Neutron::Subnet
|
||||||
|
properties:
|
||||||
|
name: integrity_non_floating_subnet
|
||||||
|
network_id: { get_resource: private_network }
|
||||||
|
cidr: 20.20.20.0/24
|
||||||
|
dns_nameservers:
|
||||||
|
- 8.8.8.8
|
||||||
|
|
||||||
|
router:
|
||||||
|
type: OS::Neutron::Router
|
||||||
|
properties:
|
||||||
|
name: integrity_router
|
||||||
|
external_gateway_info:
|
||||||
|
network: { get_param: public_network }
|
||||||
|
|
||||||
|
router_interface_floating:
|
||||||
|
type: OS::Neutron::RouterInterface
|
||||||
|
properties:
|
||||||
|
router_id: { get_resource: router }
|
||||||
|
subnet: { get_resource: private_subnet_floating }
|
||||||
|
|
||||||
|
router_interface_non_floating:
|
||||||
|
type: OS::Neutron::RouterInterface
|
||||||
|
properties:
|
||||||
|
router_id: { get_resource: router }
|
||||||
|
subnet: { get_resource: private_subnet_non_floating }
|
||||||
|
|
||||||
|
server_security_group:
|
||||||
|
type: OS::Neutron::SecurityGroup
|
||||||
|
properties:
|
||||||
|
rules: [
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: tcp,
|
||||||
|
port_range_min: 1,
|
||||||
|
port_range_max: 65535},
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: udp,
|
||||||
|
port_range_min: 1,
|
||||||
|
port_range_max: 65535},
|
||||||
|
{remote_ip_prefix: 0.0.0.0/0,
|
||||||
|
protocol: icmp}]
|
||||||
|
|
||||||
|
policy_group_floating:
|
||||||
|
type: OS::Nova::ServerGroup
|
||||||
|
properties:
|
||||||
|
name: nova_server_group_floating
|
||||||
|
policies: [anti-affinity]
|
||||||
|
|
||||||
|
policy_group_non_floating:
|
||||||
|
type: OS::Nova::ServerGroup
|
||||||
|
properties:
|
||||||
|
name: nova_server_group_non_floating
|
||||||
|
policies: [anti-affinity]
|
||||||
|
|
||||||
|
server_group_floating:
|
||||||
|
type: OS::Heat::ResourceGroup
|
||||||
|
properties:
|
||||||
|
count: { get_param: instance_count_floating}
|
||||||
|
resource_def:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
image: { get_param: image }
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
networks:
|
||||||
|
- subnet: { get_resource: private_subnet_floating }
|
||||||
|
scheduler_hints: { group: { get_resource: policy_group_floating} }
|
||||||
|
security_groups: [{get_resource: server_security_group}]
|
||||||
|
|
||||||
|
server_group_non_floating:
|
||||||
|
type: OS::Heat::ResourceGroup
|
||||||
|
properties:
|
||||||
|
count: { get_param: instance_count_non_floating}
|
||||||
|
resource_def:
|
||||||
|
type: OS::Nova::Server
|
||||||
|
properties:
|
||||||
|
image: { get_param: image }
|
||||||
|
flavor: { get_param: flavor }
|
||||||
|
networks:
|
||||||
|
- subnet: { get_resource: private_subnet_non_floating }
|
||||||
|
scheduler_hints: { group: { get_resource: policy_group_non_floating} }
|
||||||
|
security_groups: [{get_resource: server_security_group}]
|
@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
# This script setups simple HTTP server that listens on a given port.
|
||||||
|
# When a server is started it creates a log file with name in the format
|
||||||
|
# "instance_<timestamp>.txt". Save directory is also configured
|
||||||
|
# (defaults to /tmp).
|
||||||
|
# Once special incoming POST request comes this server logs it
|
||||||
|
# to the log file."
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
from BaseHTTPServer import BaseHTTPRequestHandler
|
||||||
|
from BaseHTTPServer import HTTPServer
|
||||||
|
from datetime import datetime
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
FILE_NAME = "instances_{:%Y_%m_%d_%H:%M:%S}.txt".format(datetime.now())
|
||||||
|
|
||||||
|
|
||||||
|
class PostHandler(BaseHTTPRequestHandler):
|
||||||
|
def do_POST(self):
|
||||||
|
try:
|
||||||
|
data = self._receive_data()
|
||||||
|
except Exception as err:
|
||||||
|
LOG.exception("Failed to process request: %s", err)
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
LOG.info("Incoming connection: ip=%(ip)s, %(data)s",
|
||||||
|
{"ip": self.client_address[0], "data": data})
|
||||||
|
|
||||||
|
def _receive_data(self):
|
||||||
|
length = int(self.headers.getheader('content-length'))
|
||||||
|
data = json.loads(self.rfile.read(length))
|
||||||
|
|
||||||
|
# Begin the response
|
||||||
|
self.send_response(200)
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write("Hello!\n")
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def get_parser():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-l', '--log-dir', default="/tmp")
|
||||||
|
parser.add_argument('-p', '--port', required=True)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Parse CLI arguments
|
||||||
|
args = get_parser().parse_args()
|
||||||
|
file_name = os.path.join(args.log_dir, FILE_NAME)
|
||||||
|
|
||||||
|
# Set up logging
|
||||||
|
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s',
|
||||||
|
level=logging.INFO,
|
||||||
|
filename=file_name)
|
||||||
|
console = logging.StreamHandler(stream=sys.stdout)
|
||||||
|
console.setLevel(logging.INFO)
|
||||||
|
formatter = logging.Formatter('%(asctime)s %(levelname)s:%(message)s')
|
||||||
|
console.setFormatter(formatter)
|
||||||
|
logging.getLogger('').addHandler(console)
|
||||||
|
|
||||||
|
# Initialize and start server
|
||||||
|
server = HTTPServer(('0.0.0.0', int(args.port)), PostHandler)
|
||||||
|
LOG.info("Starting server on %s:%s, use <Ctrl-C> to stop",
|
||||||
|
server.server_address[0], args.port)
|
||||||
|
try:
|
||||||
|
server.serve_forever()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
LOG.info("Server terminated")
|
||||||
|
except Exception as err:
|
||||||
|
LOG.exception("Server terminated unexpectedly: %s", err)
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
logging.shutdown()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
32
doc/source/test_plans/neutron_features/vm_density/scripts/unset_quotas.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#==========================================================================
|
||||||
|
# Unset quotas for main Nova and Neutron resources for a tenant
|
||||||
|
# with name $OS_TENANT_NAME.
|
||||||
|
# Neutron quotas: floatingip, network, port, router, security-group,
|
||||||
|
# security-group-rule subnet.
|
||||||
|
# Nova quotas: cores, instances, ram, server-groups, server-group-members.
|
||||||
|
#
|
||||||
|
# Usage: unset_quotas.sh
|
||||||
|
#==========================================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
NEUTRON_QUOTAS=(floatingip network port router security-group security-group-rule subnet)
|
||||||
|
NOVA_QUOTAS=(cores instances ram server-groups server-group-members)
|
||||||
|
|
||||||
|
OS_TENANT_ID=$(openstack project show $OS_TENANT_NAME -c id -f value)
|
||||||
|
|
||||||
|
echo "Unsetting Neutron quotas: ${NEUTRON_QUOTAS[@]}"
|
||||||
|
for net_quota in ${NEUTRON_QUOTAS[@]}
|
||||||
|
do
|
||||||
|
neutron quota-update --"$net_quota" -1 $OS_TENANT_ID
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Unsetting Nova quotas: ${NOVA_QUOTAS[@]}"
|
||||||
|
for nova_quota in ${NOVA_QUOTAS[@]}
|
||||||
|
do
|
||||||
|
nova quota-update --"$nova_quota" -1 $OS_TENANT_ID
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Successfully unset all quotas"
|
||||||
|
openstack quota show $OS_TENANT_ID
|
@ -13,3 +13,4 @@ Neutron features scale testing
|
|||||||
l3_ha/test_results_mitaka
|
l3_ha/test_results_mitaka
|
||||||
resource_density/index
|
resource_density/index
|
||||||
agent_restart/index
|
agent_restart/index
|
||||||
|
vm_density/results
|
||||||
|
After Width: | Height: | Size: 672 KiB |
After Width: | Height: | Size: 241 KiB |
After Width: | Height: | Size: 475 KiB |
221
doc/source/test_results/neutron_features/vm_density/results.rst
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
.. _`neutron_vm_density_test_report`:
|
||||||
|
|
||||||
|
========================================
|
||||||
|
OpenStack Neutron Density Testing report
|
||||||
|
========================================
|
||||||
|
|
||||||
|
:Abstract:
|
||||||
|
|
||||||
|
This document includes OpenStack Networking (aka Neutron) density test
|
||||||
|
results against 200 nodes OpenStack environment. All tests have been
|
||||||
|
performed regarding
|
||||||
|
:ref:`neutron_vm_density_test_plan`
|
||||||
|
|
||||||
|
Environment description
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Lab A (200 nodes)
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
3 controllers, 196 computes, 1 node for Grafana/Prometheus
|
||||||
|
|
||||||
|
Hardware configuration of each server
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. table:: Description of controller servers
|
||||||
|
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|server |vendor,model |Supermicro MBD-X10DRI |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|CPU |vendor,model |Intel Xeon E5-2650v3 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |processor_count |2 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |core_count |10 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |frequency_MHz |2300 |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|RAM |vendor,model |8x Samsung M393A2G40DB0-CPB |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |amount_MB |2097152 |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|NETWORK|vendor,model |Intel,I350 Dual Port |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |bandwidth |1G |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |vendor,model |Intel,82599ES Dual Port |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |bandwidth |10G |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|STORAGE|vendor,model |Intel SSD DC S3500 Series |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |SSD/HDD |SSD |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |size |240GB |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |vendor,model |2x WD WD5003AZEX |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |SSD/HDD |HDD |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |size |500GB |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|
||||||
|
.. table:: Description of compute servers
|
||||||
|
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|server |vendor,model |SUPERMICRO 5037MR-H8TRF |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|CPU |vendor,model |INTEL XEON Ivy Bridge 6C E5-2620 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |processor_count |1 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |core_count |6 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |frequency_MHz |2100 |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|RAM |vendor,model |4x Samsung DDRIII 8GB DDR3-1866 |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |amount_MB |32768 |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|NETWORK|vendor,model |AOC-STGN-i2S - 2-port |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |bandwidth |10G |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|STORAGE|vendor,model |Intel SSD DC S3500 Series |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |SSD/HDD |SSD |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |size |80GB |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |vendor,model |1x WD Scorpio Black BP WD7500BPKT|
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |SSD/HDD |HDD |
|
||||||
|
| +----------------+---------------------------------+
|
||||||
|
| |size |750GB |
|
||||||
|
+-------+----------------+---------------------------------+
|
||||||
|
|
||||||
|
Test results
|
||||||
|
============
|
||||||
|
|
||||||
|
Test Case: VM density check
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The idea was to boot as many VMs as possible (in batches of 200-1000 VMs) and
|
||||||
|
make sure they are properly wired and have access to the external network.
|
||||||
|
The test allows to measure the maximum number of VMs which can be deployed
|
||||||
|
without issues with cloud operability, etc.
|
||||||
|
|
||||||
|
The external access was checked by the external server to which VMs connect
|
||||||
|
upon spawning. The server logs incoming connections from provisioned VMs which
|
||||||
|
send instance IPs to this server via POST requests. Instances also report a
|
||||||
|
number of attempts it took to get an IP address from metadata server and send
|
||||||
|
connect to the HTTP server respectively.
|
||||||
|
|
||||||
|
A Heat template was used for creating 1 net with a subnet, 1 DVR router, and a
|
||||||
|
VM per compute node. Heat stacks were created in batches of 1 to 5 (5 most of
|
||||||
|
the times), so 1 iteration effectively means 5 new nets/routers and 196 * 5
|
||||||
|
VMs. During the execution of the test we were constantly monitoring lab’s
|
||||||
|
status using Grafana dashboard and checking agents’ status.
|
||||||
|
|
||||||
|
**As a result we were able to successfully create 125 Heat stacks which gives
|
||||||
|
us the total of 24500 VMs**.
|
||||||
|
|
||||||
|
Iteration 1:
|
||||||
|
|
||||||
|
.. image:: reports/iteration1.png
|
||||||
|
:width: 650px
|
||||||
|
|
||||||
|
Iteration i:
|
||||||
|
|
||||||
|
.. image:: reports/iterationi.png
|
||||||
|
:width: 650px
|
||||||
|
|
||||||
|
Example of Grafana dashboard during density test:
|
||||||
|
|
||||||
|
.. image:: reports/grafana.png
|
||||||
|
:width: 650px
|
||||||
|
|
||||||
|
Observed issues
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Issues faced during testing:
|
||||||
|
|
||||||
|
* `LP #1614452 Port create time grows at scale due to dvr arp update`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/360732
|
||||||
|
|
||||||
|
* `LP #1606844 L3 agent constantly resyncing deleted router`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/353010
|
||||||
|
|
||||||
|
* `LP #1609741 oslo.messaging does not redeclare exchange if it is missing`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/351162
|
||||||
|
|
||||||
|
* `LP #1549311 Unexpected SNAT behavior between instances with DVR+floating ip`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/349549/
|
||||||
|
* Patch: https://review.openstack.org/349884/
|
||||||
|
|
||||||
|
* `LP #1610303 l2pop mech fails to update_port_postcommit on a loaded cluster`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/365051/
|
||||||
|
|
||||||
|
* `LP #1606827 Agents might be reported as down for 10 minutes after all controllers restart`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/349038
|
||||||
|
|
||||||
|
* `LP #1528895 Timeouts in update_device_list (too slow with large # of VIFs)`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/277279/
|
||||||
|
|
||||||
|
* `LP #1606825 nova-compute hangs while executing a blocking call to librbd`_
|
||||||
|
|
||||||
|
* Patch: https://review.openstack.org/348492
|
||||||
|
|
||||||
|
During testing it was also needed to tune nodes configuration in order to
|
||||||
|
comply with the growing number of VMs per node, such as:
|
||||||
|
|
||||||
|
* Increase ARP table size on compute nodes and controllers
|
||||||
|
* Raise cpu_allocation_ratio from 8.0 for 12.0 in nova.conf to prevent hitting
|
||||||
|
Nova vCPUs limit on computes
|
||||||
|
|
||||||
|
At ~16000 VMs we reached ARP table size limit on compute nodes so Heat stack
|
||||||
|
creation started to fail. Having increased maximum table size we decided to
|
||||||
|
cleanup failed stacks, in attempt to do so we ran into a following Nova issue
|
||||||
|
(`LP #1606825 nova-compute hangs while executing a blocking call to librbd`_):
|
||||||
|
on VM deletion `nova-compute` may hang for a while executing a call to `librbd`
|
||||||
|
and eventually go down in Nova service-list output. This issue was fixed with
|
||||||
|
the help of the Mirnatis Nova team and the fix was applied on the lab as a
|
||||||
|
patch.
|
||||||
|
|
||||||
|
After launching ~20000 VMs cluster started experiencing problems with RabbitMQ
|
||||||
|
and Ceph. When the number of VMs reached 24500 control plane services and
|
||||||
|
agents started to massively go down: the initial failure might have been
|
||||||
|
caused by the lack of allowed PIDs per OSD nodes
|
||||||
|
(https://bugs.launchpad.net/fuel/+bug/1536271) , Ceph failure affected all
|
||||||
|
services, i.e. MySQL errors in Neutron server that lead to agents going down
|
||||||
|
and massive resource rescheduling/resync. After Ceph failure the control plane
|
||||||
|
cluster could not be recovered and due to that density test had to be stopped
|
||||||
|
before the capacity of compute nodes was exhausted.
|
||||||
|
|
||||||
|
Ceph team commented that 3 Ceph monitors aren't enough for over 20000 VMs
|
||||||
|
(each having 2 drives) and recommended to have at least 1 monitor per ~1000
|
||||||
|
client connections or move them to dedicated nodes.
|
||||||
|
|
||||||
|
.. note:: Connectivity check of Integrity test passed 100% even when control
|
||||||
|
plane cluster went crazy. That is a good illustration of control plane
|
||||||
|
failures not affecting data plane.
|
||||||
|
|
||||||
|
.. note:: Final result - 24500 VMs on a cluster.
|
||||||
|
|
||||||
|
.. references:
|
||||||
|
|
||||||
|
.. _LP #1614452 Port create time grows at scale due to dvr arp update: https://bugs.launchpad.net/neutron/+bug/1614452
|
||||||
|
.. _LP #1606844 L3 agent constantly resyncing deleted router: https://bugs.launchpad.net/neutron/+bug/1606844
|
||||||
|
.. _LP #1609741 oslo.messaging does not redeclare exchange if it is missing: https://bugs.launchpad.net/neutron/+bug/1609741
|
||||||
|
.. _LP #1549311 Unexpected SNAT behavior between instances with DVR+floating ip: https://bugs.launchpad.net/neutron/+bug/1549311
|
||||||
|
.. _LP #1610303 l2pop mech fails to update_port_postcommit on a loaded cluster: https://bugs.launchpad.net/neutron/+bug/1610303
|
||||||
|
.. _LP #1606827 Agents might be reported as down for 10 minutes after all controllers restart: https://bugs.launchpad.net/neutron/+bug/1606827
|
||||||
|
.. _LP #1528895 Timeouts in update_device_list (too slow with large # of VIFs):https://bugs.launchpad.net/neutron/+bug/1528895
|
||||||
|
.. _LP #1606825 nova-compute hangs while executing a blocking call to librbd: https://bugs.launchpad.net/neutron/+bug/1606825
|