diff options
30 files changed, 397 insertions, 83 deletions
diff --git a/3rd_party/readme.txt b/3rd_party/README.md index fc308dc8..a73a4d33 100644 --- a/3rd_party/readme.txt +++ b/3rd_party/README.md @@ -1 +1,4 @@ +3rd\_party +========== + Here are located files and scripts, which are not released under Apache 2.0 license. @@ -1,8 +1,11 @@ # VSPERF - vSwitch Performance Tests -Documentation for this project including the [quickstart guide] is contained -under the ./docs directory. +Documentation for this project including the [installation userguide] is contained +under the **./docs** directory or available [online]. +Additional information about VSPERF project are available at [project wiki]. --- -[quickstart guide]: docs/quickstart.md +[installation userguide]: docs/configguide/installation.rst +[online]: http://artifacts.opnfv.org/vswitchperf/docs/index.html +[project wiki]: https://wiki.opnfv.org/display/vsperf/VSperf+Home diff --git a/conf/03_traffic.conf b/conf/03_traffic.conf index 72324660..ccc98e3b 100644 --- a/conf/03_traffic.conf +++ b/conf/03_traffic.conf @@ -53,10 +53,11 @@ LOG_FILE_TRAFFIC_GEN = 'traffic-gen.log' # of selected transport protocol # Default value: "L4". # 'pre_installed_flows' -# - Pre-installed flows is an extension of the multistream" -# feature. If multistream is disabled, then pre-installed -# flows will be ignored. It defines if stream specific flows -# will be inserted into OVS or not. +# - Pre-installed flows is an extension of the "multistream" +# feature. If enabled, it will implicitly insert a flow +# for each stream. If multistream is disabled, then +# pre-installed flows will be ignored. +# Note: It is supported only for p2p deployment scenario. # Data type: str # Supported values: # "Yes" - flows will be inserted into OVS @@ -374,6 +375,11 @@ TRAFFICGEN_XENA_2544_TPUT_VALUE_RESOLUTION = '0.5' TRAFFICGEN_XENA_2544_TPUT_USEPASS_THRESHHOLD = 'false' TRAFFICGEN_XENA_2544_TPUT_PASS_THRESHHOLD = '0.0' +# Xena Continuous traffic options +# Please reference xena documentation before making changes to these settings +TRAFFICGEN_XENA_CONT_PORT_LEARNING_ENABLED = True +TRAFFICGEN_XENA_CONT_PORT_LEARNING_DURATION = 3 + # Xena Configuration -- END ########################### diff --git a/conf/10_custom.conf b/conf/10_custom.conf index f4e3cdf7..819d2c32 100644 --- a/conf/10_custom.conf +++ b/conf/10_custom.conf @@ -88,6 +88,11 @@ TRAFFICGEN_XENA_2544_TPUT_VALUE_RESOLUTION = '0.5' TRAFFICGEN_XENA_2544_TPUT_USEPASS_THRESHHOLD = 'false' TRAFFICGEN_XENA_2544_TPUT_PASS_THRESHHOLD = '0.0' +# Xena Continuous traffic options +# Please reference xena documentation before making changes to these settings +TRAFFICGEN_XENA_CONT_PORT_LEARNING_ENABLED = True +TRAFFICGEN_XENA_CONT_PORT_LEARNING_DURATION = 3 + ################################################### # MoonGen Configuration and Connection Info-- BEGIN diff --git a/docs/configguide/index.rst b/docs/configguide/index.rst index c9bdccf7..b4c8575e 100644 --- a/docs/configguide/index.rst +++ b/docs/configguide/index.rst @@ -11,4 +11,5 @@ VSPERF Installation Guide :maxdepth: 3 installation.rst + upgrade.rst trafficgen.rst diff --git a/docs/configguide/installation.rst b/docs/configguide/installation.rst index 5010aefd..ed414a8b 100755..100644 --- a/docs/configguide/installation.rst +++ b/docs/configguide/installation.rst @@ -6,10 +6,43 @@ Installing vswitchperf ====================== +Downloading vswitchperf +----------------------- + +The vswitchperf can be downloaded from its official git repository, which is +hosted by OPNFV. It is necessary to install a ``git`` at your DUT before downloading +vswitchperf. Installation of ``git`` is specific to the packaging system used by +Linux OS installed at DUT. + +Example of installation of GIT package and its dependencies: + +* in case of OS based on RedHat Linux: + + .. code:: bash + + sudo yum install git + + +* in case of Ubuntu or Debian: + + .. code:: bash + + sudo apt-get install git + +After the ``git`` is successfully installed at DUT, then vswitchperf can be downloaded +as follows: + +.. code:: bash + + git clone http://git.opnfv.org/vswitchperf + +The last command will create a directory ``vswitchperf`` with a local copy of vswitchperf +repository. + Supported Operating Systems --------------------------- -* CentOS 7 +* CentOS 7.3 * Fedora 20 * Fedora 21 * Fedora 22 @@ -21,72 +54,94 @@ Supported Operating Systems Supported vSwitches ------------------- + The vSwitch must support Open Flow 1.3 or greater. -* OVS (built from source). -* OVS with DPDK (built from source). +* Open vSwitch +* Open vSwitch with DPDK support +* TestPMD application from DPDK (supports p2p and pvp scenarios) Supported Hypervisors --------------------- -* Qemu version 2.3 or greater. +* Qemu version 2.3 or greater (version 2.5.0 is recommended) -Available VNFs +Supported VNFs -------------- -A simple VNF that forwards traffic through a VM, using: + +In theory, it is possible to use any VNF image, which is compatible +with supported hypervisor. However such VNF must ensure, that appropriate +number of network interfaces is configured and that traffic is properly +forwarded among them. For new vswitchperf users it is recommended to start +with official vloop-vnf_ image, which is maintained by vswitchperf community. + +.. _vloop-vnf: + +vloop-vnf +========= + +The official VM image is called vloop-vnf and it is available for free download +from OPNFV artifactory. This image is based on Linux Ubuntu distribution and it +supports following applications for traffic forwarding: * DPDK testpmd * Linux Bridge * Custom l2fwd module -The official VM image is called vloop-vnf and it is available for free -download at OPNFV website. +The vloop-vnf can be downloaded to DUT, for example by ``wget``: + + .. code:: bash + + wget http://artifacts.opnfv.org/vswitchperf/vnf/vloop-vnf-ubuntu-14.04_20160823.qcow2 -vloop-vnf changelog: -==================== +**NOTE:** In case that ``wget`` is not installed at your DUT, you could install it at RPM +based system by ``sudo yum install wget`` or at DEB based system by ``sudo apt-get install +wget``. -* `vloop-vnf-ubuntu-14.04_20160823`_ +Changelog of vloop-vnf: - * ethtool installed - * only 1 NIC is configured by default to speed up boot with 1 NIC setup - * security updates applied + * `vloop-vnf-ubuntu-14.04_20160823`_ -* `vloop-vnf-ubuntu-14.04_20160804`_ + * ethtool installed + * only 1 NIC is configured by default to speed up boot with 1 NIC setup + * security updates applied - * Linux kernel 4.4.0 installed - * libnuma-dev installed - * security updates applied + * `vloop-vnf-ubuntu-14.04_20160804`_ -* `vloop-vnf-ubuntu-14.04_20160303`_ + * Linux kernel 4.4.0 installed + * libnuma-dev installed + * security updates applied - * snmpd service is disabled by default to avoid error messages during VM boot - * security updates applied + * `vloop-vnf-ubuntu-14.04_20160303`_ -* `vloop-vnf-ubuntu-14.04_20151216`_ + * snmpd service is disabled by default to avoid error messages during VM boot + * security updates applied - * version with development tools required for build of DPDK and l2fwd + * `vloop-vnf-ubuntu-14.04_20151216`_ -Other Requirements ------------------- -The test suite requires Python 3.3 and relies on a number of other -packages. These need to be installed for the test suite to function. + * version with development tools required for build of DPDK and l2fwd + +Installation +------------ + +The test suite requires Python 3.3 or newer and relies on a number of other +system and python packages. These need to be installed for the test suite +to function. Installation of required packages, preparation of Python 3 virtual environment and compilation of OVS, DPDK and QEMU is performed by script **systems/build_base_machine.sh**. It should be executed under user account, which will be used for vsperf execution. -**Please Note**: Password-less sudo access must be configured for given +**NOTE:** Password-less sudo access must be configured for given user account before script is executed. -Execution of installation script: - .. code:: bash $ cd systems $ ./build_base_machine.sh -**Please Note**: you don't need to go into any of the systems subdirectories, +**NOTE:** you don't need to go into any of the systems subdirectories, simply run the top level **build_base_machine.sh**, your OS will be detected automatically. @@ -96,52 +151,65 @@ In case of CentOS 7 or RHEL it will install Python 3.3 from an additional repository provided by Software Collections (`a link`_). Installation script will also use `virtualenv`_ to create a vsperf virtual environment, which is isolated from the default Python environment. This environment will reside in a -directory called **vsperfenv** in $HOME. +directory called **vsperfenv** in $HOME. It will ensure, that system wide Python +installation is not modified or broken by VSPERF installation. The complete list +of Python packages installed inside virtualenv can be found at file +``requirements.txt``, which is located at vswitchperf repository. -**Please Note**: For RHEL 7.3 Enterprise OVS Vanilla is not built from upstream -source due to kernel incompatibilities. Please see the instructions in the -vswitchperf_design document for details on configuring OVS Vanilla for binary -package usage. +**NOTE:** For RHEL 7.3 Enterprise and CentOS 7.3 OVS Vanilla is not +built from upstream source due to kernel incompatibilities. Please see the +instructions in the vswitchperf_design document for details on configuring +OVS Vanilla for binary package usage. + +Using vswitchperf +----------------- You will need to activate the virtual environment every time you start a new shell session. Its activation is specific to your OS: -CentOS 7 and RHEL -================= +* CentOS 7 and RHEL -.. code:: bash + .. code:: bash - $ scl enable python33 bash - $ cd $HOME/vsperfenv - $ source bin/activate + $ scl enable python33 bash + $ source $HOME/vsperfenv/bin/activate -Fedora and Ubuntu -================= +* Fedora and Ubuntu -.. code:: bash + .. code:: bash - $ cd $HOME/vsperfenv - $ source bin/activate + $ source $HOME/vsperfenv/bin/activate + +After the virtual environment is configued, then VSPERF can be used. +For example: + + .. code:: bash + + (vsperfenv) $ cd vswitchperf + (vsperfenv) $ ./vsperf --help Gotcha -^^^^^^ +====== + +In case you will see following error during environment activation: + .. code:: bash - $ source bin/activate + $ source $HOME/vsperfenv/bin/activate Badly placed ()'s. -Check what type of shell you are using +then check what type of shell you are using: .. code:: bash - echo $shell + $ echo $SHELL /bin/tcsh See what scripts are available in $HOME/vsperfenv/bin .. code:: bash - $ ls bin/ + $ ls $HOME/vsperfenv/bin/ activate activate.csh activate.fish activate_this.py source the appropriate script @@ -195,11 +263,11 @@ your configuration in the ``02_vswitch.conf`` file. 'dpdk-socket-mem' : '1024,1024', } -Note: Option VSWITCHD_DPDK_ARGS is used for vswitchd, which supports --dpdk -parameter. In recent vswitchd versions, option VSWITCHD_DPDK_CONFIG will be -used to configure vswitchd via ovs-vsctl calls. +**NOTE:** Option ``VSWITCHD_DPDK_ARGS`` is used for vswitchd, which supports ``--dpdk`` +parameter. In recent vswitchd versions, option ``VSWITCHD_DPDK_CONFIG`` is +used to configure vswitchd via ``ovs-vsctl`` calls. -With the --socket-mem argument set to use 1 hugepage on the specified sockets as +With the ``--socket-mem`` argument set to use 1 hugepage on the specified sockets as seen above, the configuration will need 10 hugepages total to run all tests within vsperf if the pagesize is set correctly to 1GB. @@ -207,7 +275,7 @@ VSPerf will verify hugepage amounts are free before executing test environments. In case of hugepage amounts not being free, test initialization will fail and testing will stop. -**Please Note**: In some instances on a test failure dpdk resources may not +**NOTE:** In some instances on a test failure dpdk resources may not release hugepages used in dpdk configuration. It is recommended to configure a few extra hugepages to prevent a false detection by VSPerf that not enough free hugepages are available to execute the test environment. Normally dpdk would use @@ -227,6 +295,6 @@ You can review your hugepage amounts by executing the following command cat /proc/meminfo | grep Huge If no hugepages are available vsperf will try to automatically allocate some. -Allocation is controlled by HUGEPAGE_RAM_ALLOCATION configuration parameter in +Allocation is controlled by ``HUGEPAGE_RAM_ALLOCATION`` configuration parameter in ``02_vswitch.conf`` file. Default is 2GB, resulting in either 2 1GB hugepages or 1024 2MB hugepages. diff --git a/docs/configguide/trafficgen.rst b/docs/configguide/trafficgen.rst index 5190bc8e..b66a1787 100644 --- a/docs/configguide/trafficgen.rst +++ b/docs/configguide/trafficgen.rst @@ -516,6 +516,19 @@ Each value modifies the behavior of rfc 2544 throughput testing. Refer to your Xena documentation to understand the behavior changes in modifying these values. +Continuous Traffic Testing +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Xena continuous traffic by default does a 3 second learning preemption to allow +the DUT to receive learning packets before a continuous test is performed. If +a custom test case requires this learning be disabled, you can disable the option +or modify the length of the learning by modifying the following settings. + +.. code-block:: console + + TRAFFICGEN_XENA_CONT_PORT_LEARNING_ENABLED = False + TRAFFICGEN_XENA_CONT_PORT_LEARNING_DURATION = 3 + MoonGen ------- diff --git a/docs/configguide/upgrade.rst b/docs/configguide/upgrade.rst new file mode 100644 index 00000000..3a970c6a --- /dev/null +++ b/docs/configguide/upgrade.rst @@ -0,0 +1,189 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Intel Corporation, AT&T and others. + +===================== +Upgrading vswitchperf +===================== + +Generic +------- + +In case, that VSPERF is cloned from git repository, then it is easy to +upgrade it to the newest stable version or to the development version. + +You could get a list of stable releases by ``git`` command. It is necessary +to update local git repository first. + +**NOTE:** Git commands must be executed from directory, where VSPERF repository +was cloned, e.g. ``vswitchperf``. + +Update of local git repository: + +.. code:: bash + + $ git pull + +List of stable releases: + +.. code:: bash + + $ git tag + + brahmaputra.1.0 + colorado.1.0 + colorado.2.0 + colorado.3.0 + danube.1.0 + +You could select which stable release should be used. For example, select ``danube.1.0``: + +.. code:: bash + + $ git checkout danube.1.0 + + +Development version of VSPERF can be selected by: + +.. code:: bash + + $ git checkout master + +Colorado to Danube upgrade notes +-------------------------------- + +Obsoleted features +~~~~~~~~~~~~~~~~~~ + +Support of vHost Cuse interface has been removed in Danube release. It means, +that it is not possible to select ``QemuDpdkVhostCuse`` as a VNF anymore. Option +``QemuDpdkVhostUser`` should be used instead. Please check you configuration files +and definition of your testcases for any occurrence of: + +.. code:: python + + VNF = "QemuDpdkVhostCuse" + +or + +.. code:: python + + "VNF" : "QemuDpdkVhostCuse" + +In case that ``QemuDpdkVhostCuse`` is found, it must be modified to ``QemuDpdkVhostUser``. + +**NOTE:** In case that execution of VSPERF is automated by scripts (e.g. for +CI purposes), then these scripts must be checked and updated too. It means, +that any occurrence of: + +.. code:: bash + + ./vsperf --vnf QemuDpdkVhostCuse + +must be updated to: + +.. code:: bash + + ./vsperf --vnf QemuDpdkVhostUser + +Configuration +~~~~~~~~~~~~~ + +Several configuration changes were introduced during Danube release. The most +important changes are discussed below. + +Paths to DPDK, OVS and QEMU +=========================== + +VSPERF uses external tools for proper testcase execution. Thus it is important +to properly configure paths to these tools. In case that tools are installed +by installation scripts and are located inside ``./src`` directory inside +VSPERF home, then no changes are needed. On the other hand, if path settings +was changed by custom configuration file, then it is required to update configuration +accordingly. Please check your configuration files for following configuration +options: + +.. code:: bash + + OVS_DIR + OVS_DIR_VANILLA + OVS_DIR_USER + OVS_DIR_CUSE + + RTE_SDK_USER + RTE_SDK_CUSE + + QEMU_DIR + QEMU_DIR_USER + QEMU_DIR_CUSE + QEMU_BIN + +In case that any of these options is defined, then configuration must be updated. +All paths to the tools are now stored inside ``PATHS`` dictionary. Please +refer to the paths-documentation_ and update your configuration where necessary. + +.. _paths-documentation: http://artifacts.opnfv.org/vswitchperf/docs/index.html#configuration-of-paths-dictionary + +Configuration change via CLI +============================ + +In previous releases it was possible to modify selected configuration options +(mostly VNF specific) via command line interface, i.e. by ``--test-params`` +argument. This concept has been generalized in Danube release and it is +possible to modify any configuration parameter via CLI or via **Parameters** +section of the testcase definition. Old configuration options were obsoleted +and it is required to specify configuration parameter name in the same form +as it is defined inside configuration file, i.e. in uppercase. Please +refer to the overriding-parameters-documentation_ for additional details. + +**NOTE:** In case that execution of VSPERF is automated by scripts (e.g. for +CI purposes), then these scripts must be checked and updated too. It means, +that any occurrence of + +.. code:: bash + + guest_loopback + vanilla_tgen_port1_ip + vanilla_tgen_port1_mac + vanilla_tgen_port2_ip + vanilla_tgen_port2_mac + tunnel_type + +shall be changed to the uppercase form and data type of entered values must +match to data types of original values from configuration files. + +In case that ``guest_nic1_name`` or ``guest_nic2_name`` is changed, +then new dictionary ``GUEST_NICS`` must be modified accordingly. +Please see guest-configuration_ and ``conf/04_vnf.conf`` for additional +details. + +.. _overriding-parameters-documentation: http://artifacts.opnfv.org/vswitchperf/docs/index.html#overriding-values-defined-in-configuration-files +.. _guest-configuration: http://artifacts.opnfv.org/vswitchperf/docs/index.html#configuration-of-guest-options + +Traffic configuration via CLI +============================= + +In previous releases it was possible to modify selected attributes of generated +traffic via command line interface. This concept has been enhanced in Danube +release and it is now possible to modify all traffic specific options via +CLI or by ``TRAFFIC`` dictionary in configuration file. Detailed description +is available at configuration-of-traffic-dictionary_ section of documentation. + +Please check your automated scripts for VSPERF execution for following CLI +parameters and update them according to the documentation: + +.. code:: bash + + bidir + duration + frame_rate + iload + lossrate + multistream + pkt_sizes + pre-installed_flows + rfc2544_tests + stream_type + traffic_type + +.. _configuration-of-traffic-dictionary: http://artifacts.opnfv.org/vswitchperf/docs/index.html#configuration-of-traffic-dictionary diff --git a/docs/design/index.rst b/docs/design/index.rst index a8a076f4..a8a076f4 100755..100644 --- a/docs/design/index.rst +++ b/docs/design/index.rst diff --git a/docs/design/vswitchperf_design.rst b/docs/design/vswitchperf_design.rst index 96b97631..bf82f9b8 100755..100644 --- a/docs/design/vswitchperf_design.rst +++ b/docs/design/vswitchperf_design.rst @@ -314,10 +314,11 @@ Detailed description of ``TRAFFIC`` dictionary items follows: of selected transport protocol Default value: "L4". 'pre_installed_flows' - - Pre-installed flows is an extension of the multistream" - feature. If multistream is disabled, then pre-installed - flows will be ignored. It defines if stream specific flows - will be inserted into OVS or not. + - Pre-installed flows is an extension of the "multistream" + feature. If enabled, it will implicitly insert a flow + for each stream. If multistream is disabled, then + pre-installed flows will be ignored. + Note: It is supported only for p2p deployment scenario. Data type: str Supported values: "Yes" - flows will be inserted into OVS diff --git a/docs/index.rst b/docs/index.rst index 37e0c43f..bce2aa61 100755..100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,7 +17,8 @@ Performance and Test group and its associated projects, as part of OPNFV Platform and VNF level testing and validation. * Project Wiki: https://wiki.opnfv.org/characterize_vswitch_performance_for_telco_nfv_use_cases -* Project Repository: https://gerrit.opnfv.org/gerrit/#/q/vswitchperf +* Project Repository: https://git.opnfv.org/vswitchperf +* Project Artifacts: https://artifacts.opnfv.org/vswitchperf.html * Continuous Integration https://build.opnfv.org/ci/view/vswitchperf/ .. toctree:: @@ -34,4 +35,3 @@ Platform and VNF level testing and validation. Indices ======= * :ref:`search` - diff --git a/docs/msc/factory_and_loader.msc b/docs/msc/factory_and_loader.msc index a744607e..a744607e 100755..100644 --- a/docs/msc/factory_and_loader.msc +++ b/docs/msc/factory_and_loader.msc diff --git a/docs/msc/traffic_controller.msc b/docs/msc/traffic_controller.msc index bd66cce1..bd66cce1 100755..100644 --- a/docs/msc/traffic_controller.msc +++ b/docs/msc/traffic_controller.msc diff --git a/docs/msc/vsperf.msc b/docs/msc/vsperf.msc index aec53604..aec53604 100755..100644 --- a/docs/msc/vsperf.msc +++ b/docs/msc/vsperf.msc diff --git a/docs/requirements/ietf_draft/draft-ietf-bmwg-vswitch-opnfv-01.xml b/docs/requirements/ietf_draft/draft-ietf-bmwg-vswitch-opnfv-01.xml index c8a3d99b..c8a3d99b 100755..100644 --- a/docs/requirements/ietf_draft/draft-ietf-bmwg-vswitch-opnfv-01.xml +++ b/docs/requirements/ietf_draft/draft-ietf-bmwg-vswitch-opnfv-01.xml diff --git a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-00.xml b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-00.xml index b5f7f833..b5f7f833 100755..100644 --- a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-00.xml +++ b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-00.xml diff --git a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-01.xml b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-01.xml index a9405a77..a9405a77 100755..100644 --- a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-01.xml +++ b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-01.xml diff --git a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-02.xml b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-02.xml index 9157763e..9157763e 100755..100644 --- a/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-02.xml +++ b/docs/requirements/ietf_draft/draft-vsperf-bmwg-vswitch-opnfv-02.xml diff --git a/docs/requirements/vm2vm_alternative_benchmark.png b/docs/requirements/vm2vm_alternative_benchmark.png Binary files differindex d21334ba..d21334ba 100755..100644 --- a/docs/requirements/vm2vm_alternative_benchmark.png +++ b/docs/requirements/vm2vm_alternative_benchmark.png diff --git a/docs/requirements/vm2vm_benchmark.png b/docs/requirements/vm2vm_benchmark.png Binary files differindex 3a85e51f..3a85e51f 100755..100644 --- a/docs/requirements/vm2vm_benchmark.png +++ b/docs/requirements/vm2vm_benchmark.png diff --git a/docs/requirements/vm2vm_hypervisor_benchmark.png b/docs/requirements/vm2vm_hypervisor_benchmark.png Binary files differindex b5b76e8a..b5b76e8a 100755..100644 --- a/docs/requirements/vm2vm_hypervisor_benchmark.png +++ b/docs/requirements/vm2vm_hypervisor_benchmark.png diff --git a/docs/requirements/vm2vm_virtual_interface_benchmark.png b/docs/requirements/vm2vm_virtual_interface_benchmark.png Binary files differindex 55294af6..55294af6 100755..100644 --- a/docs/requirements/vm2vm_virtual_interface_benchmark.png +++ b/docs/requirements/vm2vm_virtual_interface_benchmark.png diff --git a/docs/userguide/integration.rst b/docs/userguide/integration.rst index 60ed9245..60ed9245 100755..100644 --- a/docs/userguide/integration.rst +++ b/docs/userguide/integration.rst diff --git a/docs/userguide/testusage.rst b/docs/userguide/testusage.rst index 721fd635..721fd635 100755..100644 --- a/docs/userguide/testusage.rst +++ b/docs/userguide/testusage.rst diff --git a/docs/userguide/yardstick.rst b/docs/userguide/yardstick.rst index c906df8e..c906df8e 100755..100644 --- a/docs/userguide/yardstick.rst +++ b/docs/userguide/yardstick.rst diff --git a/src/dpdk/Makefile b/src/dpdk/Makefile index 93cb7292..69671169 100755 --- a/src/dpdk/Makefile +++ b/src/dpdk/Makefile @@ -79,6 +79,12 @@ else $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE_LINUXAPP) $(AT)sed -i -e 's/CONFIG_RTE_BUILD_COMBINE_LIBS=./CONFIG_RTE_BUILD_COMBINE_LIBS=y/g' $(CONFIG_FILE_LINUXAPP) endif +# CentOS 7.3 specific config changes to compile +ifeq ($(ID),"centos") +ifeq ($(VERSION_ID),"7") + $(AT)sed -i.bak s@'SRCS-y += ethtool/igb/igb_main.c'@'#SRCS-y += ethtool/igb/igb_main.c'@g $(WORK_DIR)/lib/librte_eal/linuxapp/kni/Makefile +endif +endif # RHEL 7.3 specific config changes to compile ifeq ($(ID),"rhel") ifeq ($(VERSION_ID),"7.3") diff --git a/systems/centos/build_base_machine.sh b/systems/centos/build_base_machine.sh index 5430ceba..f2efb541 100755 --- a/systems/centos/build_base_machine.sh +++ b/systems/centos/build_base_machine.sh @@ -77,3 +77,5 @@ python33 python33-python-tkinter git-review " | grep -v ^#) +# prevent ovs vanilla from building from source due to kernel incompatibilities +sed -i s/'SUBBUILDS = src_vanilla'/'#SUBBUILDS = src_vanilla'/ ../src/Makefile diff --git a/tools/pkt_gen/xena/XenaDriver.py b/tools/pkt_gen/xena/XenaDriver.py index 04a99e9d..e144514f 100644 --- a/tools/pkt_gen/xena/XenaDriver.py +++ b/tools/pkt_gen/xena/XenaDriver.py @@ -57,6 +57,7 @@ CMD_LOGOFF = 'c_logoff' CMD_OWNER = 'c_owner' CMD_PORT = ';Port:' CMD_PORT_IP = 'p_ipaddress' +CMD_PORT_LEARNING = 'p_autotrain' CMD_RESERVE = 'p_reservation reserve' CMD_RELEASE = 'p_reservation release' CMD_RELINQUISH = 'p_reservation relinquish' @@ -560,6 +561,14 @@ class XenaPort(object): "on" if on else "off"), self) return self._manager.driver.ask_verify(command) + def set_port_learning(self, interval): + """Start port learning with the interval in seconds specified. 0 disables port learning + :param: interval as int + :return: Boolean True if response OK, False if error. + """ + command = make_port_command('{} {}'.format(CMD_PORT_LEARNING, interval), self) + return self._manager.driver.ask_verify(command) + def set_port_ip(self, ip_addr, cidr, gateway, wild='255'): """ Set the port ip address of the specific port diff --git a/tools/pkt_gen/xena/xena.py b/tools/pkt_gen/xena/xena.py index 20577e8d..e251c1d6 100755 --- a/tools/pkt_gen/xena/xena.py +++ b/tools/pkt_gen/xena/xena.py @@ -188,9 +188,10 @@ class Xena(ITrafficGenerator): result_dict[ResultsConstants.TX_FRAMES] = self.tx_stats.data[ self.tx_stats.pt_stream_keys[0]]['packets'] result_dict[ResultsConstants.TX_RATE_FPS] = self.tx_stats.data[ - self.tx_stats.pt_stream_keys[0]]['pps'] - result_dict[ResultsConstants.TX_RATE_MBPS] = self.tx_stats.data[ - self.tx_stats.pt_stream_keys[0]]['bps'] / 1000000 + self.tx_stats.pt_stream_keys[0]]['packets'] / self._duration + result_dict[ResultsConstants.TX_RATE_MBPS] = (( + self.tx_stats.data[self.tx_stats.pt_stream_keys[0]]['bytes'] + * 8) / 1000000) / self._duration result_dict[ResultsConstants.TX_BYTES] = self.tx_stats.data[ self.tx_stats.pt_stream_keys[0]]['bytes'] # tx rate percent may need to be halved if bi directional @@ -214,10 +215,11 @@ class Xena(ITrafficGenerator): 'pr_tpldstraffic']['0']['packets'] result_dict[ ResultsConstants.THROUGHPUT_RX_FPS] = self.rx_stats.data[ - 'pr_tpldstraffic']['0']['pps'] + 'pr_tpldstraffic']['0']['packets'] / self._duration result_dict[ - ResultsConstants.THROUGHPUT_RX_MBPS] = self.rx_stats.data[ - 'pr_tpldstraffic']['0']['bps'] / 1000000 + ResultsConstants.THROUGHPUT_RX_MBPS] = (( + self.rx_stats.data['pr_tpldstraffic']['0']['bytes'] + *8) / 1000000) / self._duration result_dict[ResultsConstants.RX_BYTES] = self.rx_stats.data[ 'pr_tpldstraffic']['0']['bytes'] # throughput percent may need to be halved if bi directional @@ -383,6 +385,15 @@ class Xena(ITrafficGenerator): # Clear port configuration for a clean start self.xmanager.ports[0].reset_port() self.xmanager.ports[1].reset_port() + if settings.getValue('TRAFFICGEN_XENA_CONT_PORT_LEARNING_ENABLED'): + # turn on port learning + self.xmanager.ports[0].set_port_learning(1) + self.xmanager.ports[1].set_port_learning(1) + sleep(settings.getValue('TRAFFICGEN_XENA_CONT_PORT_LEARNING_DURATION')) + # turn off port learning + self.xmanager.ports[0].set_port_learning(0) + self.xmanager.ports[1].set_port_learning(0) + sleep(1) self.xmanager.ports[0].clear_stats() self.xmanager.ports[1].clear_stats() @@ -395,6 +406,8 @@ class Xena(ITrafficGenerator): settings.getValue('TRAFFICGEN_XENA_PORT1_IP'), settings.getValue('TRAFFICGEN_XENA_PORT1_CIDR'), settings.getValue('TRAFFICGEN_XENA_PORT1_GATEWAY')) + self.xmanager.ports[0].set_port_time_limit(self._duration) + self.xmanager.ports[1].set_port_time_limit(self._duration) def setup_stream(stream, port, payload_id, flip_addr=False): """ @@ -459,7 +472,7 @@ class Xena(ITrafficGenerator): if not self.xmanager.ports[1].traffic_on(): self._logger.error( "Failure to start port 1. Check settings and retry.") - sleep(self._duration + 1) + sleep(self._duration + 5) # the extra 5 seconds is to allow packets in flight to complete # getting results if self._params['traffic']['bidir'] == 'True': # need to aggregate out both ports stats and assign that data diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index a2731478..40f4533b 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -133,11 +133,6 @@ class OvsDpdkVhost(IVSwitchOvs): vhost_count = self._get_port_count('type=dpdkvhostuser') port_name = 'dpdkvhostuser' + str(vhost_count) params = ['--', 'set', 'Interface', port_name, 'type=dpdkvhostuser'] - # multi queue enable - if int(settings.getValue('VSWITCH_DPDK_MULTI_QUEUES')) and \ - not settings.getValue('OVS_OLD_STYLE_MQ'): - params += ['options:n_rxq={}'.format( - settings.getValue('VSWITCH_DPDK_MULTI_QUEUES'))] of_port = bridge.add_port(port_name, params) return (port_name, of_port) |