From f8b7dd0a2611061fed7134474ae10ab85e80cf3d Mon Sep 17 00:00:00 2001 From: Billy O'Mahony Date: Thu, 8 Oct 2015 11:47:03 +0100 Subject: [PATCH] docs: Add overview of the structure of vsperf code Text & sequence diagrams as both source and png. JIRA: VSPERF-106 Signed-off-by: Billy O'Mahony Reviewed-by: Al Morton Reviewed-by: Eugene Snider Reviewed-by: Maryam Tahhan Reviewed-by: Gurpreet Singh Reviewed-by: Brian Castelli Change-Id: I33f57fba85710ab4cfc72d0a5d06db6f653545d6 --- docs/images/factory_and_loader.png | Bin 0 -> 25586 bytes docs/images/traffic_controller.png | Bin 0 -> 57868 bytes docs/images/vsperf.png | Bin 0 -> 93029 bytes docs/msc/factory_and_loader.msc | 17 ++++ docs/msc/traffic_controller.msc | 30 ++++++ docs/msc/vsperf.msc | 47 +++++++++ docs/vswitchperf_design.rst | 204 +++++++++++++++++++++++++++++++++++++ 7 files changed, 298 insertions(+) create mode 100644 docs/images/factory_and_loader.png create mode 100644 docs/images/traffic_controller.png create mode 100644 docs/images/vsperf.png create mode 100755 docs/msc/factory_and_loader.msc create mode 100755 docs/msc/traffic_controller.msc create mode 100755 docs/msc/vsperf.msc create mode 100644 docs/vswitchperf_design.rst diff --git a/docs/images/factory_and_loader.png b/docs/images/factory_and_loader.png new file mode 100644 index 0000000000000000000000000000000000000000..290c0af6f212b430291835bab164dbf4d9be1914 GIT binary patch literal 25586 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 rmqlXpmcdZ;68 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 literal 0 HcmV?d00001 diff --git a/docs/images/vsperf.png b/docs/images/vsperf.png new file mode 100644 index 0000000000000000000000000000000000000000..4af2ac6294c5f063450a515b884e546a4c81cbf3 GIT binary patch literal 93029 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

