some minor backward compatible, major backward incompatible changes and code formatting (beautification)
Minor Modifications: * Indentation issues are fixed * Typo errors in source code and comments are fixed * Misspelled parameters in plotTaskFailureReason.m are corrected * sim_results folder is added to .gitignore file Backward compatible changes * The exit code of the application when there is an error is changed from 0 to 1 * Default constructors are added for Location.java, LoadGeneratorModel.java, MobilityModel.java, EdgeOrchestrator.java (this change request coming from a developer) * public TaskProperty(int mobileDeviceId, double startTime, ExponentialDistribution[] expRngList) is added to TaskProperty.java (this change request coming from a developer to create a task without task type) * double getCreationTime() function is added to Task.java * void reconfigureMips(double mips) function is added to EdgeVM (for future usage) * gsm_propagation_delay variable is added to config file. SimSettings class is also modified accordingly. You can use it if you have cellular network access in your scenario. * wlan_range, northern_bound, southern_bound, eastern_bound, western_bound variables are added to config file; and relevant functions are added to SimSettings class. (this change request coming from a developer) Backward incompatible changes! * location_check_interval variable name is changed to location_check_interval in config.properties file. Please update your config files accordingly (remove 'vm_' part) * Major modifications are applied in SimLogger class to decrease time complexity. Now the basic results are kept in the memory and saved to the files at the end of the simulation. As a result of this change, the signature of the SimLogger.addLog () function had to be changed. You must add the mobile device id as the first argument. Please update your MobileDeviceManager class accordingly (add task.getCloudletId () as the first argument).
This commit is contained in:
parent
1b4a02e7e6
commit
08341c3681
3
.gitignore
vendored
3
.gitignore
vendored
@ -15,6 +15,9 @@ Desktop.ini
|
||||
# bin folder
|
||||
bin
|
||||
|
||||
# simulation output folder
|
||||
sim_results
|
||||
|
||||
# eclipse's files
|
||||
.settings
|
||||
.classpath
|
||||
|
@ -2,7 +2,7 @@
|
||||
simulation_time=30
|
||||
warm_up_period=3
|
||||
vm_load_check_interval=0.1
|
||||
vm_location_check_interval=0.1
|
||||
location_check_interval=0.1
|
||||
file_log_enabled=true
|
||||
deep_file_log_enabled=false
|
||||
|
||||
|
@ -21,7 +21,7 @@ function [] = plotGenericResult(rowOfset, columnOfset, yLabel, appType, calculat
|
||||
for j=1:numOfMobileDevices
|
||||
try
|
||||
mobileDeviceNumber = startOfMobileDeviceLoop + stepOfMobileDeviceLoop * (j-1);
|
||||
filePath = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_',char(scenarioType(i)),'_NEXT_FIT_',int2str(mobileDeviceNumber),'DEVICES_',appType,'_GENERIC.log')
|
||||
filePath = strcat(folderPath,'\ite',int2str(s),'\SIMRESULT_',char(scenarioType(i)),'_NEXT_FIT_',int2str(mobileDeviceNumber),'DEVICES_',appType,'_GENERIC.log');
|
||||
|
||||
readData = dlmread(filePath,';',rowOfset,0);
|
||||
value = readData(1,columnOfset);
|
||||
|
@ -1,27 +1,27 @@
|
||||
function [] = plotTaskFailureReason()
|
||||
|
||||
plotGenericResult(1, 10, 'Failed Task due to VM Capacity (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(1, 11, 'Failed Task due to Mobility (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 5, 'Failed Tasks due to WLAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 7, 'Failed Tasks due to WAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
end
|
@ -2,7 +2,7 @@
|
||||
simulation_time=30
|
||||
warm_up_period=3
|
||||
vm_load_check_interval=0.1
|
||||
vm_location_check_interval=0.1
|
||||
location_check_interval=0.1
|
||||
file_log_enabled=true
|
||||
deep_file_log_enabled=false
|
||||
|
||||
|
@ -1,33 +1,33 @@
|
||||
function [] = plotTaskFailureReason()
|
||||
|
||||
plotGenericResult(1, 10, 'Failed Task due to VM Capacity (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(1, 11, 'Failed Task due to Mobility (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 5, 'Failed Tasks due to WLAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 5, {'Failed Tasks due to WLAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 6, 'Failed Tasks due to MAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 6, {'Failed Tasks due to MAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 7, 'Failed Tasks due to WAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(5, 7, {'Failed Tasks due to WAN failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
end
|
@ -2,7 +2,7 @@
|
||||
simulation_time=33
|
||||
warm_up_period=3
|
||||
vm_load_check_interval=0.1
|
||||
vm_location_check_interval=0.1
|
||||
location_check_interval=0.1
|
||||
file_log_enabled=true
|
||||
deep_file_log_enabled=false
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
function [] = plotTaskFailureReason()
|
||||
|
||||
plotGenericResult(1, 10, 'Failed Task due to VM Capacity (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(1, 11, 'Failed Task due to Mobility (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 11, {'Failed Task due to Mobility';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(1, 4, 'Failed Tasks due to Network failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
plotGenericResult(1, 4, {'Failed Tasks due to Network failure';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
end
|
@ -2,7 +2,7 @@
|
||||
simulation_time=33
|
||||
warm_up_period=3
|
||||
vm_load_check_interval=0.1
|
||||
vm_location_check_interval=0.1
|
||||
location_check_interval=0.1
|
||||
file_log_enabled=true
|
||||
deep_file_log_enabled=false
|
||||
|
||||
|
@ -1,31 +1,31 @@
|
||||
function [] = plotTaskFailureReason()
|
||||
plotGenericResult(1, 10, 'Failed Task due to VM Capacity (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 10, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(1, 11, 'Average Failed Task due to Mobility (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(1, 11, {'Failed Task due to VM Capacity';'for Heavy Computation App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 4, 'Failed Tasks due to WLAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 4, {'Failed Tasks due to WLAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 5, 'Failed Tasks due to MAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 5, {'Failed Tasks due to MAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
|
||||
plotGenericResult(5, 6, 'Failed Tasks due to WAN failure (%)', 'ALL_APPS', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Health App (%)'}, 'HEALTH_APP', 'for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Augmented Reality App (%)'}, 'AUGMENTED_REALITY', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Health App (%)'}, 'HEALTH_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Infotainment App (%)'}, 'INFOTAINMENT_APP', 'percentage_for_failed');
|
||||
% plotGenericResult(5, 6, {'Failed Tasks due to WAN';'for Heavy Comp. App (%)'}, 'HEAVY_COMP_APP', 'percentage_for_failed');
|
||||
end
|
||||
|
@ -298,7 +298,8 @@ public class SampleMobileDeviceManager extends MobileDeviceManager {
|
||||
task.setSubmittedLocation(currentLocation);
|
||||
|
||||
//add related task to log list
|
||||
SimLogger.getInstance().addLog(task.getCloudletId(),
|
||||
SimLogger.getInstance().addLog(task.getMobileDeviceId(),
|
||||
task.getCloudletId(),
|
||||
task.getTaskType(),
|
||||
(int)task.getCloudletLength(),
|
||||
(int)task.getCloudletFileSize(),
|
||||
|
@ -191,7 +191,8 @@ public class SampleMobileDeviceManager extends MobileDeviceManager {
|
||||
task.setSubmittedLocation(currentLocation);
|
||||
|
||||
//add related task to log list
|
||||
SimLogger.getInstance().addLog(task.getCloudletId(),
|
||||
SimLogger.getInstance().addLog(task.getMobileDeviceId(),
|
||||
task.getCloudletId(),
|
||||
task.getTaskType(),
|
||||
(int)task.getCloudletLength(),
|
||||
(int)task.getCloudletFileSize(),
|
||||
|
@ -166,7 +166,7 @@ public class SampleMobileServerManager extends MobileServerManager{
|
||||
//4. Create Hosts with its id and list of PEs and add them to the list of machines
|
||||
MobileHost host = new MobileHost(
|
||||
//Hosts should have unique IDs, so create Mobile Hosts after Edge+Cloud Hosts
|
||||
i+SimSettings.getInstance().getNumOfEdgeHosts()+SimSettings.getInstance().getNumOfCouldHost(),
|
||||
i+SimSettings.getInstance().getNumOfEdgeHosts()+SimSettings.getInstance().getNumOfCloudHost(),
|
||||
new RamProvisionerSimple(ram),
|
||||
new BwProvisionerSimple(bandwidth), //kbps
|
||||
storage,
|
||||
|
@ -357,7 +357,7 @@ public class FuzzyExperimentalNetworkModel extends NetworkModel {
|
||||
return getWanDownloadDelay(accessPointLocation, dataSize);
|
||||
}
|
||||
|
||||
private double calculateMM1(double propogationDelay, double bandwidth /*Kbps*/, double PoissonMean, double avgTaskSize /*KB*/, int deviceCount){
|
||||
private double calculateMM1(double propagationDelay, double bandwidth /*Kbps*/, double PoissonMean, double avgTaskSize /*KB*/, int deviceCount){
|
||||
double mu=0, lamda=0;
|
||||
|
||||
avgTaskSize = avgTaskSize * 8; //convert from KB to Kb
|
||||
@ -369,7 +369,7 @@ public class FuzzyExperimentalNetworkModel extends NetworkModel {
|
||||
if(result < 0)
|
||||
return 0;
|
||||
|
||||
result += propogationDelay;
|
||||
result += propagationDelay;
|
||||
|
||||
return (result > 15) ? 0 : result;
|
||||
}
|
||||
|
@ -286,7 +286,8 @@ public class FuzzyMobileDeviceManager extends MobileDeviceManager {
|
||||
task.setSubmittedLocation(currentLocation);
|
||||
|
||||
//add related task to log list
|
||||
SimLogger.getInstance().addLog(task.getCloudletId(),
|
||||
SimLogger.getInstance().addLog(task.getMobileDeviceId(),
|
||||
task.getCloudletId(),
|
||||
task.getTaskType(),
|
||||
(int)task.getCloudletLength(),
|
||||
(int)task.getCloudletFileSize(),
|
||||
|
@ -67,7 +67,7 @@ public class CloudVmAllocationPolicy_Custom extends VmAllocationPolicy {
|
||||
|
||||
@Override
|
||||
public boolean allocateHostForVm(Vm vm, Host host) {
|
||||
if (host.vmCreate(vm)) { // if vm has been succesfully created in the host
|
||||
if (host.vmCreate(vm)) { // if vm has been successfully created in the host
|
||||
getVmTable().put(vm.getUid(), host);
|
||||
createdVmNum++;
|
||||
|
||||
|
@ -58,7 +58,7 @@ public class DefaultCloudServerManager extends CloudServerManager{
|
||||
int vmCounter=SimSettings.getInstance().getNumOfEdgeVMs();
|
||||
|
||||
//Create VMs for each hosts
|
||||
for (int i = 0; i < SimSettings.getInstance().getNumOfCouldHost(); i++) {
|
||||
for (int i = 0; i < SimSettings.getInstance().getNumOfCloudHost(); i++) {
|
||||
vmList.add(i, new ArrayList<CloudVM>());
|
||||
for(int j = 0; j < SimSettings.getInstance().getNumOfCloudVMsPerHost(); j++){
|
||||
String vmm = "Xen";
|
||||
@ -131,7 +131,7 @@ public class DefaultCloudServerManager extends CloudServerManager{
|
||||
// 1. We need to create a list to store one or more Machines
|
||||
List<Host> hostList = new ArrayList<Host>();
|
||||
|
||||
for (int i = 0; i < SimSettings.getInstance().getNumOfCouldHost(); i++) {
|
||||
for (int i = 0; i < SimSettings.getInstance().getNumOfCloudHost(); i++) {
|
||||
int numOfVMPerHost = SimSettings.getInstance().getNumOfCloudVMsPerHost();
|
||||
int numOfCores = SimSettings.getInstance().getCoreForCloudVM() * numOfVMPerHost;
|
||||
double mips = SimSettings.getInstance().getMipsForCloudVM() * numOfVMPerHost;
|
||||
|
@ -16,7 +16,6 @@ import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.cloudbus.cloudsim.Host;
|
||||
import org.cloudbus.cloudsim.Log;
|
||||
import org.cloudbus.cloudsim.core.CloudSim;
|
||||
import org.cloudbus.cloudsim.core.SimEntity;
|
||||
import org.cloudbus.cloudsim.core.SimEvent;
|
||||
@ -185,7 +184,7 @@ public class SimManager extends SimEntity {
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i<SimSettings.getInstance().getNumOfCouldHost(); i++) {
|
||||
for(int i = 0; i<SimSettings.getInstance().getNumOfCloudHost(); i++) {
|
||||
mobileDeviceManager.submitVmList(cloudServerManager.getVmList(i));
|
||||
}
|
||||
|
||||
@ -217,14 +216,14 @@ public class SimManager extends SimEntity {
|
||||
mobileDeviceManager.submitTask(edgeTask);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
break;
|
||||
case CHECK_ALL_VM:
|
||||
int totalNumOfVm = SimSettings.getInstance().getNumOfEdgeVMs();
|
||||
if(EdgeVmAllocationPolicy_Custom.getCreatedVmNum() != totalNumOfVm){
|
||||
SimLogger.printLine("All VMs cannot be created! Terminating simulation...");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
break;
|
||||
case GET_LOAD_LOG:
|
||||
@ -253,11 +252,11 @@ public class SimManager extends SimEntity {
|
||||
SimLogger.getInstance().simStopped();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Log.printLine(getName() + ": unknown event type");
|
||||
SimLogger.printLine(getName() + ": unknown event type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public class SimSettings {
|
||||
public static enum VM_TYPES { MOBILE_VM, EDGE_VM, CLOUD_VM }
|
||||
|
||||
//enumarations for the VM types
|
||||
public static enum NETWORK_DELAY_TYPES { WLAN_DELAY, MAN_DELAY, WAN_DELAY }
|
||||
public static enum NETWORK_DELAY_TYPES { WLAN_DELAY, MAN_DELAY, WAN_DELAY, GSM_DELAY }
|
||||
|
||||
//predifined IDs for the components.
|
||||
public static final int CLOUD_DATACENTER_ID = 1000;
|
||||
@ -53,22 +53,26 @@ public class SimSettings {
|
||||
private double SIMULATION_TIME; //minutes unit in properties file
|
||||
private double WARM_UP_PERIOD; //minutes unit in properties file
|
||||
private double INTERVAL_TO_GET_VM_LOAD_LOG; //minutes unit in properties file
|
||||
private double INTERVAL_TO_GET_VM_LOCATION_LOG; //minutes unit in properties file
|
||||
private double INTERVAL_TO_GET_LOCATION_LOG; //minutes unit in properties file
|
||||
private double INTERVAL_TO_GET_AP_DELAY_LOG; //minutes unit in properties file
|
||||
private boolean FILE_LOG_ENABLED; //boolean to check file logging option
|
||||
private boolean DEEP_FILE_LOG_ENABLED; //boolean to check deep file logging option
|
||||
|
||||
private int MIN_NUM_OF_MOBILE_DEVICES;
|
||||
private int MAX_NUM_OF_MOBILE_DEVICES;
|
||||
private int MOBILE_DEVICE_COUNTER_SIZE;
|
||||
private int WLAN_RANGE;
|
||||
|
||||
private int NUM_OF_EDGE_DATACENTERS;
|
||||
private int NUM_OF_EDGE_HOSTS;
|
||||
private int NUM_OF_EDGE_VMS;
|
||||
private int NUM_OF_PLACE_TYPES;
|
||||
|
||||
private double WAN_PROPOGATION_DELAY; //seconds unit in properties file
|
||||
private double WAN_PROPAGATION_DELAY; //seconds unit in properties file
|
||||
private double GSM_PROPAGATION_DELAY; //seconds unit in properties file
|
||||
private double LAN_INTERNAL_DELAY; //seconds unit in properties file
|
||||
private int BANDWITH_WLAN; //Mbps unit in properties file
|
||||
private int BANDWITH_MAN; //Mbps unit in properties file
|
||||
private int BANDWITH_WAN; //Mbps unit in properties file
|
||||
private int BANDWITH_GSM; //Mbps unit in properties file
|
||||
|
||||
@ -87,6 +91,11 @@ public class SimSettings {
|
||||
private String[] SIMULATION_SCENARIOS;
|
||||
private String[] ORCHESTRATOR_POLICIES;
|
||||
|
||||
private double NORTHERN_BOUND;
|
||||
private double EASTERN_BOUND;
|
||||
private double SOUTHERN_BOUND;
|
||||
private double WESTERN_BOUND;
|
||||
|
||||
// mean waiting time (minute) is stored for each place types
|
||||
private double[] mobilityLookUpTable;
|
||||
|
||||
@ -137,19 +146,23 @@ public class SimSettings {
|
||||
SIMULATION_TIME = (double)60 * Double.parseDouble(prop.getProperty("simulation_time")); //seconds
|
||||
WARM_UP_PERIOD = (double)60 * Double.parseDouble(prop.getProperty("warm_up_period")); //seconds
|
||||
INTERVAL_TO_GET_VM_LOAD_LOG = (double)60 * Double.parseDouble(prop.getProperty("vm_load_check_interval")); //seconds
|
||||
INTERVAL_TO_GET_VM_LOCATION_LOG = (double)60 * Double.parseDouble(prop.getProperty("vm_location_check_interval")); //seconds
|
||||
INTERVAL_TO_GET_LOCATION_LOG = (double)60 * Double.parseDouble(prop.getProperty("location_check_interval")); //seconds
|
||||
INTERVAL_TO_GET_AP_DELAY_LOG = (double)60 * Double.parseDouble(prop.getProperty("ap_delay_check_interval", "0")); //seconds
|
||||
FILE_LOG_ENABLED = Boolean.parseBoolean(prop.getProperty("file_log_enabled"));
|
||||
DEEP_FILE_LOG_ENABLED = Boolean.parseBoolean(prop.getProperty("deep_file_log_enabled"));
|
||||
|
||||
MIN_NUM_OF_MOBILE_DEVICES = Integer.parseInt(prop.getProperty("min_number_of_mobile_devices"));
|
||||
MAX_NUM_OF_MOBILE_DEVICES = Integer.parseInt(prop.getProperty("max_number_of_mobile_devices"));
|
||||
MOBILE_DEVICE_COUNTER_SIZE = Integer.parseInt(prop.getProperty("mobile_device_counter_size"));
|
||||
WLAN_RANGE = Integer.parseInt(prop.getProperty("wlan_range", "0"));
|
||||
|
||||
WAN_PROPOGATION_DELAY = Double.parseDouble(prop.getProperty("wan_propagation_delay"));
|
||||
LAN_INTERNAL_DELAY = Double.parseDouble(prop.getProperty("lan_internal_delay"));
|
||||
WAN_PROPAGATION_DELAY = Double.parseDouble(prop.getProperty("wan_propagation_delay", "0"));
|
||||
GSM_PROPAGATION_DELAY = Double.parseDouble(prop.getProperty("gsm_propagation_delay", "0"));
|
||||
LAN_INTERNAL_DELAY = Double.parseDouble(prop.getProperty("lan_internal_delay", "0"));
|
||||
BANDWITH_WLAN = 1000 * Integer.parseInt(prop.getProperty("wlan_bandwidth"));
|
||||
BANDWITH_WAN = 1000 * Integer.parseInt(prop.getProperty("wan_bandwidth"));
|
||||
BANDWITH_GSM = 1000 * Integer.parseInt(prop.getProperty("gsm_bandwidth"));
|
||||
BANDWITH_MAN = 1000 * Integer.parseInt(prop.getProperty("man_bandwidth", "0"));
|
||||
BANDWITH_WAN = 1000 * Integer.parseInt(prop.getProperty("wan_bandwidth", "0"));
|
||||
BANDWITH_GSM = 1000 * Integer.parseInt(prop.getProperty("gsm_bandwidth", "0"));
|
||||
|
||||
NUM_OF_HOST_ON_CLOUD_DATACENTER = Integer.parseInt(prop.getProperty("number_of_host_on_cloud_datacenter"));
|
||||
NUM_OF_VM_ON_CLOUD_HOST = Integer.parseInt(prop.getProperty("number_of_vm_on_cloud_host"));
|
||||
@ -167,6 +180,11 @@ public class SimSettings {
|
||||
|
||||
SIMULATION_SCENARIOS = prop.getProperty("simulation_scenarios").split(",");
|
||||
|
||||
NORTHERN_BOUND = Double.parseDouble(prop.getProperty("northern_bound", "0"));
|
||||
SOUTHERN_BOUND = Double.parseDouble(prop.getProperty("southern_bound", "0"));
|
||||
EASTERN_BOUND = Double.parseDouble(prop.getProperty("eastern_bound", "0"));
|
||||
WESTERN_BOUND = Double.parseDouble(prop.getProperty("western_bound", "0"));
|
||||
|
||||
//avg waiting time in a place (min)
|
||||
double place1_mean_waiting_time = Double.parseDouble(prop.getProperty("attractiveness_L1_mean_waiting_time"));
|
||||
double place2_mean_waiting_time = Double.parseDouble(prop.getProperty("attractiveness_L2_mean_waiting_time"));
|
||||
@ -233,9 +251,17 @@ public class SimSettings {
|
||||
/**
|
||||
* returns VM location log collection interval (in seconds unit) from properties file
|
||||
*/
|
||||
public double getVmLocationLogInterval()
|
||||
public double getLocationLogInterval()
|
||||
{
|
||||
return INTERVAL_TO_GET_VM_LOCATION_LOG;
|
||||
return INTERVAL_TO_GET_LOCATION_LOG;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns VM location log collection interval (in seconds unit) from properties file
|
||||
*/
|
||||
public double getApDelayLogInterval()
|
||||
{
|
||||
return INTERVAL_TO_GET_AP_DELAY_LOG;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,7 +269,7 @@ public class SimSettings {
|
||||
*/
|
||||
public boolean getDeepFileLoggingEnabled()
|
||||
{
|
||||
return DEEP_FILE_LOG_ENABLED;
|
||||
return FILE_LOG_ENABLED && DEEP_FILE_LOG_ENABLED;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,7 +285,15 @@ public class SimSettings {
|
||||
*/
|
||||
public double getWanPropagationDelay()
|
||||
{
|
||||
return WAN_PROPOGATION_DELAY;
|
||||
return WAN_PROPAGATION_DELAY;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns GSM propagation delay (in second unit) from properties file
|
||||
*/
|
||||
public double getGsmPropagationDelay()
|
||||
{
|
||||
return GSM_PROPAGATION_DELAY;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -278,6 +312,14 @@ public class SimSettings {
|
||||
return BANDWITH_WLAN;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns MAN bandwidth (in Mbps unit) from properties file
|
||||
*/
|
||||
public int getManBandwidth()
|
||||
{
|
||||
return BANDWITH_MAN;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns WAN bandwidth (in Mbps unit) from properties file
|
||||
*/
|
||||
@ -319,6 +361,14 @@ public class SimSettings {
|
||||
return MOBILE_DEVICE_COUNTER_SIZE;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns edge device range in meter
|
||||
*/
|
||||
public int getWlanRange()
|
||||
{
|
||||
return WLAN_RANGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the number of edge datacenters
|
||||
*/
|
||||
@ -354,7 +404,7 @@ public class SimSettings {
|
||||
/**
|
||||
* returns the number of cloud datacenters
|
||||
*/
|
||||
public int getNumOfCouldHost()
|
||||
public int getNumOfCloudHost()
|
||||
{
|
||||
return NUM_OF_HOST_ON_CLOUD_DATACENTER;
|
||||
}
|
||||
@ -440,7 +490,7 @@ public class SimSettings {
|
||||
}
|
||||
|
||||
/**
|
||||
* returns simulation scenarios as string
|
||||
* returns simulation screnarios as string
|
||||
*/
|
||||
public String[] getSimulationScenarios()
|
||||
{
|
||||
@ -455,6 +505,23 @@ public class SimSettings {
|
||||
return ORCHESTRATOR_POLICIES;
|
||||
}
|
||||
|
||||
|
||||
public double getNorthernBound() {
|
||||
return NORTHERN_BOUND;
|
||||
}
|
||||
|
||||
public double getEasternBound() {
|
||||
return EASTERN_BOUND;
|
||||
}
|
||||
|
||||
public double getSouthernBound() {
|
||||
return SOUTHERN_BOUND;
|
||||
}
|
||||
|
||||
public double getWesternBound() {
|
||||
return WESTERN_BOUND;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns mobility characteristic within an array
|
||||
* the result includes mean waiting time (minute) or each place type
|
||||
@ -480,12 +547,29 @@ public class SimSettings {
|
||||
* [10] vm utilization on cloud (%)
|
||||
* [11] vm utilization on mobile (%)
|
||||
* [12] delay sensitivity [0-1]
|
||||
* [13] maximum delay requirement (sec)
|
||||
*/
|
||||
public double[][] getTaskLookUpTable()
|
||||
{
|
||||
return taskLookUpTable;
|
||||
}
|
||||
|
||||
public double[] getTaskProperties(String taskName) {
|
||||
double[] result = null;
|
||||
int index = -1;
|
||||
for (int i=0;i<taskNames.length;i++) {
|
||||
if (taskNames[i].equals(taskName)) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(index >= 0 && index < taskLookUpTable.length)
|
||||
result = taskLookUpTable[index];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getTaskName(int taskType)
|
||||
{
|
||||
return taskNames[taskType];
|
||||
@ -509,6 +593,20 @@ public class SimSettings {
|
||||
}
|
||||
}
|
||||
|
||||
private Boolean checkElement(Element element, String key) {
|
||||
Boolean result = true;
|
||||
try {
|
||||
String value = element.getElementsByTagName(key).item(0).getTextContent();
|
||||
if (value.isEmpty() || value == null){
|
||||
result = false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void parseApplicationsXML(String filePath)
|
||||
{
|
||||
Document doc = null;
|
||||
@ -519,64 +617,55 @@ public class SimSettings {
|
||||
doc = dBuilder.parse(devicesFile);
|
||||
doc.getDocumentElement().normalize();
|
||||
|
||||
String mandatoryAttributes[] = {
|
||||
"usage_percentage", //usage percentage [0-100]
|
||||
"prob_cloud_selection", //prob. of selecting cloud [0-100]
|
||||
"poisson_interarrival", //poisson mean (sec)
|
||||
"active_period", //active period (sec)
|
||||
"idle_period", //idle period (sec)
|
||||
"data_upload", //avg data upload (KB)
|
||||
"data_download", //avg data download (KB)
|
||||
"task_length", //avg task length (MI)
|
||||
"required_core", //required # of core
|
||||
"vm_utilization_on_edge", //vm utilization on edge vm [0-100]
|
||||
"vm_utilization_on_cloud", //vm utilization on cloud vm [0-100]
|
||||
"vm_utilization_on_mobile", //vm utilization on mobile vm [0-100]
|
||||
"delay_sensitivity"}; //delay_sensitivity [0-1]
|
||||
|
||||
String optionalAttributes[] = {
|
||||
"max_delay_requirement"}; //maximum delay requirement (sec)
|
||||
|
||||
NodeList appList = doc.getElementsByTagName("application");
|
||||
taskLookUpTable = new double[appList.getLength()][13];
|
||||
taskLookUpTable = new double[appList.getLength()]
|
||||
[mandatoryAttributes.length + optionalAttributes.length];
|
||||
|
||||
taskNames = new String[appList.getLength()];
|
||||
for (int i = 0; i < appList.getLength(); i++) {
|
||||
Node appNode = appList.item(i);
|
||||
|
||||
Element appElement = (Element) appNode;
|
||||
isAttributePresent(appElement, "name");
|
||||
isElementPresent(appElement, "usage_percentage");
|
||||
isElementPresent(appElement, "prob_cloud_selection");
|
||||
isElementPresent(appElement, "poisson_interarrival");
|
||||
isElementPresent(appElement, "active_period");
|
||||
isElementPresent(appElement, "idle_period");
|
||||
isElementPresent(appElement, "data_upload");
|
||||
isElementPresent(appElement, "data_download");
|
||||
isElementPresent(appElement, "task_length");
|
||||
isElementPresent(appElement, "required_core");
|
||||
isElementPresent(appElement, "vm_utilization_on_edge");
|
||||
isElementPresent(appElement, "vm_utilization_on_cloud");
|
||||
isElementPresent(appElement, "vm_utilization_on_mobile");
|
||||
isElementPresent(appElement, "delay_sensitivity");
|
||||
|
||||
String taskName = appElement.getAttribute("name");
|
||||
taskNames[i] = taskName;
|
||||
|
||||
double usage_percentage = Double.parseDouble(appElement.getElementsByTagName("usage_percentage").item(0).getTextContent());
|
||||
double prob_cloud_selection = Double.parseDouble(appElement.getElementsByTagName("prob_cloud_selection").item(0).getTextContent());
|
||||
double poisson_interarrival = Double.parseDouble(appElement.getElementsByTagName("poisson_interarrival").item(0).getTextContent());
|
||||
double active_period = Double.parseDouble(appElement.getElementsByTagName("active_period").item(0).getTextContent());
|
||||
double idle_period = Double.parseDouble(appElement.getElementsByTagName("idle_period").item(0).getTextContent());
|
||||
double data_upload = Double.parseDouble(appElement.getElementsByTagName("data_upload").item(0).getTextContent());
|
||||
double data_download = Double.parseDouble(appElement.getElementsByTagName("data_download").item(0).getTextContent());
|
||||
double task_length = Double.parseDouble(appElement.getElementsByTagName("task_length").item(0).getTextContent());
|
||||
double required_core = Double.parseDouble(appElement.getElementsByTagName("required_core").item(0).getTextContent());
|
||||
double vm_utilization_on_edge = Double.parseDouble(appElement.getElementsByTagName("vm_utilization_on_edge").item(0).getTextContent());
|
||||
double vm_utilization_on_cloud = Double.parseDouble(appElement.getElementsByTagName("vm_utilization_on_cloud").item(0).getTextContent());
|
||||
double vm_utilization_on_mobile = Double.parseDouble(appElement.getElementsByTagName("vm_utilization_on_mobile").item(0).getTextContent());
|
||||
double delay_sensitivity = Double.parseDouble(appElement.getElementsByTagName("delay_sensitivity").item(0).getTextContent());
|
||||
|
||||
taskLookUpTable[i][0] = usage_percentage; //usage percentage [0-100]
|
||||
taskLookUpTable[i][1] = prob_cloud_selection; //prob. of selecting cloud [0-100]
|
||||
taskLookUpTable[i][2] = poisson_interarrival; //poisson mean (sec)
|
||||
taskLookUpTable[i][3] = active_period; //active period (sec)
|
||||
taskLookUpTable[i][4] = idle_period; //idle period (sec)
|
||||
taskLookUpTable[i][5] = data_upload; //avg data upload (KB)
|
||||
taskLookUpTable[i][6] = data_download; //avg data download (KB)
|
||||
taskLookUpTable[i][7] = task_length; //avg task length (MI)
|
||||
taskLookUpTable[i][8] = required_core; //required # of core
|
||||
taskLookUpTable[i][9] = vm_utilization_on_edge; //vm utilization on edge vm [0-100]
|
||||
taskLookUpTable[i][10] = vm_utilization_on_cloud; //vm utilization on cloud vm [0-100]
|
||||
taskLookUpTable[i][11] = vm_utilization_on_mobile; //vm utilization on mobile vm [0-100]
|
||||
taskLookUpTable[i][12] = delay_sensitivity; //delay_sensitivity [0-1]
|
||||
for(int m=0; m<mandatoryAttributes.length; m++){
|
||||
isElementPresent(appElement, mandatoryAttributes[m]);
|
||||
taskLookUpTable[i][m] = Double.parseDouble(appElement.
|
||||
getElementsByTagName(mandatoryAttributes[m]).item(0).getTextContent());
|
||||
}
|
||||
|
||||
for(int o=0; o<optionalAttributes.length; o++){
|
||||
double value = 0;
|
||||
if(checkElement(appElement, optionalAttributes[o]))
|
||||
value = Double.parseDouble(appElement.getElementsByTagName(optionalAttributes[o]).item(0).getTextContent());
|
||||
|
||||
taskLookUpTable[i][mandatoryAttributes.length + o] = value;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
SimLogger.printLine("Edge Devices XML cannot be parsed! Terminating simulation...");
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -643,7 +732,7 @@ public class SimSettings {
|
||||
} catch (Exception e) {
|
||||
SimLogger.printLine("Edge Devices XML cannot be parsed! Terminating simulation...");
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ public class CpuUtilizationModel_Custom implements UtilizationModel {
|
||||
index = 11;
|
||||
else{
|
||||
SimLogger.printLine("Unknown VM Type! Terminating simulation...");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
return SimSettings.getInstance().getTaskLookUpTable()[task.getTaskType()][index];
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ public class DefaultMobileDeviceManager extends MobileDeviceManager {
|
||||
protected void processOtherEvent(SimEvent ev) {
|
||||
if (ev == null) {
|
||||
SimLogger.printLine(getName() + ".processOtherEvent(): " + "Error - an event is null! Terminating simulation...");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ public class DefaultMobileDeviceManager extends MobileDeviceManager {
|
||||
}
|
||||
default:
|
||||
SimLogger.printLine(getName() + ".processOtherEvent(): " + "Error - event unknown by this DatacenterBroker. Terminating simulation...");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -180,7 +180,8 @@ public class DefaultMobileDeviceManager extends MobileDeviceManager {
|
||||
task.setSubmittedLocation(currentLocation);
|
||||
|
||||
//add related task to log list
|
||||
SimLogger.getInstance().addLog(task.getCloudletId(),
|
||||
SimLogger.getInstance().addLog(task.getMobileDeviceId(),
|
||||
task.getCloudletId(),
|
||||
task.getTaskType(),
|
||||
(int)task.getCloudletLength(),
|
||||
(int)task.getCloudletFileSize(),
|
||||
@ -226,7 +227,7 @@ public class DefaultMobileDeviceManager extends MobileDeviceManager {
|
||||
}
|
||||
else {
|
||||
SimLogger.printLine("Unknown nextHopId! Terminating simulation...");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,11 +13,13 @@ package edu.boun.edgecloudsim.edge_client;
|
||||
|
||||
import org.cloudbus.cloudsim.Cloudlet;
|
||||
import org.cloudbus.cloudsim.UtilizationModel;
|
||||
import org.cloudbus.cloudsim.core.CloudSim;
|
||||
|
||||
import edu.boun.edgecloudsim.utils.Location;
|
||||
|
||||
public class Task extends Cloudlet {
|
||||
private Location submittedLocation;
|
||||
private double creationTime;
|
||||
private int type;
|
||||
private int mobileDeviceId;
|
||||
private int hostIndex;
|
||||
@ -34,6 +36,7 @@ public class Task extends Cloudlet {
|
||||
utilizationModelBw);
|
||||
|
||||
mobileDeviceId = _mobileDeviceId;
|
||||
creationTime = CloudSim.clock();
|
||||
}
|
||||
|
||||
|
||||
@ -80,4 +83,8 @@ public class Task extends Cloudlet {
|
||||
public int getTaskType(){
|
||||
return type;
|
||||
}
|
||||
|
||||
public double getCreationTime() {
|
||||
return creationTime;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,13 @@ public abstract class EdgeOrchestrator extends SimEntity{
|
||||
simScenario = _simScenario;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default Constructor: Creates an empty EdgeOrchestrator
|
||||
*/
|
||||
public EdgeOrchestrator() {
|
||||
super("EdgeOrchestrator");
|
||||
}
|
||||
|
||||
/*
|
||||
* initialize edge orchestrator if needed
|
||||
*/
|
||||
|
@ -10,6 +10,9 @@
|
||||
|
||||
package edu.boun.edgecloudsim.edge_server;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.cloudbus.cloudsim.CloudletScheduler;
|
||||
import org.cloudbus.cloudsim.Vm;
|
||||
|
||||
@ -28,4 +31,20 @@ public class EdgeVM extends Vm {
|
||||
public SimSettings.VM_TYPES getVmType(){
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* dynamically reconfigures the mips value of a VM in CloudSim
|
||||
*
|
||||
* @param mips new mips value for this VM.
|
||||
*/
|
||||
public void reconfigureMips(double mips){
|
||||
super.setMips(mips);
|
||||
super.getHost().getVmScheduler().deallocatePesForVm(this);
|
||||
|
||||
List<Double> mipsShareAllocated = new ArrayList<Double>();
|
||||
for(int i= 0; i<getNumberOfPes(); i++)
|
||||
mipsShareAllocated.add(mips);
|
||||
|
||||
super.getHost().getVmScheduler().allocatePesForVm(this, mipsShareAllocated);
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ public class EdgeVmAllocationPolicy_Custom extends VmAllocationPolicy {
|
||||
|
||||
@Override
|
||||
public boolean allocateHostForVm(Vm vm, Host host) {
|
||||
if (host.vmCreate(vm)) { // if vm has been succesfully created in the host
|
||||
if (host.vmCreate(vm)) { // if vm has been successfully created in the host
|
||||
getVmTable().put(vm.getUid(), host);
|
||||
createdVmNum++;
|
||||
|
||||
|
@ -24,6 +24,12 @@ public abstract class MobilityModel {
|
||||
simulationTime=_simulationTime;
|
||||
};
|
||||
|
||||
/*
|
||||
* Default Constructor: Creates an empty MobilityModel
|
||||
*/
|
||||
public MobilityModel() {
|
||||
}
|
||||
|
||||
/*
|
||||
* calculate location of the devices according to related mobility model
|
||||
*/
|
||||
|
@ -99,7 +99,7 @@ public class NomadicMobility extends MobilityModel {
|
||||
}
|
||||
if(!placeFound){
|
||||
SimLogger.printLine("impossible is occurred! location cannot be assigned to the device!");
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -114,7 +114,7 @@ public class NomadicMobility extends MobilityModel {
|
||||
|
||||
if(e == null){
|
||||
SimLogger.printLine("impossible is occurred! no location is found for the device '" + deviceId + "' at " + time);
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
return e.getValue();
|
||||
|
@ -59,7 +59,7 @@ public class IdleActiveLoadGenerator extends LoadGeneratorModel{
|
||||
}
|
||||
}
|
||||
if(randomTaskType == -1){
|
||||
SimLogger.printLine("Impossible is occured! no random task type!");
|
||||
SimLogger.printLine("Impossible is occurred! no random task type!");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,12 @@ public abstract class LoadGeneratorModel {
|
||||
simScenario=_simScenario;
|
||||
};
|
||||
|
||||
/*
|
||||
* Default Constructor: Creates an empty LoadGeneratorModel
|
||||
*/
|
||||
public LoadGeneratorModel() {
|
||||
}
|
||||
|
||||
/*
|
||||
* each task has a virtual start time
|
||||
* it will be used while generating task
|
||||
|
@ -21,6 +21,12 @@ public class Location {
|
||||
yPos = _yPos;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default Constructor: Creates an empty Location
|
||||
*/
|
||||
public Location() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other){
|
||||
boolean result = false;
|
||||
|
@ -29,13 +29,13 @@ public class PoissonDistr {
|
||||
engine = new MersenneTwister(new Date());
|
||||
poisson = new Poisson(mean, engine);
|
||||
|
||||
//always sleep for some milliseconds in order not to have same seed for iterative PoissonDistr contruction
|
||||
//always sleep for some milliseconds in order not to have same seed for iterative PoissonDistr construction
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
SimLogger.printLine("impossible is occurred! Poisson random number cannot be created!");
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -24,13 +24,15 @@ public class SimUtils {
|
||||
long fraction = (long)(range * RNG.nextDouble());
|
||||
return (int)(fraction + start);
|
||||
}
|
||||
|
||||
public static double getRandomDoubleNumber(double start, double end) {
|
||||
//return pd.sample();
|
||||
double range = end - start;
|
||||
double fraction = (range * RNG.nextDouble());
|
||||
return (fraction + start);
|
||||
}
|
||||
public static long getRandomLongNumber(int start, int end) {
|
||||
|
||||
public static long getRandomLongNumber(long start, long end) {
|
||||
//return pd.sample();
|
||||
long range = (long)end - (long)start + 1;
|
||||
long fraction = (long)(range * RNG.nextDouble());
|
||||
@ -49,16 +51,17 @@ public class SimUtils {
|
||||
if(!f.delete())
|
||||
{
|
||||
SimLogger.printLine("file cannot be cleared: " + f.getAbsolutePath());
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
SimLogger.printLine("Output folder is not available: " + outputFolder);
|
||||
System.exit(0);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getTimeDifference(Date startDate, Date endDate){
|
||||
String result = "";
|
||||
long duration = endDate.getTime() - startDate.getTime();
|
||||
|
@ -43,6 +43,16 @@ public class TaskProperty {
|
||||
pesNumber = (int)SimSettings.getInstance().getTaskLookUpTable()[_taskType][8];
|
||||
}
|
||||
|
||||
public TaskProperty(int mobileDeviceId, double startTime, ExponentialDistribution[] expRngList) {
|
||||
this.mobileDeviceId = mobileDeviceId;
|
||||
this.startTime = startTime;
|
||||
taskType = 0;
|
||||
inputFileSize = (long)expRngList[0].sample();
|
||||
outputFileSize = (long)expRngList[1].sample();
|
||||
length = (long) expRngList[2].sample();
|
||||
pesNumber = (int)SimSettings.getInstance().getTaskLookUpTable()[0][8];
|
||||
}
|
||||
|
||||
public double getStartTime(){
|
||||
return startTime;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user