aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py')
-rw-r--r--yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py143
1 files changed, 143 insertions, 0 deletions
diff --git a/yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py b/yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py
new file mode 100644
index 000000000..2ac3ea9c4
--- /dev/null
+++ b/yardstick/vTC/apexlake/experimental_framework/benchmarks/rfc2544_throughput_benchmark.py
@@ -0,0 +1,143 @@
+# Copyright (c) 2015 Intel Research and Development Ireland Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from experimental_framework.benchmarks import benchmark_base_class
+from experimental_framework.packet_generators \
+ import dpdk_packet_generator as dpdk
+import experimental_framework.common as common
+from experimental_framework.constants import framework_parameters as fp
+
+
+PACKET_SIZE = 'packet_size'
+VLAN_SENDER = 'vlan_sender'
+VLAN_RECEIVER = 'vlan_receiver'
+
+
+class RFC2544ThroughputBenchmark(benchmark_base_class.BenchmarkBaseClass):
+ """
+ Calculates the throughput of the VNF under test according to the RFC2544.
+ """
+
+ def __init__(self, name, params):
+ benchmark_base_class.BenchmarkBaseClass.__init__(self, name, params)
+ self.base_dir = common.get_base_dir() + \
+ fp.EXPERIMENTAL_FRAMEWORK_DIR + fp.DPDK_PKTGEN_DIR
+ self.results_file = self.base_dir + 'experiment.res'
+ self.lua_file = self.base_dir + 'rfc2544.lua'
+
+ def init(self):
+ """
+ Initialize the benchmark
+ :return: None
+ """
+ pass
+
+ def finalize(self):
+ """
+ :return: None
+ """
+ pass
+
+ def get_features(self):
+ """
+ Returns the features associated to the benchmark
+ :return:
+ """
+ features = dict()
+ features['description'] = 'RFC 2544 Throughput calculation'
+ features['parameters'] = [PACKET_SIZE, VLAN_SENDER, VLAN_RECEIVER]
+ features['allowed_values'] = dict()
+ features['allowed_values'][PACKET_SIZE] = ['64', '128', '256', '512',
+ '1024', '1280', '1514']
+ features['allowed_values'][VLAN_SENDER] = map(str, range(-1, 4096))
+ features['allowed_values'][VLAN_RECEIVER] = map(str, range(-1, 4096))
+ features['default_values'] = dict()
+ features['default_values'][PACKET_SIZE] = '1280'
+ features['default_values'][VLAN_SENDER] = '1007'
+ features['default_values'][VLAN_RECEIVER] = '1006'
+ return features
+
+ def run(self):
+ """
+ Sends and receive traffic according to the RFC methodology in order
+ to measure the throughput of the workload
+ :return: Results of the testcase (type: dict)
+ """
+ ret_val = dict()
+ packet_size = self._extract_packet_size_from_params()
+ ret_val[PACKET_SIZE] = packet_size
+
+ # Packetgen management
+ packetgen = dpdk.DpdkPacketGenerator()
+ self._configure_lua_file()
+ packetgen.init_dpdk_pktgen(dpdk_interfaces=2,
+ pcap_file_0='packet_' +
+ packet_size + '.pcap',
+ pcap_file_1='igmp.pcap',
+ lua_script='rfc2544.lua',
+ vlan_0=self.params[VLAN_SENDER],
+ vlan_1=self.params[VLAN_RECEIVER])
+ common.LOG.debug('Start the packet generator - packet size: ' +
+ str(packet_size))
+ packetgen.send_traffic()
+ common.LOG.debug('Stop the packet generator')
+
+ # Result Collection
+ results = self._get_results()
+ for metric_name in results.keys():
+ ret_val[metric_name] = results[metric_name]
+ self._reset_lua_file()
+ return ret_val
+
+ def _extract_packet_size_from_params(self):
+ """
+ Extracts packet sizes from parameters
+ :return: packet_sizes (list)
+ """
+ packet_size = '1280' # default value
+ if PACKET_SIZE in self.params.keys() and \
+ isinstance(self.params[PACKET_SIZE], str):
+ packet_size = self.params[PACKET_SIZE]
+ return packet_size
+
+ def _configure_lua_file(self):
+ """
+ Configure the packet gen to write the results into the right file
+ :return: None
+ """
+ common.replace_in_file(self.lua_file, 'local out_file = ""',
+ 'local out_file = "' +
+ self.results_file + '"')
+
+ def _reset_lua_file(self):
+ """
+ Sets back the configuration of the local file var to the default
+ :return:
+ """
+ common.replace_in_file(self.lua_file, 'local out_file = "' +
+ self.results_file + '"',
+ 'local out_file = ""')
+
+ def _get_results(self):
+ """
+ Returns the results of the experiment
+ :return: None
+ """
+ throughput = common.get_file_first_line(self.results_file)
+ ret_val = dict()
+ try:
+ ret_val['throughput'] = int(throughput)
+ except:
+ ret_val['throughput'] = 0
+ return ret_val