Add documentation

Change-Id: I4ab97018c6a2776da76b7b36b86cf17340cab3dd
This commit is contained in:
Ilya Shakhat 2015-05-12 18:24:23 +03:00
parent acdd2b2262
commit 4de3521e80
15 changed files with 1568 additions and 30 deletions

View File

@ -1,34 +1,42 @@
Shaker
======
Shake VMs with our sheer-class tests!
The distributed data-plane testing tool for OpenStack.
Installation
Features
--------
* User-defined topology via Heat templates
* Simultaneously test execution on multiple instances
* Pluggable tools
* Interactive report with stats and charts
Requirements
------------
The tool consists of a single server running on master node and set of dynamically
provisioned agents. In order to run the server needs to know OpenStack parameters
(credentials, auth_url), they can be set via environment (e.g. by sourcing openrc file)
or via parameters.
* Shaker server routable from OpenStack cloud
* Admin-user access to OpenStack API
To install:
1. ``git clone git://git.openstack.org/stackforge/shaker``
2. ``python setup.py install`` - installs the tool and all its python dependencies
3. ``shaker-image-builder`` - builds image for agent VMs inside OpenStack
Setup
-----
Note: image builder is able to create Nova flavor optimized for the image and this requires
admin user privileges. However if the flavor is already exists then it can be provided via
``flavor-name`` config parameter and the tool executed from an ordinary user.
1. ``pip install pyshaker`` - installs the tool and all its python dependencies
2. ``shaker-image-builder`` - builds shaker image and stores it in Glance
How to run
----------
1. ``shaker --server-endpoint <host>:<port> --scenario <scenario-file> --report <report-file>``
During the run the tool deploys topology, spawns instances, distributes
tasks among instances and generates report in HTML format.
Run
---
``shaker --server-endpoint <host:port> --scenario <scenario.yaml> --report <report.html>``
where:
* ``<host:port>`` - address of machine where Shaker is deployed and any free port
* ``<scenario.yaml>`` - the scenario to execute; L2, L3 east-west and L3 north-south already included
* ``<report.html>`` - file to store the report
Links
-----
* Launchpad - https://launchpad.net/shaker/
* Docs - http://shaker-docs.readthedocs.org/
* Docs - http://pyshaker.readthedocs.org/
* PyPi - https://pypi.python.org/pypi/pyshaker/

View File

@ -0,0 +1,50 @@
============
Architecture
============
Shaker tool consists of server and agent modules. The server is executed by ``shaker`` command
and is responsible for deployment of instances, execution of tests as specified in the scenario,
for results processing and report generation. The agent is light-weight and polls tasks from
the server and replies with the results. Agents have connectivity to the server, but the server does not
(so it is easy to keep agents behind NAT).
.. image:: images/architecture.svg
Under the Hood
^^^^^^^^^^^^^^
Scenario execution involves the following steps:
1. User launches shaker with the following minimum set of parameters::
shaker --server-endpoint <host:port> --scenario <scenario> --report <report>
where:
* host:port - address of the machine where Shaker is installed and port is some arbitrary free port to bind the server to;
* scenario - file name of the scenario (yaml file);
* report - file name where report will be saved.
2. Shaker verifies connection to OpenStack. The parameters are taken from set of os-* params or from the env (``openrc``).
3. Based on ``accommodation`` parameter the list of agents is generated.
4. The topology is deployed with help of Heat. The list of agents is extended with IP addresses and instance names.
5. Shaker waits for all agents to connect. Once all agents are alive it means that the Quorum is full and everyone ready to execute the tests.
6. Shaker starts tests one by one in order they listed in the scenario. The test definition is converted into the actual command that will be
executed by agent. Shaker schedules the command to be started at the same time on all agents. For networking testing only agents in ``master`` role
are involved. Slave agents are used as back-end for corresponding commands (i.e. they run iperf in server mode).
7. Agents send their results to the server. Once all replies are received the test execution meant to be finished. If some agent didn't make it in
dedicated time it is marked as lost.
8. Once all tests are executed Shaker can output the raw result in JSON format (option ``--output``).
9. Shaker clears the topology with help of Heat.
10. Shaker calculates statistics and aggregated charts. If there are any SLA statements they are also evaluated, the result can be stored in subunit format
(option ``--subunit``).
11. Shaker generates report in HTML format.

View File