U;q2Q&g9QLbC^mO!{1y?hVejE`fLUU93+JSe zi!vBMJSeRhMj9vn(EzLfl9qazW1bo_G*xLreaOj)uk4u|(q0PQrGL0ZRrC9=P$zu( z!okh0#2gMD$s^d(CcA(0Q0Y=GLI~8*hy@E`T%0D9e#*Fdu2I6nYM_>>JrmT4?%Yv_ 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 loader [label = "get_trafficgen_class()"]; + loader note loader [label = "searches TRAFFICGEN_DIR for classes implementing ITraffic and matching name configured as TRAFFICGEN"]; + app << loader [label = "TrafficGenClass"]; + app => component_factory [label = "create_traffic(traffic_type, TrafficGenClass"]; + component_factory note component_factory [label = "Component Factory maps from a traffic_type (string) to a TrafficController class"]; + component_factory => traffic_ctlr [label = "create()"]; + app << component_factory [label= "traffic_ctlr"]; + } diff --git a/docs/msc/traffic_controller.msc b/docs/msc/traffic_controller.msc new file mode 100755 index 00000000..bd66cce1 --- /dev/null +++ b/docs/msc/traffic_controller.msc @@ -0,0 +1,30 @@ + +# mscgen file +msc { + #Options + hscale = "1.5"; + + #Entities + testcase, traffic_ctlr, traffic_gen, traffic_defaults, HwSwTrafficGen; + + #Arcs + HwSwTrafficGen note HwSwTrafficGen [ label = "Ixia, Spirent, Xena, Moongen, etc."]; + testcase => traffic_ctlr [ label = "create(traffic_gen_class)" ]; + traffic_ctlr => traffic_gen [label = "create()"]; + traffic_ctlr => traffic_gen [label = "connect()"]; + testcase => traffic_ctlr [ label = "send_traffic(traffic)" ]; + --- [ label = "foreach packet_size in configuration"]; + traffic_ctlr note traffic_ctlr [ label = "invokes send_rfc2544_back2back/tput or send_cont based on traffic['traffic_type']; Also fetches duration/trials from config" ]; + traffic_ctlr => traffic_gen [ label = "send_rfc2544_tput(traffic, ...)" ]; + traffic_gen -> traffic_gen [ label = "start_rfc2544_tput(traffic)" ]; + traffic_gen => traffic_defaults [ label = "default_traffic_params = read()" ]; + traffic_gen note traffic_gen [ label = "merge traffic with default_traffic_params)" ]; + traffic_gen note traffic_gen [ label = "Actual test starts here. Details of interactions between traffic_gen class actual traffic generator (HwSwTrafficGen) are hidden to vsperf"]; + traffic_gen <=> HwSwTrafficGen [ label = "..."]; + traffic_gen => traffic_gen [ label = "wait_rfc2544_throughput()"]; + traffic_ctlr << traffic_gen [ label = "results (string/value pairs)"]; + traffic_ctlr note traffic_ctlr [ label = "store_results()" ]; + --- [ label = "end foreach"]; + testcase => traffic_ctlr [label = "get_results()"]; + testcase => testcase [label = "write_results_to_file"]; +} \ No newline at end of file diff --git a/docs/msc/vsperf.msc b/docs/msc/vsperf.msc new file mode 100755 index 00000000..4d2c6bad --- /dev/null +++ b/docs/msc/vsperf.msc @@ -0,0 +1,47 @@ +msc { + #Options + hscale = "2.0"; + + #Entities + vsperf, testcase, vnf_ctl, vnf, vswitch_ctl, vswitch, traffic_ctl, traffic_gen, load_gen; + + #Arcs + vsperf note vsperf [ label = "$ ./vsperf pvp_tput" ]; + vsperf note vsperf [ label = " foreach test specified" ]; + vsperf => testcase [ label="run()" ]; + --- [ label = " skipping details of finding and creating correct subclasses of IVSwitch, ITrafficGenerator etc." ]; + testcase => vswitch_ctl [ label="create(vswitch_class" ]; + vswitch_ctl note vswitch_ctl [ label="vswitch_ctl is instance of VswitchControllerPvp"]; + testcase => vnf_ctl [ label="create(vnf_class)" ]; + vnf_ctl note vnf_ctl [ label="vnf_ctl is instance of VnfControllerPvp"]; + testcase => traffic_ctl [ label="create()" ]; + traffic_ctl note traffic_ctl [ label="traffic_ctl is instance of TrafficControllerRFC2544"]; + |||; + testcase note testcase [ label="Python context management protocol __enter__, __exit__ is used to start/stop controllers"]; + testcase => vswitch_ctl [ label="__enter__()"]; + vswitch_ctl => vswitch [ label ="create()"]; + vswitch note vswitch [label="vswitch is instance of OvsDpdkVhost"]; + vswitch_ctl => vswitch [ label="add_phy_port()" ]; + vswitch_ctl => vswitch [ label="add_vport()" ]; + vswitch_ctl => vswitch [ label="add_flow()" ]; + --- [ label = " skipping full details of switch configuration " ]; + |||; + testcase => vnf_ctl [ label="__enter__()"]; + vnf_ctl => vnf [ label="create()"]; + |||; + testcase => load_gen [ label="create/start()" ]; + load_gen note load_gen [ label="loadgen simulates system load using 'stress' tool "]; + |||; + testcase => traffic_ctl [ label="send_traffic(traffic)" ]; + traffic_ctl note traffic_ctl [ label="'traffic' specifies the 'Traffic Type' from 01_testcases.conf as well as other traffic details" ]; + traffic_ctl => traffic_gen [label="send_rfc2544_throughput()"]; + traffic_gen note traffic_gen [label="The implementation is dependent on the vendor specific Traffic Gen used"]; + |||; + traffic_ctl << traffic_gen [label="returns results as str:value pairs"]; + testcase << traffic_ctl; + testcase => traffic_ctl [label="get_results()"]; + testcase => testcase [label="write_result_to_file()"]; + |||; + |||; +} + diff --git a/docs/vswitchperf_design.rst b/docs/vswitchperf_design.rst new file mode 100644 index 00000000..689c2098 --- /dev/null +++ b/docs/vswitchperf_design.rst @@ -0,0 +1,204 @@ +Intended Audience +================= + +This document is intended to aid those who want to modify the vsperf code. Or to extend it - for example to add support for new traffic generators, deployment scenarios and so on. + +Usage +===== + +Example Command Lines +--------------------- + +List all the cli options: + + .. code-block:: console + + $ ./vsperf -h + +Run all tests that have ``tput`` in their name - ``p2p_tput``, ``pvp_tput`` etc.: + + .. code-block:: console + + $ ./vsperf --tests 'tput' + +As above but override default configuration with settings in 'my_settings.py'. This is useful as modifying configuration directly in the configuration files in ``conf/NN_*.py`` shows up as changes under git source control: + + .. code-block:: console + + $ ./vsperf --conf-file my_settings.py --tests 'tput' + +Override specific test parameters. Useful for shortening the duration of tests for development purposes: + + .. code-block:: console + + $ ./vsperf --test-params 'rfc2544_duration=10;rfc2544_trials=1;packet_sizes=64' --tests 'pvp_tput' + +Typical Test Sequence +===================== + +This is a typical flow of control for a test. + +.. image:: images/vsperf.png + + +Configuration +============= + +The conf package contains the configuration files (``*.conf``) for all system components, it also provides a ``settings`` object that exposes all of these settings. + +Settings are not passed from component to component. Rather they are available globally to all components once they import the conf package. + + .. code-block:: python + + from conf import settings + ... + log_file = settings.getValue('LOG_FILE_DEFAULT') + +Settings files (``*.conf``) are valid python code so can be set to complex types such as lists and dictionaries as well as scalar types: + + .. code-block:: python + + first_packet_size = settings.getValue('PACKET_SIZE_LIST')[0] + +Configuration Procedure and Precedence +-------------------------------------- + +Configuration files follow a strict naming convention that allows them to be processed in a specific order. All the .conf files are named ``NN_name.conf``, where NN is a decimal digit. The files are processed in order from 00_name.conf to 99_name.conf so that if the name setting is given in both a lower and higher numbered conf file then the higher numbered file is the effective setting as it is processed after the setting in the lower numbered file. + +The values in the file specified by ``--conf-file`` takes precedence over all the other configuration files and does not have to follow the naming convention. + + +Other Configuration +------------------- + +``conf.settings`` also loads configuration from the command line and from the environment. + +VM, vSwitch, Traffic Generator Independence +=========================================== + +VSPERF supports different vSwithes, Traffic Generators and VNFs by using standard object-oriented polymorphism: + + * Support for vSwitches is implemented by a class inheriting from IVSwitch. + * Support for Traffic Generators is implemented by a class inheriting from ITrafficGenerator. + * Support for VNF is implemented by a class inheriting from IVNF. + +By dealing only with the abstract interfaces the core framework can support many implementations of different vSwitches, Traffic Generators and VNFs. + +IVSwitch +-------- + + .. code-block:: python + + class IVSwitch: + start(self) + stop(self) + add_switch(switch_name) + del_switch(switch_name) + add_phy_port(switch_name) + add_vport(switch_name) + get_ports(switch_name) + del_port(switch_name, port_name) + add_flow(switch_name, flow) + del_flow(switch_name, flow=None) + +ITrafficGenerator +----------------- + + .. code-block:: python + + class ITrafficGenerator: + connect() + disconnect() + + send_burst_traffic(traffic, numpkts, time, framerate) + + send_cont_traffic(traffic, time, framerate) + start_cont_traffic(traffic, time, framerate) + stop_cont_traffic(self): + + send_rfc2544_throughput(traffic, trials, duration, lossrate) + start_rfc2544_throughput(traffic, trials, duration, lossrate) + wait_rfc2544_throughput(self) + + send_rfc2544_back2back(traffic, trials, duration, lossrate) + start_rfc2544_back2back(traffic, , trials, duration, lossrate) + wait_rfc2544_back2back() + +Note ``send_xxx()`` blocks whereas ``start_xxx()`` does not and must be followed by a subsequent call to ``wait_xxx()``. + +IVnf +---- + + .. code-block:: python + + class IVnf: + start(memory, cpus, + monitor_path, shared_path_host, + shared_path_guest, guest_prompt) + stop() + execute(command) + wait(guest_prompt) + execute_and_wait (command) + +Controllers +----------- + +Controllers are used in conjunction with abstract interfaces as way of decoupling the control of vSwtiches, VNFs and TrafficGenerators from other components. + +The controlled classes provide basic primitive operations. The Controllers sequence and co-ordinate these primitive operation in to useful actions. For instance the vswitch_controller_PVP can be used to bring any vSwitch (that implements the primitives defined in IVSwitch) into the configuration required by the Phy-to-Phy Deployment Scenario. + +In order to support a new vSwitch only a new implementation of IVSwitch needs be created for the new vSwitch to be capable of fulfilling all the Deployment Scenarios provided for by existing or future vSwitch Controllers. + +Similarly if a new Deployment Scenario is required it only needs to be written once as a new vSwitch Controller and it will immediately be capable of controlling all existing and future vSwitches in to that Deployment Scenario. + +Similarly the Traffic Controllers can be used to co-ordinate basic operations provided by implementers of ITrafficGenerator to provide useful tests. Though traffic generators generally already implement full test cases i.e. they both generate suitable traffic and analyse returned traffic in order to implement a test which has typically been predefined in an RFC document. However the Traffic Controller class allows for the possibility of further enhancement - such as iterating over tests for various packet sizes or creating new tests. + +Traffic Controller's Role +------------------------- + +.. image:: images/traffic_controller.png + + +Loader & Component Factory +-------------------------- + +The working of the Loader package (which is responsible for *finding* arbitrary classes based on configuration data) and the Component Factory which is responsible for *choosing* the correct class for a particular situation - e.g. Deployment Scenario can be seen in this diagram. + +.. image:: images/factory_and_loader.png + +Routing Tables +============== + +Vsperf uses a standard set of routing tables in order to allow tests to easily mix and match Deployment Scenarios (PVP, P2P topology), Tuple Matching and Frame Modification requirements. + +:: + + +--------------+ + | | + | Table 0 | table#0 - Match table. Flows designed to force 5 & 10 tuple matches go here. + | | + +--------------+ + | + | + v + +--------------+ table#1 - Routing table. Flows to route packets between ports goes here. + | | The chosen port is communicated to subsequent tables by setting the + | Table 1 | metadata value to the egress port number. Generally this table + | | is set-up by by the vSwitchController. + +--------------+ + | + | + v + +--------------+ table#2 - Frame modification table. Frame modification flow rules are + | | isolated in this table so that they can be turned on or off + | Table 2 | without affecting the routing or tuple-matching flow rules. + | | This allows the frame modification and tuple matching required by the + +--------------+ tests in the VSWITCH PERFORMANCE FOR TELCO NFV test specification + | to be independent of the Deployment Scenario set up by the vSwitchController. + | + v + +--------------+ + | | + | Table 3 | table#3 - Egress table. Egress packets on the ports setup in Table 1. + | | + +--------------+ -- 2.16.6