| #Intent Performance Test for ONOS-next |
| # |
| #andrew@onlab.us |
| # |
| #November 5, 2014 |
| |
| class IntentPerfNext: |
| def __init__(self): |
| self.default = "" |
| |
| def CASE1(self, main): |
| ''' |
| ONOS startup sequence |
| ''' |
| |
| import time |
| global cluster_count |
| cluster_count = 1 |
| |
| cell_name = main.params['ENV']['cellName'] |
| |
| git_pull = main.params['GIT']['autoPull'] |
| checkout_branch = main.params['GIT']['checkout'] |
| |
| ONOS1_ip = main.params['CTRL']['ip1'] |
| ONOS2_ip = main.params['CTRL']['ip2'] |
| ONOS3_ip = main.params['CTRL']['ip3'] |
| ONOS4_ip = main.params['CTRL']['ip4'] |
| ONOS5_ip = main.params['CTRL']['ip5'] |
| ONOS6_ip = main.params['CTRL']['ip6'] |
| ONOS7_ip = main.params['CTRL']['ip7'] |
| |
| main.ONOSbench.onos_uninstall(node_ip=ONOS1_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS2_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS3_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS4_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS5_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS6_ip) |
| main.ONOSbench.onos_uninstall(node_ip=ONOS7_ip) |
| |
| MN1_ip = main.params['MN']['ip1'] |
| BENCH_ip = main.params['BENCH']['ip'] |
| |
| main.case("Setting up test environment") |
| |
| main.step("Creating cell file") |
| cell_file_result = main.ONOSbench.create_cell_file( |
| BENCH_ip, cell_name, MN1_ip, |
| "onos-core,onos-app-metrics,onos-gui", |
| #ONOS1_ip, ONOS2_ip, ONOS3_ip) |
| ONOS1_ip) |
| |
| main.step("Applying cell file to environment") |
| cell_apply_result = main.ONOSbench.set_cell(cell_name) |
| verify_cell_result = main.ONOSbench.verify_cell() |
| |
| main.step("Removing raft logs") |
| main.ONOSbench.onos_remove_raft_logs() |
| |
| main.step("Git checkout and pull "+checkout_branch) |
| if git_pull == 'on': |
| checkout_result = \ |
| main.ONOSbench.git_checkout(checkout_branch) |
| pull_result = main.ONOSbench.git_pull() |
| |
| #If you used git pull, auto compile |
| main.step("Using onos-build to compile ONOS") |
| build_result = main.ONOSbench.onos_build() |
| else: |
| checkout_result = main.TRUE |
| pull_result = main.TRUE |
| build_result = main.TRUE |
| main.log.info("Git pull skipped by configuration") |
| |
| main.log.report("Commit information - ") |
| main.ONOSbench.get_version(report=True) |
| |
| main.step("Creating ONOS package") |
| package_result = main.ONOSbench.onos_package() |
| |
| main.step("Installing ONOS package") |
| install1_result = main.ONOSbench.onos_install(node=ONOS1_ip) |
| #install2_result = main.ONOSbench.onos_install(node=ONOS2_ip) |
| #install3_result = main.ONOSbench.onos_install(node=ONOS3_ip) |
| |
| main.step("Set cell for ONOScli env") |
| main.ONOS1cli.set_cell(cell_name) |
| #main.ONOS2cli.set_cell(cell_name) |
| #main.ONOS3cli.set_cell(cell_name) |
| |
| time.sleep(5) |
| |
| main.step("Start onos cli") |
| cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip) |
| #cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip) |
| #cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip) |
| |
| utilities.assert_equals(expect=main.TRUE, |
| actual = cell_file_result and cell_apply_result and\ |
| verify_cell_result and checkout_result and\ |
| pull_result and build_result and\ |
| install1_result, #and install2_result and\ |
| #install3_result, |
| onpass="ONOS started successfully", |
| onfail="Failed to start ONOS") |
| |
| def CASE2(self, main): |
| ''' |
| Single intent add latency |
| |
| ''' |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| |
| ONOS1_ip = main.params['CTRL']['ip1'] |
| ONOS2_ip = main.params['CTRL']['ip2'] |
| ONOS3_ip = main.params['CTRL']['ip3'] |
| ONOS_user = main.params['CTRL']['user'] |
| |
| default_sw_port = main.params['CTRL']['port1'] |
| |
| #number of iterations of case |
| num_iter = main.params['TEST']['numIter'] |
| num_ignore = int(main.params['TEST']['numIgnore']) |
| |
| #Timestamp keys for json metrics output |
| submit_time = main.params['JSON']['submittedTime'] |
| install_time = main.params['JSON']['installedTime'] |
| wdRequest_time = main.params['JSON']['wdRequestTime'] |
| withdrawn_time = main.params['JSON']['withdrawnTime'] |
| |
| intent_add_lat_list = [] |
| |
| #Assign 'linear' switch format for basic intent testing |
| main.Mininet1.assign_sw_controller( |
| sw="1", ip1=ONOS1_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="2", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="3", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="4", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="5", ip1=ONOS3_ip,port1=default_sw_port) |
| |
| time.sleep(10) |
| |
| main.log.report("Single intent add latency test") |
| |
| devices_json_str = main.ONOS1cli.devices() |
| devices_json_obj = json.loads(devices_json_str) |
| device_id_list = [] |
| |
| #Obtain device id list in ONOS format. |
| #They should already be in order (1,2,3,10,11,12,13, etc) |
| for device in devices_json_obj: |
| device_id_list.append(device['id']) |
| |
| for i in range(0, int(num_iter)): |
| #add_point_intent(ingr_device, egr_device, |
| # ingr_port, egr_port) |
| main.ONOS1cli.add_point_intent( |
| device_id_list[0]+"/1", device_id_list[4]+"/1") |
| |
| #Allow some time for intents to propagate |
| time.sleep(5) |
| |
| #Obtain metrics from ONOS 1, 2, 3 |
| intents_json_str_1 = main.ONOS1cli.intents_events_metrics() |
| intents_json_str_2 = main.ONOS2cli.intents_events_metrics() |
| intents_json_str_3 = main.ONOS3cli.intents_events_metrics() |
| |
| intents_json_obj_1 = json.loads(intents_json_str_1) |
| intents_json_obj_2 = json.loads(intents_json_str_2) |
| intents_json_obj_3 = json.loads(intents_json_str_3) |
| |
| #Parse values from the json object |
| intent_submit_1 = \ |
| intents_json_obj_1[submit_time]['value'] |
| intent_submit_2 = \ |
| intents_json_obj_2[submit_time]['value'] |
| intent_submit_3 = \ |
| intents_json_obj_3[submit_time]['value'] |
| |
| intent_install_1 = \ |
| intents_json_obj_1[install_time]['value'] |
| intent_install_2 = \ |
| intents_json_obj_2[install_time]['value'] |
| intent_install_3 = \ |
| intents_json_obj_3[install_time]['value'] |
| |
| intent_install_lat_1 = \ |
| int(intent_install_1) - int(intent_submit_1) |
| intent_install_lat_2 = \ |
| int(intent_install_2) - int(intent_submit_2) |
| intent_install_lat_3 = \ |
| int(intent_install_3) - int(intent_submit_3) |
| |
| intent_install_lat_avg = \ |
| (intent_install_lat_1 + |
| intent_install_lat_2 + |
| intent_install_lat_3 ) / 3 |
| |
| main.log.info("Intent add latency avg for iteration "+str(i)+ |
| ": "+str(intent_install_lat_avg)+" ms") |
| |
| if intent_install_lat_avg > 0.0 and \ |
| intent_install_lat_avg < 1000 and i > num_ignore: |
| intent_add_lat_list.append(intent_install_lat_avg) |
| else: |
| main.log.info("Intent add latency exceeded "+ |
| "threshold. Skipping iteration "+str(i)) |
| |
| time.sleep(3) |
| |
| #TODO: Possibly put this in the driver function |
| main.log.info("Removing intents for next iteration") |
| json_temp = \ |
| main.ONOS1cli.intents(json_format=True) |
| json_obj_intents = json.loads(json_temp) |
| if json_obj_intents: |
| for intents in json_obj_intents: |
| temp_id = intents['id'] |
| main.ONOS1cli.remove_intent(temp_id) |
| main.log.info("Removing intent id: "+ |
| str(temp_id)) |
| main.ONOS1cli.remove_intent(temp_id) |
| else: |
| main.log.info("Intents were not installed correctly") |
| |
| time.sleep(5) |
| |
| intent_add_lat_avg = sum(intent_add_lat_list) /\ |
| len(intent_add_lat_list) |
| intent_add_lat_std = \ |
| round(numpy.std(intent_add_lat_list),1) |
| #END ITERATION FOR LOOP |
| main.log.report("Single intent add latency - ") |
| main.log.report("Avg: "+str(intent_add_lat_avg)+" ms") |
| main.log.report("Std Deviation: "+str(intent_add_lat_std)+" ms") |
| |
| def CASE3(self, main): |
| ''' |
| Intent Reroute latency |
| ''' |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| |
| ONOS1_ip = main.params['CTRL']['ip1'] |
| ONOS2_ip = main.params['CTRL']['ip2'] |
| ONOS3_ip = main.params['CTRL']['ip3'] |
| ONOS_user = main.params['CTRL']['user'] |
| |
| default_sw_port = main.params['CTRL']['port1'] |
| |
| #number of iterations of case |
| num_iter = main.params['TEST']['numIter'] |
| num_ignore = int(main.params['TEST']['numIgnore']) |
| |
| #Timestamp keys for json metrics output |
| submit_time = main.params['JSON']['submittedTime'] |
| install_time = main.params['JSON']['installedTime'] |
| wdRequest_time = main.params['JSON']['wdRequestTime'] |
| withdrawn_time = main.params['JSON']['withdrawnTime'] |
| |
| devices_json_str = main.ONOS1cli.devices() |
| devices_json_obj = json.loads(devices_json_str) |
| |
| device_id_list = [] |
| |
| #Obtain device id list in ONOS format. |
| #They should already be in order (1,2,3,10,11,12,13, etc) |
| for device in devices_json_obj: |
| device_id_list.append(device['id']) |
| |
| intent_reroute_lat_list = [] |
| |
| for i in range(0, int(num_iter)): |
| #add_point_intent(ingr_device, ingr_port, |
| # egr_device, egr_port) |
| if len(device_id_list) > 0: |
| main.ONOS1cli.add_point_intent( |
| device_id_list[0]+"/2", device_id_list[4]+"/1") |
| else: |
| main.log.info("Failed to fetch devices from ONOS") |
| |
| time.sleep(5) |
| |
| intents_str = main.ONOS1cli.intents(json_format=True) |
| intents_obj = json.loads(intents_str) |
| for intent in intents_obj: |
| if intent['state'] == "INSTALLED": |
| main.log.info("Intent installed successfully") |
| intent_id = intent['id'] |
| else: |
| #TODO: Add error handling |
| main.log.info("Intent installation failed") |
| intent_id = "" |
| |
| #NOTE: this interface is specific to |
| # topo-intentFlower.py topology |
| # reroute case. |
| main.log.info("Disabling interface s2-eth3") |
| main.Mininet1.handle.sendline( |
| "sh ifconfig s2-eth3 down") |
| t0_system = time.time()*1000 |
| |
| #TODO: Check for correct intent reroute |
| time.sleep(5) |
| |
| #Obtain metrics from ONOS 1, 2, 3 |
| intents_json_str_1 = main.ONOS1cli.intents_events_metrics() |
| intents_json_str_2 = main.ONOS2cli.intents_events_metrics() |
| intents_json_str_3 = main.ONOS3cli.intents_events_metrics() |
| |
| intents_json_obj_1 = json.loads(intents_json_str_1) |
| intents_json_obj_2 = json.loads(intents_json_str_2) |
| intents_json_obj_3 = json.loads(intents_json_str_3) |
| |
| #Parse values from the json object |
| intent_install_1 = \ |
| intents_json_obj_1[install_time]['value'] |
| intent_install_2 = \ |
| intents_json_obj_2[install_time]['value'] |
| intent_install_3 = \ |
| intents_json_obj_3[install_time]['value'] |
| |
| intent_reroute_lat_1 = \ |
| int(intent_install_1) - int(t0_system) |
| intent_reroute_lat_2 = \ |
| int(intent_install_2) - int(t0_system) |
| intent_reroute_lat_3 = \ |
| int(intent_install_3) - int(t0_system) |
| |
| intent_reroute_lat_avg = \ |
| (intent_reroute_lat_1 + |
| intent_reroute_lat_2 + |
| intent_reroute_lat_3 ) / 3 |
| |
| main.log.info("Intent reroute latency avg for iteration "+ |
| str(i)+": "+str(intent_reroute_lat_avg)) |
| |
| if intent_reroute_lat_avg > 0.0 and \ |
| intent_reroute_lat_avg < 1000 and i > num_ignore: |
| intent_reroute_lat_list.append(intent_reroute_lat_avg) |
| else: |
| main.log.info("Intent reroute latency exceeded "+ |
| "threshold. Skipping iteration "+str(i)) |
| |
| main.log.info("Removing intents for next iteration") |
| main.ONOS1cli.remove_intent(intent_id) |
| |
| main.log.info("Bringing Mininet interface up for next "+ |
| "iteration") |
| main.Mininet1.handle.sendline( |
| "sh ifconfig s2-eth3 up") |
| |
| intent_reroute_lat_avg = sum(intent_reroute_lat_list) /\ |
| len(intent_reroute_lat_list) |
| intent_reroute_lat_std = \ |
| round(numpy.std(intent_reroute_lat_list),1) |
| #END ITERATION FOR LOOP |
| main.log.report("Single intent reroute latency - ") |
| main.log.report("Avg: "+str(intent_reroute_lat_avg)+" ms") |
| main.log.report("Std Deviation: "+str(intent_reroute_lat_std)+" ms") |
| |
| def CASE7(self, main): |
| ''' |
| Batch intent reroute latency |
| ''' |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| |
| ONOS_ip_list = [] |
| for i in range(1, 8): |
| ONOS_ip_list.append(main.params['CTRL']['ip'+str(i)]) |
| |
| ONOS_user = main.params['CTRL']['user'] |
| default_sw_port = main.params['CTRL']['port1'] |
| |
| batch_intent_size = main.params['TEST']['batchIntentSize'] |
| batch_thresh_min = int(main.params['TEST']['batchThresholdMin']) |
| batch_thresh_max = int(main.params['TEST']['batchThresholdMax']) |
| install_time = main.params['JSON']['installedTime'] |
| |
| #number of iterations of case |
| num_iter = main.params['TEST']['numIter'] |
| num_ignore = int(main.params['TEST']['numIgnore']) |
| num_switch = int(main.params['TEST']['numSwitch']) |
| n_thread = main.params['TEST']['numMult'] |
| |
| main.log.report("Batch intent installation test of "+ |
| batch_intent_size +" intents") |
| |
| batch_result_list = [] |
| |
| #Assign 'linear' switch format for basic intent testing |
| main.Mininet1.assign_sw_controller( |
| sw="1", ip1=ONOS1_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="2", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="3", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="4", ip1=ONOS2_ip,port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="5", ip1=ONOS3_ip,port1=default_sw_port) |
| |
| time.sleep(10) |
| |
| main.log.info("Getting list of available devices") |
| device_id_list = [] |
| json_str = main.ONOS1cli.devices() |
| json_obj = json.loads(json_str) |
| for device in json_obj: |
| device_id_list.append(device['id']) |
| |
| batch_install_lat = [] |
| batch_withdraw_lat = [] |
| sleep_time = 10 |
| |
| base_dir = "/tmp/" |
| max_install_lat = [] |
| |
| for i in range(0, int(num_iter)): |
| main.log.info("Pushing "+ |
| str(int(batch_intent_size)*int(n_thread))+ |
| " intents. Iteration "+str(i)) |
| |
| main.ONOS1cli.push_test_intents( |
| "of:0000000000000001/1", |
| "of:0000000000000005/1", |
| 1000, num_mult="1", app_id="1") |
| |
| #TODO: Check for installation success then proceed |
| time.sleep(30) |
| |
| #NOTE: this interface is specific to |
| # topo-intentFlower.py topology |
| # reroute case. |
| main.log.info("Disabling interface s2-eth3") |
| main.Mininet1.handle.sendline( |
| "sh ifconfig s2-eth3 down") |
| t0_system = time.time()*1000 |
| |
| #TODO: Wait sufficient time for intents to install |
| time.sleep(10) |
| |
| #TODO: get intent installation time |
| |
| #Obtain metrics from ONOS 1, 2, 3 |
| intents_json_str_1 = main.ONOS1cli.intents_events_metrics() |
| intents_json_str_2 = main.ONOS2cli.intents_events_metrics() |
| intents_json_str_3 = main.ONOS3cli.intents_events_metrics() |
| |
| intents_json_obj_1 = json.loads(intents_json_str_1) |
| intents_json_obj_2 = json.loads(intents_json_str_2) |
| intents_json_obj_3 = json.loads(intents_json_str_3) |
| |
| #Parse values from the json object |
| intent_install_1 = \ |
| intents_json_obj_1[install_time]['value'] |
| intent_install_2 = \ |
| intents_json_obj_2[install_time]['value'] |
| intent_install_3 = \ |
| intents_json_obj_3[install_time]['value'] |
| |
| intent_reroute_lat_1 = \ |
| int(intent_install_1) - int(t0_system) |
| intent_reroute_lat_2 = \ |
| int(intent_install_2) - int(t0_system) |
| intent_reroute_lat_3 = \ |
| int(intent_install_3) - int(t0_system) |
| |
| intent_reroute_lat_avg = \ |
| (intent_reroute_lat_1 + |
| intent_reroute_lat_2 + |
| intent_reroute_lat_3 ) / 3 |
| |
| main.log.info("Intent reroute latency avg for iteration "+ |
| str(i)+": "+str(intent_reroute_lat_avg)) |
| #TODO: Remove intents for next iteration |
| |
| time.sleep(5) |
| |
| intents_str = main.ONOS1cli.intents() |
| intents_json = json.loads(intents_str) |
| for intents in intents_json: |
| intent_id = intents['id'] |
| if intent_id: |
| main.ONOS1cli.remove_intent(intent_id) |
| |
| main.Mininet1.handle.sendline( |
| "sh ifconfig s2-eth3 up") |
| |
| main.log.info("Intents removed and port back up") |
| |
| |
| def CASE4(self, main): |
| ''' |
| Batch intent install |
| ''' |
| |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| |
| ONOS1_ip = main.params['CTRL']['ip1'] |
| ONOS2_ip = main.params['CTRL']['ip2'] |
| ONOS3_ip = main.params['CTRL']['ip3'] |
| ONOS4_ip = main.params['CTRL']['ip4'] |
| ONOS5_ip = main.params['CTRL']['ip5'] |
| ONOS6_ip = main.params['CTRL']['ip6'] |
| ONOS7_ip = main.params['CTRL']['ip7'] |
| |
| ONOS_ip_list = [] |
| for i in range(1, 8): |
| ONOS_ip_list.append(main.params['CTRL']['ip'+str(i)]) |
| |
| ONOS_user = main.params['CTRL']['user'] |
| |
| default_sw_port = main.params['CTRL']['port1'] |
| |
| batch_intent_size = main.params['TEST']['batchIntentSize'] |
| batch_thresh_min = int(main.params['TEST']['batchThresholdMin']) |
| batch_thresh_max = int(main.params['TEST']['batchThresholdMax']) |
| |
| #number of iterations of case |
| num_iter = main.params['TEST']['numIter'] |
| num_ignore = int(main.params['TEST']['numIgnore']) |
| num_switch = int(main.params['TEST']['numSwitch']) |
| n_thread = main.params['TEST']['numMult'] |
| #n_thread = 105 |
| |
| #***** |
| global cluster_count |
| #***** |
| |
| #Switch assignment NOTE: hardcoded |
| if cluster_count == 1: |
| for i in range(1, num_switch+1): |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS1_ip, |
| port1=default_sw_port) |
| if cluster_count == 3: |
| for i in range(1, 3): |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS1_ip, |
| port1=default_sw_port) |
| for i in range(3, 6): |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS2_ip, |
| port1=default_sw_port) |
| for i in range(6, 9): |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS3_ip, |
| port1=default_sw_port) |
| if cluster_count == 5: |
| main.Mininet1.assign_sw_controller( |
| sw="1", |
| ip1=ONOS1_ip, |
| port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="2", |
| ip1=ONOS2_ip, |
| port1=default_sw_port) |
| for i in range(3, 6): |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS3_ip, |
| port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="6", |
| ip1=ONOS4_ip, |
| port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="7", |
| ip1=ONOS5_ip, |
| port1=default_sw_port) |
| main.Mininet1.assign_sw_controller( |
| sw="8", |
| ip1=ONOS5_ip, |
| port1=default_sw_port) |
| |
| if cluster_count == 7: |
| for i in range(1,9): |
| if i < 8: |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS_ip_list[i-1], |
| port1=default_sw_port) |
| elif i >= 8: |
| main.Mininet1.assign_sw_controller( |
| sw=str(i), |
| ip1=ONOS_ip_list[6], |
| port1=default_sw_port) |
| |
| time.sleep(30) |
| |
| main.log.report("Batch intent installation test of "+ |
| batch_intent_size +" intents") |
| |
| batch_result_list = [] |
| |
| main.log.info("Getting list of available devices") |
| device_id_list = [] |
| json_str = main.ONOS1cli.devices() |
| json_obj = json.loads(json_str) |
| for device in json_obj: |
| device_id_list.append(device['id']) |
| |
| batch_install_lat = [] |
| batch_withdraw_lat = [] |
| sleep_time = 10 |
| |
| base_dir = "/tmp/" |
| max_install_lat = [] |
| |
| for i in range(0, int(num_iter)): |
| main.log.info("Pushing "+ |
| str(int(batch_intent_size)*int(n_thread))+ |
| " intents. Iteration "+str(i)) |
| |
| for node in range(1, cluster_count+1): |
| save_dir = base_dir + "batch_intent_"+str(node)+".txt" |
| main.ONOSbench.push_test_intents_shell( |
| "of:0000000000000001/"+str(node), |
| "of:0000000000000008/"+str(node), |
| int(batch_intent_size), |
| save_dir, ONOS_ip_list[node-1], |
| num_mult=n_thread, app_id=node) |
| |
| #Wait sufficient time for intents to start |
| #installing |
| |
| time.sleep(sleep_time) |
| print sleep_time |
| |
| intent = "" |
| counter = 300 |
| while len(intent) > 0 and counter > 0: |
| main.ONOS1cli.handle.sendline( |
| "intents | wc -l") |
| main.ONOS1cli.handle.expect( |
| "intents | wc -l") |
| main.ONOS1cli.handle.expect( |
| "onos>") |
| intent_temp = main.ONOS1cli.handle.before() |
| print intent_temp |
| |
| intent = main.ONOS1cli.intents() |
| intent = json.loads(intent) |
| counter = counter-1 |
| time.sleep(1) |
| |
| time.sleep(5) |
| |
| for node in range(1, cluster_count+1): |
| save_dir = base_dir + "batch_intent_"+str(node)+".txt" |
| with open(save_dir) as f_onos: |
| line_count = 0 |
| for line in f_onos: |
| line = line[1:] |
| line = line.split(": ") |
| result = line[1].split(" ")[0] |
| #TODO: add parameters before appending latency |
| if line_count == 0: |
| batch_install_lat.append(int(result)) |
| elif line_count == 1: |
| batch_withdraw_lat.append(int(result)) |
| line_count += 1 |
| main.log.info("Batch install latency for ONOS"+ |
| str(node)+" with "+\ |
| str(batch_intent_size) + "intents: "+\ |
| str(batch_install_lat)) |
| |
| if len(batch_install_lat) > 0 and int(i) > num_ignore: |
| max_install_lat.append(max(batch_install_lat)) |
| elif len(batch_install_lat) == 0: |
| #If I failed to read anything from the file, |
| #increase the wait time before checking intents |
| sleep_time += 30 |
| batch_install_lat = [] |
| |
| #Sleep in between iterations |
| time.sleep(5) |
| |
| main.log.report("Avg of batch installation latency "+ |
| ": "+ |
| str(sum(max_install_lat) / len(max_install_lat))) |
| main.log.report("Std Deviation of batch installation latency "+ |
| ": "+ |
| str(numpy.std(max_install_lat))) |
| |
| def CASE5(self,main): |
| ''' |
| Increase number of nodes and initiate CLI |
| ''' |
| import time |
| import json |
| |
| ONOS1_ip = main.params['CTRL']['ip1'] |
| ONOS2_ip = main.params['CTRL']['ip2'] |
| ONOS3_ip = main.params['CTRL']['ip3'] |
| ONOS4_ip = main.params['CTRL']['ip4'] |
| ONOS5_ip = main.params['CTRL']['ip5'] |
| ONOS6_ip = main.params['CTRL']['ip6'] |
| ONOS7_ip = main.params['CTRL']['ip7'] |
| |
| global cluster_count |
| cluster_count += 2 |
| main.log.report("Increasing cluster size to "+ |
| str(cluster_count)) |
| |
| install_result = main.FALSE |
| |
| if cluster_count == 3: |
| install_result1 = \ |
| main.ONOSbench.onos_install(node=ONOS2_ip) |
| install_result2 = \ |
| main.ONOSbench.onos_install(node=ONOS3_ip) |
| time.sleep(5) |
| |
| main.log.info("Starting ONOS CLI") |
| main.ONOS2cli.start_onos_cli(ONOS2_ip) |
| main.ONOS3cli.start_onos_cli(ONOS3_ip) |
| |
| install_result = install_result1 and install_result2 |
| |
| if cluster_count == 5: |
| main.log.info("Installing ONOS on node 4 and 5") |
| install_result1 = \ |
| main.ONOSbench.onos_install(node=ONOS4_ip) |
| install_result2 = \ |
| main.ONOSbench.onos_install(node=ONOS5_ip) |
| |
| main.log.info("Starting ONOS CLI") |
| main.ONOS4cli.start_onos_cli(ONOS4_ip) |
| main.ONOS5cli.start_onos_cli(ONOS5_ip) |
| |
| install_result = install_result1 and install_result2 |
| |
| if cluster_count == 7: |
| main.log.info("Installing ONOS on node 6 and 7") |
| install_result1 = \ |
| main.ONOSbench.onos_install(node=ONOS6_ip) |
| install_result2 = \ |
| main.ONOSbench.onos_install(node=ONOS7_ip) |
| |
| main.log.info("Starting ONOS CLI") |
| main.ONOS6cli.start_onos_cli(ONOS6_ip) |
| main.ONOS7cli.start_onos_cli(ONOS7_ip) |
| |
| install_result = install_result1 and install_result2 |
| |
| time.sleep(5) |
| |
| if install_result == main.TRUE: |
| assertion = main.TRUE |
| else: |
| assertion = main.FALSE |
| |
| utilities.assert_equals(expect=main.TRUE, actual=assertion, |
| onpass="Scale out to "+str(cluster_count)+\ |
| " nodes successful", |
| onfail="Scale out to "+str(cluster_count)+\ |
| " nodes failed") |
| |
| def CASE9(self, main): |
| count = 0 |
| sw_num1 = 1 |
| sw_num2 = 1 |
| appid = 0 |
| port_num1 = 1 |
| port_num2 = 1 |
| |
| time.sleep(30) |
| |
| while True: |
| #main.ONOS1cli.push_test_intents( |
| #"of:0000000000001001/1", |
| #"of:0000000000002001/1", |
| # 100, num_mult="10", app_id="1") |
| #main.ONOS2cli.push_test_intents( |
| # "of:0000000000001002/1", |
| # "of:0000000000002002/1", |
| # 100, num_mult="10", app_id="2") |
| #main.ONOS2cli.push_test_intents( |
| # "of:0000000000001003/1", |
| # "of:0000000000002003/1", |
| # 100, num_mult="10", app_id="3") |
| count += 1 |
| |
| if count >= 100: |
| main.ONOSbench.handle.sendline( |
| "onos 10.128.174.1 intents-events-metrics >>"+\ |
| " /tmp/metrics_intents_temp.txt &") |
| count = 0 |
| |
| arg1 = "of:000000000000100"+str(sw_num1)+"/"+str(port_num1) |
| arg2 = "of:000000000000200"+str(sw_num2)+"/"+str(port_num2) |
| |
| sw_num1 += 1 |
| |
| if sw_num1 > 7: |
| sw_num1 = 1 |
| sw_num2 += 1 |
| if sw_num2 > 7: |
| appid += 1 |
| |
| if sw_num2 > 7: |
| sw_num2 = 1 |
| |
| main.ONOSbench.push_test_intents_shell( |
| arg1, |
| arg2, |
| 100, "/tmp/temp.txt", "10.128.174.1", |
| num_mult="10", app_id=appid,report=False) |
| #main.ONOSbench.push_test_intents_shell( |
| # "of:0000000000001002/1", |
| # "of:0000000000002002/1", |
| # 133, "/tmp/temp2.txt", "10.128.174.2", |
| # num_mult="6", app_id="2",report=False) |
| #main.ONOSbench.push_test_intents_shell( |
| # "of:0000000000001003/1", |
| # "of:0000000000002003/1", |
| # 133, "/tmp/temp3.txt", "10.128.174.3", |
| # num_mult="6", app_id="3",report=False) |
| |
| time.sleep(0.2) |
| |