@ -0,0 +1,78 @@
============
Contributing
============
Contribute to Shaker
--------------------
Shaker follows standard OpenStack contribution workflow as described at http://docs.openstack.org/infra/manual/developers.html
Start working
^^^^^^^^^^^^^
1. Clone the repo::
$ git clone git://git.openstack.org/stackforge/shaker
2. From the root of your workspace, check out a new branch to work on::
$ git checkout -b <TOPIC-BRANCH>
3. Implement your code
Before Commit
^^^^^^^^^^^^^
4. Make sure your code works by running the tests::
$ tox
By default tox executes the same set of tests as configured in Jenkins, i.e.: py34 and py27 unit tests,
pep8 style check and documentation build.
5. If there are any changes in config parameters, also do::
$ tox -egenconfig
This job updates sample config file as well as documentation on CLI utils.
Submit Review
^^^^^^^^^^^^^
6. Commit the code::
$ git commit -a
Commit message should indicate what the change is, for a bug fix commit it needs to contain reference to Launchpad bug number.
7. Submit the review::
$ git review
8. If the code is approved with a +2 review, Gerrit will automatically merge your code.
Bug Tracking
------------
Bugs are tracked at Launchpad:
https://bugs.launchpad.net/shaker
Developer's Guide of OpenStack
------------------------------
If you would like to contribute to the development of OpenStack, you must follow the steps in this page:
http://docs.openstack.org/infra/manual/developers.html
Once those steps have been completed, changes to OpenStack should be submitted for review via the Gerrit tool, following the workflow documented at:
http://docs.openstack.org/infra/manual/developers.html#development-workflow
Pull requests submitted through GitHub will be ignored.

67
doc/source/examples.rst Normal file
View File

@ -0,0 +1,67 @@
========
Examples
========
L2 Same Domain
--------------
This scenario tests the bandwidth between pairs of instances in the same virtual network (L2 domain).
Each instance is deployed on own compute node. The test increases the load from 1 pair until all
available instances are used.
.. image:: images/topology_l2.png
How To Run
^^^^^^^^^^
.. code::
shaker --server-endpoint <host:port> --scenario <full_l2.yaml> --report <full_l2.html>
Scenario
^^^^^^^^
.. literalinclude:: ../../scenarios/networking/full_l2.yaml
L3 East-West
------------
This scenario tests the bandwidth between pairs of instances deployed in different virtual networks
plugged into the same router. Each instance is deployed on its own compute node. The test increases the load
from 1 pair pair until all available instances are used.
.. image:: images/topology_l3_east_west.png
How To Run
^^^^^^^^^^
.. code::
shaker --server-endpoint <host:port> --scenario <full_l3_east_west.yaml> --report <full_l3_east_west.html>
Scenario
^^^^^^^^
.. literalinclude:: ../../scenarios/networking/full_l3_east_west.yaml
L3 North-South
--------------
This scenario tests the bandwidth between pairs of instances deployed in different virtual networks. Instances
with master agents are located in one network, instances with slave agents are reached via floating IP.
Each instance is deployed on its own compute node. The test increases the load from 1 pair pair until
all available instances are used.
.. image:: images/topology_l3_north_south.png
How To Run
^^^^^^^^^^
.. code::
shaker --server-endpoint <host:port> --scenario <full_l3_north_south.yaml> --report <full_l3_north_south.html>
Scenario
^^^^^^^^
.. literalinclude:: ../../scenarios/networking/full_l3_north_south.yaml

View File

