diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-03-14 12:54:39 +0000 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2017-03-24 08:06:45 +0000 |
commit | 725033715118bc318fdd6aa3745c2c07ca714086 (patch) | |
tree | bae5202a755c6a21d59cb17277b469167e35baeb | |
parent | 0ccb44ca1f90200a2e41f25fcf499074c819002d (diff) |
multistream: Support huge number of streams
Restriction of 64K streams was limited only to L4 stream
type. In case of L3 and L2 stream type, it is possible to
define unlimited number of streams to be simulated
by traffic generator.
JIRA: VSPERF-498
Change-Id: I4ce3253299473127d135c01543999a8593b9556f
Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Bill Michalowski <bmichalo@redhat.com>
Reviewed-by: Sridhar Rao <sridhar.rao@spirent.com>
Reviewed-by: Trevor Cooper <trevor.cooper@intel.com>
-rw-r--r-- | 3rd_party/ixia/ixnetrfc2544.tcl | 4 | ||||
-rwxr-xr-x | 3rd_party/ixia/ixnetrfc2544v2.tcl | 8 | ||||
-rwxr-xr-x | conf/01_testcases.conf | 4 | ||||
-rw-r--r-- | conf/03_traffic.conf | 5 | ||||
-rw-r--r-- | core/vswitch_controller_p2p.py | 8 | ||||
-rw-r--r-- | docs/testing/developer/design/vswitchperf_design.rst | 3 | ||||
-rw-r--r-- | testcases/testcase.py | 2 | ||||
-rw-r--r-- | tools/functions.py | 14 | ||||
-rwxr-xr-x | vsperf | 2 |
9 files changed, 32 insertions, 18 deletions
diff --git a/3rd_party/ixia/ixnetrfc2544.tcl b/3rd_party/ixia/ixnetrfc2544.tcl index faab5a68..5dccae3f 100644 --- a/3rd_party/ixia/ixnetrfc2544.tcl +++ b/3rd_party/ixia/ixnetrfc2544.tcl @@ -1,7 +1,7 @@ #!/usr/bin/env tclsh # Copyright (c) 2014, Ixia -# Copyright (c) 2015-2016, Intel Corporation +# Copyright (c) 2015-2017, Intel Corporation # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -120,8 +120,6 @@ proc startRfc2544Test { testSpec trafficSpec } { if {($multipleStreams < 0)} { set multipleStreams 0 - } elseif {($multipleStreams > 65535)} { - set multipleStreams 65535 } if {$multipleStreams} { diff --git a/3rd_party/ixia/ixnetrfc2544v2.tcl b/3rd_party/ixia/ixnetrfc2544v2.tcl index cc5a6946..5758f0e4 100755 --- a/3rd_party/ixia/ixnetrfc2544v2.tcl +++ b/3rd_party/ixia/ixnetrfc2544v2.tcl @@ -1,7 +1,7 @@ #!/usr/bin/env tclsh # Copyright (c) 2014, Ixia -# Copyright (c) 2015-2016, Intel Corporation +# Copyright (c) 2015-2017, Intel Corporation # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -115,11 +115,7 @@ proc startRfc2544Test { testSpec trafficSpec } { set numflows 64000 if {$multipleStreams} { - if {($multipleStreams > 65535)} { - set numflows 65535 - } else { - set numflows $multipleStreams - } + set numflows $multipleStreams set multipleStreams increment } else { set multipleStreams singleValue diff --git a/conf/01_testcases.conf b/conf/01_testcases.conf index 4851b043..2d5ab93e 100755 --- a/conf/01_testcases.conf +++ b/conf/01_testcases.conf @@ -1,4 +1,4 @@ -# Copyright 2015-2016 Intel Corporation. +# Copyright 2015-2017 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -270,7 +270,7 @@ PERFORMANCE_TESTS = [ "Parameters" : { "TRAFFIC" : { "traffic_type" : "rfc2544_throughput", - "multistream" : "8000", + "multistream" : 8000, }, }, }, diff --git a/conf/03_traffic.conf b/conf/03_traffic.conf index ccc98e3b..baded627 100644 --- a/conf/03_traffic.conf +++ b/conf/03_traffic.conf @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# Copyright 2015-2017 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -39,7 +39,8 @@ LOG_FILE_TRAFFIC_GEN = 'traffic-gen.log' # 'multistream' - Defines number of flows simulated by traffic generator. # Value 0 disables multistream feature # Data type: int -# Supported values: 0-65535 +# Supported values: 0-65536 for 'L4' stream type +# unlimited for 'L2' and 'L3' stream types # Default value: 0. # 'stream_type' - Stream type is an extension of the "multistream" feature. # If multistream is disabled, then stream type will be diff --git a/core/vswitch_controller_p2p.py b/core/vswitch_controller_p2p.py index de3fcc0d..0d41b145 100644 --- a/core/vswitch_controller_p2p.py +++ b/core/vswitch_controller_p2p.py @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# Copyright 2015-2017 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -147,7 +147,7 @@ class VswitchControllerP2P(IVswitchController): if self._traffic['stream_type'] == 'L2': # iterate through destimation MAC address dst_mac_value = netaddr.EUI(self._traffic['l2']['dstmac']).value - for i in range(int(self._traffic['multistream'])): + for i in range(self._traffic['multistream']): tmp_mac = netaddr.EUI(dst_mac_value + i) tmp_mac.dialect = netaddr.mac_unix_expanded flow_template.update({'dl_dst':tmp_mac}) @@ -156,7 +156,7 @@ class VswitchControllerP2P(IVswitchController): elif self._traffic['stream_type'] == 'L3': # iterate through destimation IP address dst_ip_value = netaddr.IPAddress(self._traffic['l3']['dstip']).value - for i in range(int(self._traffic['multistream'])): + for i in range(self._traffic['multistream']): tmp_ip = netaddr.IPAddress(dst_ip_value + i) flow_template.update({'dl_type':'0x0800', 'nw_dst':tmp_ip}) # optimize flow insertion by usage of cache @@ -164,7 +164,7 @@ class VswitchControllerP2P(IVswitchController): elif self._traffic['stream_type'] == 'L4': # read transport protocol from configuration and iterate through its destination port proto = _PROTO_TCP if self._traffic['l3']['proto'].lower() == 'tcp' else _PROTO_UDP - for i in range(int(self._traffic['multistream'])): + for i in range(self._traffic['multistream']): flow_template.update({'dl_type':'0x0800', 'nw_proto':proto, 'tp_dst':i}) # optimize flow insertion by usage of cache self._vswitch.add_flow(bridge, flow_template, cache='on') diff --git a/docs/testing/developer/design/vswitchperf_design.rst b/docs/testing/developer/design/vswitchperf_design.rst index 34f2b227..aa7fb342 100644 --- a/docs/testing/developer/design/vswitchperf_design.rst +++ b/docs/testing/developer/design/vswitchperf_design.rst @@ -305,7 +305,8 @@ Detailed description of ``TRAFFIC`` dictionary items follows: 'multistream' - Defines number of flows simulated by traffic generator. Value 0 disables multistream feature Data type: int - Supported values: 0-65535 + Supported values: 0-65536 for 'L4' stream type + unlimited for 'L2' and 'L3' stream types Default value: 0. 'stream_type' - Stream type is an extension of the "multistream" feature. If multistream is disabled, then stream type will be diff --git a/testcases/testcase.py b/testcases/testcase.py index 4fbf9c04..d17abb61 100644 --- a/testcases/testcase.py +++ b/testcases/testcase.py @@ -139,6 +139,8 @@ class TestCase(object): self._traffic.update({'bidir': bidirectional, 'tunnel_type': self._tunnel_type,}) + self._traffic = functions.check_traffic(self._traffic) + # Packet Forwarding mode self._vswitch_none = S.getValue('VSWITCH').strip().lower() == 'none' diff --git a/tools/functions.py b/tools/functions.py index d00200d9..05bde54f 100644 --- a/tools/functions.py +++ b/tools/functions.py @@ -21,6 +21,8 @@ import glob import shutil from conf import settings as S +MAX_L4_FLOWS = 65536 + # # Support functions # @@ -139,3 +141,15 @@ def settings_update_paths(): tools['dpdk_src'] = S.getValue('PATHS')['dpdk']['src']['path'] S.setValue('TOOLS', tools) + +def check_traffic(traffic): + """Check traffic definition and correct it if needed. + """ + # in case of UDP ports we have only 65536 (0-65535) unique options + if traffic['multistream'] > MAX_L4_FLOWS and \ + traffic['stream_type'] == 'L4': + logging.getLogger().warning('Requested amount of L4 flows %s is bigger than ' + 'number of transport protocol ports. It was set ' + 'to %s.', traffic['multistream'], MAX_L4_FLOWS) + traffic['multistream'] = MAX_L4_FLOWS + return traffic @@ -626,6 +626,8 @@ def main(): # set traffic details, so they can be passed to traffic ctl traffic = copy.deepcopy(settings.getValue('TRAFFIC')) + traffic = functions.check_traffic(traffic) + traffic_ctl = component_factory.create_traffic( traffic['traffic_type'], loader.get_trafficgen_class()) |