From 725033715118bc318fdd6aa3745c2c07ca714086 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Tue, 14 Mar 2017 12:54:39 +0000 Subject: 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 Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Bill Michalowski Reviewed-by: Sridhar Rao Reviewed-by: Trevor Cooper --- 3rd_party/ixia/ixnetrfc2544.tcl | 4 +--- 3rd_party/ixia/ixnetrfc2544v2.tcl | 8 ++------ conf/01_testcases.conf | 4 ++-- conf/03_traffic.conf | 5 +++-- core/vswitch_controller_p2p.py | 8 ++++---- docs/testing/developer/design/vswitchperf_design.rst | 3 ++- testcases/testcase.py | 2 ++ tools/functions.py | 14 ++++++++++++++ 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 diff --git a/vsperf b/vsperf index fea7997b..da6d15e4 100755 --- a/vsperf +++ b/vsperf @@ -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()) -- cgit 1.2.3-korg