@ -0,0 +1,359 @@
<?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="100mm"
viewBox="0 0 744.09449 354.3307"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="accommodation_double_room.svg"
inkscape:export-filename="/home/ishakhat/Work/shaker/doc/source/images/architecture.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4699"
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="path4701" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4426"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker4305"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4307"
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>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4265"
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="path4267" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="381.46369"
inkscape:cy="259.20889"
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,-698.0315)">
<rect
style="fill:none;stroke:#e6e6e6;stroke-width:3.6471231;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4703"
width="647.29901"
height="301.79739"
x="47.405239"
y="723.89954"
rx="7.3739171"
ry="11.274119" />
<text
sodipodi:linespacing="125%"
id="text4215"
y="742.11792"
x="379.08273"
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:#000000;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="742.11792"
x="379.08273"
sodipodi:role="line"
id="tspan4217"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:center;text-anchor:middle;fill:#000000">accomodation: [pair double_room]</tspan></text>
<rect
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4791"
width="95"
height="221.19464"
x="72.438728"
y="778.72052"
rx="5.0763359"
ry="6.7910633" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-907.52356"
y="96.334244"
id="text4793"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4797"
sodipodi:role="line"
x="-907.52356"
y="96.334244">compute node-1</tspan></text>
<rect
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4801"
width="42.142857"
height="95.714287"
x="112.79585"
y="790.14905"
rx="6.923945"
ry="5.3510919" />
<text
sodipodi:linespacing="125%"
id="text4803"
y="135.38878"
x="-855.45026"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="135.38878"
x="-855.45026"
sodipodi:role="line"
id="tspan4805"
style="text-align:center;text-anchor:middle;fill:#ffffff">master_1</tspan></text>
<rect
ry="5.3510919"
rx="6.923945"
y="891.57764"
x="112.79585"
height="95.714287"
width="42.142857"
id="rect4813"
style="fill:#d35fbc;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-958.99225"
y="135.65411"
id="text4815"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4817"
sodipodi:role="line"
x="-958.99225"
y="135.65411">slave_1</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>
<path
style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:5.81815529;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.81815535, 11.6363107;stroke-dashoffset:0;stroke-opacity:1"
d="m 362.14286,889.31784 155.71429,0"
id="path4899"
inkscape:connector-curvature="0" />
<rect
ry="6.7910633"
rx="5.0763359"
y="778.72052"
x="202.43874"
height="221.19464"
width="95"
id="rect4260"
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
sodipodi:linespacing="125%"
id="text4262"
y="223.68082"
x="-907.52356"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="223.68082"
x="-907.52356"
sodipodi:role="line"
id="tspan4264"
style="text-align:center;text-anchor:middle;fill:#ffffff">compute node-2</tspan></text>
<rect
ry="5.3510919"
rx="6.923945"
y="790.14905"
x="242.79585"
height="95.714287"
width="42.142857"
id="rect4266"
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-855.45026"
y="262.73535"
id="text4268"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4270"
sodipodi:role="line"
x="-855.45026"
y="262.73535">master_2</tspan></text>
<rect
style="fill:#d35fbc;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4272"
width="42.142857"
height="95.714287"
x="242.79585"
y="891.57764"
rx="6.923945"
ry="5.3510919" />
<text
sodipodi:linespacing="125%"
id="text4274"
y="263.0007"
x="-958.99225"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="263.0007"
x="-958.99225"
sodipodi:role="line"
id="tspan4276"
style="text-align:center;text-anchor:middle;fill:#ffffff">slave_2</tspan></text>
<rect
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4362"
width="95"
height="221.19464"
x="566.01013"
y="778.72052"
rx="5.0763359"
ry="6.7910633" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-907.52356"
y="579.83142"
id="text4364"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4366"
sodipodi:role="line"
x="-907.52356"
y="579.83142">compute node-N</tspan></text>
<rect
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4368"
width="42.142857"
height="95.714287"
x="606.36725"
y="790.14905"
rx="6.923945"
ry="5.3510919" />
<text
sodipodi:linespacing="125%"
id="text4370"
y="618.88593"
x="-855.45026"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="618.88593"
x="-855.45026"
sodipodi:role="line"
id="tspan4372"
style="text-align:center;text-anchor:middle;fill:#ffffff">master_N</tspan></text>
<rect
ry="5.3510919"
rx="6.923945"
y="891.57764"
x="606.36725"
height="95.714287"
width="42.142857"
id="rect4374"
style="fill:#d35fbc;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-958.99225"
y="619.15131"
id="text4376"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4378"
sodipodi:role="line"
x="-958.99225"
y="619.15131">slave_N</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,337 @@
<?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="100mm"
viewBox="0 0 744.09449 354.3307"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="accomodation_single_room.svg"
inkscape:export-filename="/home/ishakhat/Work/shaker/doc/source/images/architecture.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4699"
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="path4701" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4426"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker4305"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4307"
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>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4265"
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="path4267" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="381.46369"
inkscape:cy="259.20889"
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,-698.0315)">
<rect
style="fill:none;stroke:#e6e6e6;stroke-width:3.29181743;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4703"
width="647.6543"
height="245.72414"
x="47.227585"
y="750.15045"
rx="7.3779645"
ry="9.1794138" />
<text
sodipodi:linespacing="125%"
id="text4215"
y="768.00708"
x="379.08273"
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:#000000;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="768.00708"
x="379.08273"
sodipodi:role="line"
id="tspan4217"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:center;text-anchor:middle;fill:#000000">accomodation: [pair single room]</tspan></text>
<rect
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4791"
width="95"
height="162.85715"
x="72.438728"
y="805.14911"
rx="5.0763359"
ry="5" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-904.72632"
y="96.334244"
id="text4793"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4797"
sodipodi:role="line"
x="-904.72632"
y="96.334244">compute node-1</tspan></text>
<rect
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4801"
width="42.142857"
height="95.714287"
x="113.86729"
y="838.72052"
rx="6.923945"
ry="5.3510919" />
<text
sodipodi:linespacing="125%"
id="text4803"
y="137.47696"
x="-905.03375"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="137.47696"
x="-905.03375"
sodipodi:role="line"
id="tspan4805"
style="text-align:center;text-anchor:middle;fill:#ffffff">master_1</tspan></text>
<rect
ry="5"
rx="5.0763359"
y="805.14911"
x="188.153"
height="162.85715"
width="95"
id="rect4807"
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
sodipodi:linespacing="125%"
id="text4809"
y="209.68669"
x="-904.72632"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="209.68669"
x="-904.72632"
sodipodi:role="line"
id="tspan4811"
style="text-align:center;text-anchor:middle;fill:#ffffff">compute node-2</tspan></text>
<rect
ry="5.3510919"
rx="6.923945"
y="838.72052"
x="229.58157"
height="95.714287"
width="42.142857"
id="rect4813"
style="fill:#d35fbc;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-905.03375"
y="250.82941"
id="text4815"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4817"
sodipodi:role="line"
x="-905.03375"
y="250.82941">slave_1</tspan></text>
<rect
ry="5"
rx="5.0763359"
y="805.8634"
x="458.15302"
height="162.85715"
width="95"
id="rect4819"
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
sodipodi:linespacing="125%"
id="text4821"
y="474.17575"
x="-905.45551"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="474.17575"
x="-905.45551"
sodipodi:role="line"
id="tspan4823"
style="text-align:center;text-anchor:middle;fill:#ffffff">compute node-N-1</tspan></text>
<rect
ry="5.3510919"
rx="6.923945"
y="839.43481"
x="499.5816"
height="95.714287"
width="42.142857"
id="rect4825"
style="fill:#00aad4;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-905.76294"
y="515.31848"
id="text4827"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4829"
sodipodi:role="line"
x="-905.76294"
y="515.31848">master_M</tspan></text>
<rect
style="fill:#b3b3b3;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4831"
width="95"
height="162.85715"
x="573.86725"
y="805.8634"
rx="5.0763359"
ry="5" />
<text
transform="matrix(0,-0.97958908,1.0208362,0,0,0)"
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:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-905.45551"
y="587.5282"
id="text4833"
sodipodi:linespacing="125%"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4835"
sodipodi:role="line"
x="-905.45551"
y="587.5282">compute node-N</tspan></text>
<rect
style="fill:#d35fbc;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686"
id="rect4837"
width="42.142857"
height="95.714287"
x="615.29584"
y="839.43481"
rx="6.923945"
ry="5.3510919" />
<text
sodipodi:linespacing="125%"
id="text4839"
y="628.67096"
x="-905.76294"
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="matrix(0,-0.97958908,1.0208362,0,0,0)"><tspan
y="628.67096"
x="-905.76294"
sodipodi:role="line"
id="tspan4841"
style="text-align:center;text-anchor:middle;fill:#ffffff">slave_M</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>
<path
style="fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:5,10;stroke-dashoffset:0"
d="m 310,886.64791 115,0"
id="path4899"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,475 @@
<?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="architecture.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker4634"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4636"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill:#37c8ab;fill-opacity:1;fill-rule:evenodd;stroke:#37c8ab;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker4580"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
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="path4582"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path4299"
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)"
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="1.4"
inkscape:cx="442.66797"
inkscape:cy="308.96644"
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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-527.95276)">
<rect
style="fill:#00aad4;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="rect3342"
width="124.42634"
height="83.808189"
x="70.560921"
y="596.76105"
rx="7.5107188"
ry="7.8269691" />
<text
sodipodi:linespacing="125%"
id="text3350"
y="608.96271"
x="135.55745"
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="608.96271"
x="135.55745"
id="tspan3352"
sodipodi:role="line"
style="text-align:center;text-anchor:middle;fill:#ffffff" /><tspan
y="630.52673"
x="135.55745"
sodipodi:role="line"
id="tspan4695"
style="text-align:center;text-anchor:middle;fill:#ffffff">master_1</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3406"
y="633.49957"
x="248.09406"
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:#000000;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="633.49957"
x="248.09406"
id="tspan3408"
sodipodi:role="line">master_1</tspan></text>
<rect
style="fill:#00aad4;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="rect3410"
width="124.42634"
height="83.808189"
x="228.82253"
y="596.76105"
rx="7.5107188"
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;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"
x="256.95361"
y="629.99701"
id="text3412"
sodipodi:linespacing="125%"
transform="scale(0.97958908,1.0208362)"><tspan
sodipodi:role="line"
id="tspan3414"
x="256.95361"
y="629.99701">master_2</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3418"
y="634.59491"
x="427.17822"
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:#000000;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="634.59491"
x="427.17822"
id="tspan3420"
sodipodi:role="line">master_1</tspan></text>
<rect
style="fill:#d35fbc;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="rect3422"
width="124.42634"
height="83.808189"
x="387.08411"
y="596.76105"
rx="7.5107188"
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;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"
x="426.59503"
y="630.14862"
id="text3424"
sodipodi:linespacing="125%"
transform="scale(0.97958908,1.0208362)"><tspan
sodipodi:role="line"
id="tspan3426"
x="426.59503"
y="630.14862">slave_1</tspan></text>
<text
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:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="579.97485"
y="636.23785"
id="text3430"
sodipodi:linespacing="125%"
transform="scale(0.97958908,1.0208362)"><tspan
sodipodi:role="line"
id="tspan3432"
x="579.97485"
y="636.23785">master_1</tspan></text>
<rect
ry="7.8269691"
rx="7.5107188"
y="596.76105"
x="545.34564"
height="83.808189"
width="124.42634"
id="rect3434"
style="fill:#d35fbc;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text3436"
y="630.14862"
x="588.22156"
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="630.14862"
x="588.22156"
id="tspan3438"
sodipodi:role="line">slave_2</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#00aad4;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 127.96125,680.49784 0,30.55703 161.39162,0 0.0141,-31.98749"
id="path3440"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
id="path4268"
d="m 449.13986,679.86384 0,30.5371 164.21361,0 0,-30.88442"
style="fill:none;fill-rule:evenodd;stroke:#d35fbc;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccc" />
<rect
ry="7.8269691"
rx="7.5107188"
y="827.70325"
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="857.53717"
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="857.53717"
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">shaker</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>
<path
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 119.34001,679.92681 0,38.42111 227.48853,0 0,106.85197"
id="path4284"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4580)"
d="m 295.84777,680.59646 -0.50508,25.41618 64.33905,0 0.50508,119.30682"
id="path4572"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#37c8ab;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4634)"
d="m 136.50599,679.59471 0,20.5358 321.88795,0 0,-17.63196"
id="path4632"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<rect
style="fill:none;stroke:#e6e6e6;stroke-width:2.82461405;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4693"
width="689.07178"
height="450.00497"
x="30.1672"
y="556.23651"
rx="6.4744992"
ry="7.7017975" />
<rect
style="fill:none;stroke:#e6e6e6;stroke-width:3.19071031;stroke-miterlimit:4;stroke-dasharray:none"
id="rect4703"
width="647.75543"
height="230.82523"
x="46.166878"
y="572.31305"
rx="7.3791161"
ry="8.6228418" />
<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="776.30518"
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="776.30518">OpenStack</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#00aad4;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 288.90363,711.12227 64.39722,0 0,39.39595"
id="path4904"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#d35fbc;stroke-width:2.97473931;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 448.5142,710.37625 -59.61163,0 0,40.38809"
id="path5206"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<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:#37abc8;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="213.57849"
y="719.7962"
id="text5232"
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';text-align:center;text-anchor:middle;fill:#37abc8"
id="tspan5236"
sodipodi:role="line"
x="213.57849"
y="719.7962">network A</tspan></text>
<text
sodipodi:linespacing="125%"
id="text5240"
y="718.39679"
x="516.18353"
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:#d35fbc;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="718.39679"
x="516.18353"
sodipodi:role="line"
id="tspan5242"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:center;text-anchor:middle;fill:#d35fbc;fill-opacity:1">network B</tspan></text>
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3389"
d="m 622.13762,685.92681 0,32.42111 -226.47838,0 0,107.86213"
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3391"
d="m 442.64001,680.59646 0.50508,25.41618 -60.33905,0 -0.50508,119.8119"
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4580)" />
<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="750.7063"
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="755.96625"
id="text4264"
sodipodi:linespacing="125%"
transform="scale(0.97958908,1.0208362)"><tspan
sodipodi:role="line"
id="tspan4266"
x="373.55719"
y="755.96625">virtual router</tspan></text>
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3393"
d="m 302.67608,679.59471 0,14.5358 299.88795,0 0,-13.41767"
style="fill:none;fill-rule:evenodd;stroke:#37c8ab;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4634)" />
<path
style="fill:none;fill-rule:evenodd;stroke:#00aad4;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 71.50484,951.2193 62.12439,0 0,-1.51523"
id="path3395"
inkscape:connector-curvature="0" />
<text
sodipodi:linespacing="125%"
id="text4215"
y="936.7052"
x="155.39075"
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#999999;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="936.7052"
x="155.39075"
sodipodi:role="line"
id="tspan4217"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:start;text-anchor:start;fill:#999999">tenant network A</tspan></text>
<path
inkscape:connector-curvature="0"
id="path4219"
d="m 71.50484,975.2193 62.12439,0 0,-1.51523"
style="fill:none;fill-rule:evenodd;stroke:#d35fbc;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<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;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="155.39075"
y="960.21521"
id="text4230"
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';text-align:start;text-anchor:start;fill:#999999"
id="tspan4232"
sodipodi:role="line"
x="155.39075"
y="960.21521">tenant network B</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#ff7f2a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:1"
d="m 425.79056,953.64787 62.12439,0 0,-1.51523"
id="path4234"
inkscape:connector-curvature="0" />
<text
sodipodi:linespacing="125%"
id="text4236"
y="939.08392"
x="517.05841"
style="font-style:normal;font-weight:normal;font-size:17.25123024px;line-height:125%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#999999;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="939.08392"
x="517.05841"
sodipodi:role="line"
id="tspan4238"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:start;text-anchor:start;fill:#999999">shaker agents traffic</tspan></text>
<path
inkscape:connector-curvature="0"
id="path4240"
d="m 425.79056,973.64787 62.12439,0 0,-1.51523"
style="fill:none;fill-rule:evenodd;stroke:#38c7ab;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3, 6;stroke-dashoffset:0;stroke-opacity:0.59215686" />
<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;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="517.05841"
y="958.6756"
id="text4242"
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';text-align:start;text-anchor:start;fill:#999999"
id="tspan4244"
sodipodi:role="line"
x="517.05841"
y="958.6756">iperf/netperf traffic</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -1,6 +1,22 @@
Welcome to Shaker!
==================
Shake VMs with our sheer-class tests!
The distributed data-plane testing tool for OpenStack.
.. toctree::
:maxdepth: 2
installation
usage
examples
tools
architecture
contributing
.. Indices and tables
.. ==================
.. * :ref:`genindex`
.. * :ref:`modindex`
.. * :ref:`search`
.. include:: tools.rst

