diff options
Diffstat (limited to 'yardstick/vTC/apexlake/experimental_framework/benchmarks/instantiation_validation_benchmark.py')
-rw-r--r-- | yardstick/vTC/apexlake/experimental_framework/benchmarks/instantiation_validation_benchmark.py | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/yardstick/vTC/apexlake/experimental_framework/benchmarks/instantiation_validation_benchmark.py b/yardstick/vTC/apexlake/experimental_framework/benchmarks/instantiation_validation_benchmark.py deleted file mode 100644 index db9d449ef..000000000 --- a/yardstick/vTC/apexlake/experimental_framework/benchmarks/instantiation_validation_benchmark.py +++ /dev/null @@ -1,260 +0,0 @@ -# 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 __future__ import absolute_import -import os -# import signal -import time - -import subprocess -from experimental_framework.benchmarks import benchmark_base_class as base -from experimental_framework.constants import framework_parameters as fp -from experimental_framework.constants import conf_file_sections as cfs -from experimental_framework.packet_generators import dpdk_packet_generator \ - as dpdk -import experimental_framework.common as common -from six.moves import range - - -THROUGHPUT = 'throughput' -VLAN_SENDER = 'vlan_sender' -VLAN_RECEIVER = 'vlan_receiver' -PACKETS_FILE_NAME = 'packets.res' -PACKET_CHECKER_PROGRAM_NAME = 'test_sniff' -MULTICAST_GROUP = '224.192.16.1' - - -class InstantiationValidationBenchmark(base.BenchmarkBaseClass): - - def __init__(self, name, params): - base.BenchmarkBaseClass.__init__(self, name, params) - self.base_dir = os.path.join( - common.get_base_dir(), fp.EXPERIMENTAL_FRAMEWORK_DIR, - fp.DPDK_PKTGEN_DIR) - self.results_file = self.base_dir + PACKETS_FILE_NAME - self.lua_file = self.base_dir + 'constant_traffic.lua' - self.res_dir = '' - self.interface_name = '' - - # Set the packet checker command - self.pkt_checker_command = os.path.join( - common.get_base_dir(), - 'experimental_framework/libraries/', - 'packet_checker/', - PACKET_CHECKER_PROGRAM_NAME + ' ') - - def init(self): - """ - Initialize the benchmark - :return: None - """ - pass - - def finalize(self): - """ - Finalizes the benchmark - :return: None - """ - pass - - def get_features(self): - features = dict() - features['description'] = 'Instantiation Validation Benchmark' - features['parameters'] = [THROUGHPUT, VLAN_SENDER, VLAN_RECEIVER] - features['allowed_values'] = dict() - features['allowed_values'][THROUGHPUT] = [str(x) for x in range(100)] - features['allowed_values'][VLAN_SENDER] = [str(x) for x in - range(-1, 4096)] - features['allowed_values'][VLAN_RECEIVER] = [str(x) - for x in range(-1, 4096)] - features['default_values'] = dict() - features['default_values'][THROUGHPUT] = '1' - features['default_values'][VLAN_SENDER] = '-1' - features['default_values'][VLAN_RECEIVER] = '-1' - return features - - def run(self): - # Setup packet generator - traffic_time = '10' - packet_size = '512' - traffic_rate_percentage = self.params[THROUGHPUT] - - dpdk_pktgen_vars = common.get_dpdk_pktgen_vars() - # bus_address = dpdk_pktgen_vars[cfs.CFSP_DPDK_BUS_SLOT_NIC_2] - self.interface_name = dpdk_pktgen_vars[cfs.CFSP_DPDK_NAME_IF_2] - packetgen = dpdk.DpdkPacketGenerator() - self._configure_lua_file(traffic_rate_percentage, traffic_time) - packetgen.init_dpdk_pktgen(dpdk_interfaces=1, - pcap_file_0='packet_' + packet_size + - '.pcap', - pcap_file_1='igmp.pcap', - lua_script='constant_traffic.lua', - vlan_0=self.params[VLAN_SENDER], - vlan_1=self.params[VLAN_RECEIVER]) - - self._init_packet_checker() - # Send constant traffic at a specified rate - common.LOG.debug('Start the packet generator') - packetgen.send_traffic() - common.LOG.debug('Stop the packet generator') - time.sleep(5) - self._finalize_packet_checker() - self._reset_lua_file(traffic_rate_percentage, traffic_time) - return self._get_results() - - def _configure_lua_file(self, traffic_rate_percentage, traffic_time): - """ - 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 + '"') - common.replace_in_file(self.lua_file, 'local traffic_rate = 0', - 'local traffic_rate = ' + - traffic_rate_percentage) - common.replace_in_file(self.lua_file, 'local traffic_delay = 0', - 'local traffic_delay = ' + traffic_time) - - def _reset_lua_file(self, traffic_rate_percentage, traffic_time): - """ - Configure the packet gen to write the results into the right file - :param traffic_rate_percentage: - :param traffic_time: - :return: None - """ - - common.replace_in_file(self.lua_file, 'local out_file = "' + - self.results_file + '"', - 'local out_file = ""') - common.replace_in_file(self.lua_file, 'local traffic_rate = ' + - traffic_rate_percentage, - 'local traffic_rate = 0') - common.replace_in_file(self.lua_file, 'local traffic_delay = ' + - traffic_time, 'local traffic_delay = 0') - - def _get_results(self): - ret_val = dict() - packet_checker_res = 0 - if self.res_dir: - packet_checker_res = \ - int(common.get_file_first_line(self.res_dir + - 'packet_checker.res')) - pkt_gen_res = int(common.get_file_first_line(self.results_file)) - if pkt_gen_res <= packet_checker_res or \ - (float(pkt_gen_res - packet_checker_res) / pkt_gen_res) <= 0.1: - ret_val['failure'] = '0' - else: - ret_val['failure'] = '1' - return ret_val - - def _init_packet_checker(self): - """ - Sets up the multicast and starts the packet checker - :return: - """ - # Kill any other process running from previous failed execution - self.res_dir = common.get_result_dir() - pids = self._get_pids() - for pid in pids: - # os.kill(pid, signal.SIGTERM) - command = 'sudo kill ' + str(pid) - common.run_command(command) - - # initialization of the VLAN interface - command = "sudo ip link add link " - command += self.interface_name - command += " name " - command += self.interface_name + '.' + self.params[VLAN_RECEIVER] - command += " type vlan id " + self.params[VLAN_RECEIVER] - common.run_command(command) - - # set up the new - command = 'sudo ifconfig ' + self.interface_name + '.' + \ - self.params[VLAN_RECEIVER] - # An IP address is required for the interface to receive a multicast - # flow. The specific address is not important - command += ' 10.254.254.254 up netmask 255.255.255.248' - common.run_command(command) - - command = "sudo ifconfig " - command += self.interface_name + "." + self.params[VLAN_RECEIVER] - command += " promisc" - common.run_command(command) - - # configure smcroute - command = "sudo echo 'mgroup from " - command += self.interface_name + '.' + self.params[VLAN_RECEIVER] - command += " group " - command += MULTICAST_GROUP - command += "' > /etc/smcroute.conf" - common.run_command(command) - - # run smcroute on the interface - command = 'sudo smcroute -d' - common.run_command(command) - time.sleep(3) - - # Start the packet checker - current_dir = os.path.dirname(os.path.realpath(__file__)) - dir_list = self.pkt_checker_command.split('/') - directory = os.pathsep.join(dir_list[0:len(dir_list) - 1]) - os.chdir(directory) - command = "make" - common.run_command(command) - os.chdir(current_dir) - - command = "sudo chmod +x {}".format(self.pkt_checker_command) - common.run_command(command) - - command = 'sudo ' + self.pkt_checker_command - command += self.interface_name + '.' + self.params[VLAN_RECEIVER] - command += ' 128' - command += ' &' - common.run_command(command) - - def _finalize_packet_checker(self): - """ - Obtains the PID of the packet checker and sends an alarm to - terminate it - :return: None - """ - pids = self._get_pids() - for pid in pids: - # os.kill(pid, signal.SIGTERM) - command = 'sudo kill ' + str(pid) - common.run_command(command) - - # stop smcroute on the interface - command = 'sudo smcroute -k' - common.run_command(command) - - # finalization of the VLAN interface - command = "sudo ip link delete " - command += self.interface_name + '.' + self.params[VLAN_RECEIVER] - common.run_command(command) - - def _get_pids(self): - """ - Returns a list of integers containing the pid or the pids of the - processes currently running on the host - :return: type: list of int - """ - output = subprocess.check_output( - 'pgrep "{}"'.format(PACKET_CHECKER_PROGRAM_NAME)) - if not output: - pids = [] - else: - pids = [int(x) for x in output.splitlines()] - return pids |