View File

@ -0,0 +1,54 @@
============
Installation
============
Installation in Python environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Shaker is distributed as Python package and available through PyPi (https://pypi.python.org/pypi/pyshaker/).
It is recommended to be installed inside virtualenv.
.. code::
$ virtualenv venv
$ . venv/bin/activate
$ pip install pyshaker
Installation on Ubuntu Cloud Image
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Installation on fresh system requires additional libraries needed by some of dependencies.
.. code::
$ sudo apt-add-repository "deb http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty multiverse"
$ sudo apt-get update
$ sudo apt-get -y install python-dev libzmq-dev
$ wget -O get-pip.py https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py
$ sudo pip install pbr pyshaker
$ shaker --help
Deployment
^^^^^^^^^^
.. image:: images/architecture.svg
Requirements:
* User with admin privileges OpenStack cloud
* Computer where shaker is executed should be routable from OpenStack instances
* Open port to accept connections from agents running on instances
First Run
^^^^^^^^^
Build the master image. The process downloads Ubuntu cloud image, installs all necessary packages and stores
snapshot into Glance. This snapshot is used by ``shaker`` as base of instances.
.. code::
$ shaker-image-builder

View File

@ -1,28 +1,40 @@
===================
CLI Tools Reference
===================
shaker
------
The tool runs specified scenario
Executes specified scenario in OpenStack cloud, stores results and generates HTML report.
.. literalinclude:: tools/shaker.txt
shaker-image-builder
--------------------
Builds master image in OpenStack cloud. The image is based on Ubuntu cloud image distro and
configured to run ``shaker-agent``.
.. literalinclude:: tools/shaker-image-builder.txt
shaker-agent
------------
Client-side process that is run inside pre-configured image.
.. literalinclude:: tools/shaker-agent.txt
shaker-report
-------------
Generates report based on raw results stored in JSON format.
.. literalinclude:: tools/shaker-report.txt
shaker-image-builder
--------------------
The tool that creates master image in OpenStack cloud.
.. literalinclude:: tools/shaker-image-builder.txt
shaker-cleanup
--------------
Removes master image from OpenStack cloud.
.. literalinclude:: tools/shaker-cleanup.txt

82
doc/source/usage.rst Normal file
View File

@ -0,0 +1,82 @@
=====
Usage
=====
Configuration
-------------
The connection to OpenStack is configured using standard ``openrc`` file. (Refer to
http://docs.openstack.org/cli-reference/content/cli_openrc.html on how to retrieve it)
The config can be passed to Shaker rather by sourcing into system env ``source openrc``
or via set of CLI parameters ``--os-tenant-name``, ``--os-username``, ``--os-password``,
``--os-auth-url`` and ``--os-region-name``. Note that Shaker requires a user with admin privileges.
Scenario Explained
------------------
Shaker scenario is file in YAML format. It describes how agents are deployed
(at OpenStack instances or statically) and sequence of tests to execute. When agents
are deployed at OpenStack instances a reference to Heat template is provided.
.. code::
description:
This scenario launches pairs of VMs in the same private network. Every VM is
hosted on a separate compute node.
deployment:
template: l2.hot
accommodation: [pair, single_room]
execution:
size: quadratic_progression
tests:
-
title: Iperf TCP
class: iperf_graph
time: 60
Deployment
^^^^^^^^^^
By default Shaker spawns instances on every available compute node. The distribution
of instances is configured by parameter ``accommodation``. There are several instructions
that allow control the scheduling precisely:
* ``pair`` - instances are grouped in pairs, meaning that one can be used as source of traffic and the other as a consumer (needed for networking tests)
* ``single_room`` - 1 instance per compute node
* ``double_room`` - 2 instances per compute node
* ``density: N`` - the multiplier for number of instances per compute node
* ``compute_nodes: N`` - how many compute nodes should be used (by default Shaker use all of them)
Examples:
.. image:: images/accommodation_single_room.svg
.. image:: images/accommodation_double_room.svg
As result of deployment the set of agents is produced. For networking testing this set contains
agents in ``master`` and ``slave`` roles. Master agents are controlled by ``shaker`` tool and execute commands.
Slaves are used as back-ends and do not receive any commands directly.
Execution
^^^^^^^^^
The execution part of scenario contains a list of tests that are executed one by one. By default Shaker runs the test
simultaneously on all available agents. The level of concurrency can be controlled by option ``size``. There are
3 values available:
* ``size: linear_progression`` - the execution starts with 1 agent and increases by 1 until all agents are involved;
* ``size: quadratic_progression`` - the execution starts with 1 agent (or 1 pair) and doubles until all agents are involved.
Tests are executed in order of definition. The exact action is defined by option ``class``, additional attributes are provided
by respective parameters. The following classes are available:
* ``iperf_graph`` - runs ``iperf`` tool and shows chart and statistics
* ``netperf_wrapper`` - runs ``netperf-wrapper`` and shows chart and statistics
* ``iperf`` - runs ``iperf`` tool and shows plain output
* ``netperf`` - runs ``netpers`` tool and shows plain output
* ``shell`` - runs any shell command or process and shows plain output

View File

@ -4,7 +4,7 @@
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Shaker | The Report</title>
<title>Shaker | The distributed data-plane testing tool for OpenStack</title>
<!-- LIBS -->