diff --git a/jars/cloudsim-4.0.jar b/jars/cloudsim-4.0.jar new file mode 100644 index 00000000..80d99d1f Binary files /dev/null and b/jars/cloudsim-4.0.jar differ diff --git a/jars/cloudsim-examples-4.0.jar b/jars/cloudsim-examples-4.0.jar new file mode 100644 index 00000000..389325d6 Binary files /dev/null and b/jars/cloudsim-examples-4.0.jar differ diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/CloudletSchedulerMonitor.java b/src/main/java/org/cloudbus/cloudsim/sdn/CloudletSchedulerMonitor.java index dce86e77..07d96d59 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/CloudletSchedulerMonitor.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/CloudletSchedulerMonitor.java @@ -8,10 +8,10 @@ package org.cloudbus.cloudsim.sdn; -import java.util.List; - import org.cloudbus.cloudsim.Cloudlet; +import java.util.List; + public interface CloudletSchedulerMonitor { public long getTotalProcessingPreviousTime(double currentTime, List mipsShare); public boolean isVmIdle(); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/LogWriter.java b/src/main/java/org/cloudbus/cloudsim/sdn/LogWriter.java index af1b45a7..5bc28a69 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/LogWriter.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/LogWriter.java @@ -42,7 +42,7 @@ public void print(String s) { public void printLine() { if(out == null) - System.err.println(""); + System.err.println(); else out.println(); } diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/example/SimpleExample.java b/src/main/java/org/cloudbus/cloudsim/sdn/example/SimpleExample.java index c1e6cbcd..a777cd80 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/example/SimpleExample.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/example/SimpleExample.java @@ -93,7 +93,7 @@ public static void main(String[] args) { workloads.add(args[i]); } else - workloads = (List) Arrays.asList(workload_files); + workloads = Arrays.asList(workload_files); printArguments(physicalTopologyFile, deploymentFile, workloads); Log.printLine("Starting CloudSim SDN..."); @@ -112,31 +112,23 @@ public static void main(String[] args) { switch(vmAllocPolicy) { case CombMFF: case MFF: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List hostList) { return new VmAllocationPolicyCombinedMostFullFirst(hostList); } - }; + vmAllocationFac = VmAllocationPolicyCombinedMostFullFirst::new; PhysicalTopologyParser.loadPhysicalTopologySingleDC(physicalTopologyFile, nos, hsFac); ls = new LinkSelectionPolicyDestinationAddress(); break; case CombLFF: case LFF: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List hostList) { return new VmAllocationPolicyCombinedLeastFullFirst(hostList); } - }; + vmAllocationFac = hostList -> new VmAllocationPolicyCombinedLeastFullFirst(hostList); PhysicalTopologyParser.loadPhysicalTopologySingleDC(physicalTopologyFile, nos, hsFac); ls = new LinkSelectionPolicyDestinationAddress(); break; case MipMFF: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List hostList) { return new VmAllocationPolicyMipsMostFullFirst(hostList); } - }; + vmAllocationFac = hostList -> new VmAllocationPolicyMipsMostFullFirst(hostList); PhysicalTopologyParser.loadPhysicalTopologySingleDC(physicalTopologyFile, nos, hsFac); ls = new LinkSelectionPolicyDestinationAddress(); break; case MipLFF: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List hostList) { return new VmAllocationPolicyMipsLeastFullFirst(hostList); } - }; + vmAllocationFac = hostList -> new VmAllocationPolicyMipsLeastFullFirst(hostList); PhysicalTopologyParser.loadPhysicalTopologySingleDC(physicalTopologyFile, nos, hsFac); ls = new LinkSelectionPolicyDestinationAddress(); break; @@ -160,7 +152,9 @@ public static void main(String[] args) { // Broker SDNBroker broker = createBroker(); - int brokerId = broker.getId(); + if (broker != null) { + int brokerId = broker.getId(); + } // Submit virtual topology broker.submitDeployApplication(datacenter, deploymentFile); @@ -274,7 +268,7 @@ protected static SDNDatacenter createSDNDatacenter(String name, String physicalT * @return the datacenter broker */ protected static SDNBroker createBroker() { - SDNBroker broker = null; + SDNBroker broker; try { broker = new SDNBroker("Broker"); } catch (Exception e) { diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentQOS.java b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentQOS.java index e25e231e..1d280d6c 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentQOS.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentQOS.java @@ -174,7 +174,7 @@ public static void main(String[] args) throws FileNotFoundException { } } else { - workloads = (List) Arrays.asList(workload_files); + workloads = Arrays.asList(workload_files); } FileOutputStream output = new FileOutputStream(Configuration.workingDirectory+Configuration.experimentName+"log.out.txt"); @@ -232,8 +232,8 @@ public VmAllocationPolicy create(List list, public VmAllocationPolicy create(List list, HostSelectionPolicy hostSelectionPolicy, VmMigrationPolicy vmMigrationPolicy - ) { - return new VmAllocationPolicyCombinedLeastFullFirst(list); + ) { + return new VmAllocationPolicyCombinedLeastFullFirst(list); } }; nos = new NetworkOperatingSystemSimple(); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFC.java b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFC.java index 0de5c149..33a8d977 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFC.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFC.java @@ -185,7 +185,7 @@ public static void main(String[] args) throws FileNotFoundException { } } else { - workloads = (List) Arrays.asList(workload_files); + workloads = Arrays.asList(workload_files); } FileOutputStream output = new FileOutputStream(Configuration.workingDirectory+Configuration.experimentName+"log.out.txt"); @@ -338,7 +338,9 @@ public VmAllocationPolicy create(List list, // Broker SDNBroker broker = createBroker(); - int brokerId = broker.getId(); + if (broker != null) { + int brokerId = broker.getId(); + } // Submit virtual topology broker.submitDeployApplication(datacenter, deploymentFile); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFCEdge.java b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFCEdge.java index e9683fbf..45b4adc3 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFCEdge.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/example/StartExperimentSFCEdge.java @@ -183,7 +183,7 @@ public static void main(String[] args) throws FileNotFoundException { } } else { - workloads = (List) Arrays.asList(workload_files); + workloads = Arrays.asList(workload_files); } FileOutputStream output = new FileOutputStream(Configuration.workingDirectory+Configuration.experimentName+"log.out.txt"); @@ -208,40 +208,19 @@ public static void main(String[] args) throws FileNotFoundException { switch(vmAllocPolicy) { case Random: case RandomFlow: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List list, - HostSelectionPolicy hostSelectionPolicy, - VmMigrationPolicy vmMigrationPolicy - ) { - return new VmAllocationPolicyCombinedLeastFullFirst(list); - } - }; + vmAllocationFac = (list, hostSelectionPolicy1, vmMigrationPolicy1) -> new VmAllocationPolicyCombinedLeastFullFirst(list); nos = new NetworkOperatingSystemSimple(); break; case MFF: case MFFFlow: case MFFCPU: case MFFBW: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List list, - HostSelectionPolicy hostSelectionPolicy, - VmMigrationPolicy vmMigrationPolicy - ) { - return new VmAllocationPolicyCombinedMostFullFirst(list); - } - }; + vmAllocationFac = (list, hostSelectionPolicy12, vmMigrationPolicy12) -> new VmAllocationPolicyCombinedMostFullFirst(list); nos = new NetworkOperatingSystemSimple(); break; case LFF: case LFFFlow: - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List list, - HostSelectionPolicy hostSelectionPolicy, - VmMigrationPolicy vmMigrationPolicy - ) { - return new VmAllocationPolicyCombinedLeastFullFirst(list); - } - }; + vmAllocationFac = (list, hostSelectionPolicy13, vmMigrationPolicy13) -> new VmAllocationPolicyCombinedLeastFullFirst(list); nos = new NetworkOperatingSystemSimple(); break; case HPF: // High Priority First @@ -249,14 +228,7 @@ public VmAllocationPolicy create(List list, // Initial placement: overbooking, MFF // Initial placement connectivity: Connected VMs in one host // Migration: none - vmAllocationFac = new VmAllocationPolicyFactory() { - public VmAllocationPolicy create(List list, - HostSelectionPolicy hostSelectionPolicy, - VmMigrationPolicy vmMigrationPolicy - ) { - return new VmAllocationPolicyPriorityFirst(list, hostSelectionPolicy, vmMigrationPolicy); - } - }; + vmAllocationFac = (list, hostSelectionPolicy14, vmMigrationPolicy14) -> new VmAllocationPolicyPriorityFirst(list, hostSelectionPolicy14, vmMigrationPolicy14); nos = new NetworkOperatingSystemGroupPriority(); hostSelectionPolicy = new HostSelectionPolicyMostFull(); vmMigrationPolicy = null; @@ -301,7 +273,9 @@ public VmAllocationPolicy create(List list, // Broker SDNBroker broker = createBroker(); - int brokerId = broker.getId(); + if (broker != null) { + int brokerId = broker.getId(); + } // Submit virtual topology broker.submitDeployApplication(dcs.values(), deploymentFile); @@ -368,12 +342,14 @@ public static Map createPhysicalTopology( HostSelectionPolicy hostSelectionPolicy, VmMigrationPolicy vmMigrationPolicy) { HashMap dcs = new HashMap(); - // This funciton creates Datacenters and NOS inside the data cetner. + // This funciton creates Datacenters and NOS inside the data center. Map dcNameNOS = PhysicalTopologyParser.loadPhysicalTopologyMultiDC(physicalTopologyFile); for(String dcName:dcNameNOS.keySet()) { NetworkOperatingSystem nos = dcNameNOS.get(dcName); nos.setLinkSelectionPolicy(ls); + //if ("net".equals(dcName)) continue; + if (!nos.getPhysicalTopology().isCloudNode()) continue; SDNDatacenter datacenter = createSDNDatacenter(dcName, nos, vmAllocationFac, hostSelectionPolicy, vmMigrationPolicy); @@ -458,7 +434,7 @@ protected static SDNDatacenter createSDNDatacenter(String name, * @return the datacenter broker */ protected static SDNBroker createBroker() { - SDNBroker broker = null; + SDNBroker broker; try { broker = new SDNBroker("Broker"); } catch (Exception e) { diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/monitor/MonitoringValues.java b/src/main/java/org/cloudbus/cloudsim/sdn/monitor/MonitoringValues.java index bb6148f0..e3ff0f2a 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/monitor/MonitoringValues.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/monitor/MonitoringValues.java @@ -120,7 +120,7 @@ public List getValues() { do { // Calculate the average values between start and end time - endInterval = endInterval > endTime ? endTime : endInterval; + endInterval = Math.min(endInterval, endTime); double sum = 0; double totalDuration = 0; double t_prev = startInterval; diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystem.java b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystem.java index 6593c60c..2e70f9b8 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystem.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystem.java @@ -681,7 +681,7 @@ private void updateVmMonitor(double logTime) { if(vmAlloc instanceof OverbookingVmAllocationPolicy) { for(Vm v: this.vmMapId2Vm.values()) { SDNVm vm = (SDNVm)v; - double mipsOBR = ((OverbookingVmAllocationPolicy)vmAlloc).getCurrentOverbookingRatioMips((SDNVm) vm); + double mipsOBR = ((OverbookingVmAllocationPolicy)vmAlloc).getCurrentOverbookingRatioMips(vm); LogWriter log = LogWriter.getLogger("vm_OBR_mips.csv"); log.printLine(vm.getName()+","+logTime+","+mipsOBR); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemGroupPriority.java b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemGroupPriority.java index d0cc7ad3..486973c6 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemGroupPriority.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemGroupPriority.java @@ -33,11 +33,7 @@ protected List createVmGroup(Collection vms, Collection List arcPool = new ArrayList(flows); // all virtual Links // Sort links by their bandwidth - Collections.sort(arcPool, new Comparator() { - public int compare(FlowConfig o1, FlowConfig o2) { - return (int) (o1.getBw() - o2.getBw()); - } - }); + Collections.sort(arcPool, (o1, o2) -> (int) (o1.getBw() - o2.getBw())); // Separate groups by link bandwidth order List groups = VmGroupPriority.classifyGroupByArcList(arcPool, vmPool); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemSimple.java b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemSimple.java index d6b4e10e..059348ab 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemSimple.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/nos/NetworkOperatingSystemSimple.java @@ -43,11 +43,7 @@ protected boolean deployApplication(List vms, Collection links, Log.printLine(CloudSim.clock() + ": " + getName() + ": Starting deploying application.."); // Sort VMs in decending order of the required MIPS - Collections.sort(vms, new Comparator() { - public int compare(Vm o1, Vm o2) { - return (int) (o2.getMips()*o2.getNumberOfPes() - o1.getMips()*o1.getNumberOfPes()); - } - }); + Collections.sort(vms, (o1, o2) -> (int) (o2.getMips()*o2.getNumberOfPes() - o1.getMips()*o1.getNumberOfPes())); for(Vm vm:vms) diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/parsers/PhysicalTopologyParser.java b/src/main/java/org/cloudbus/cloudsim/sdn/parsers/PhysicalTopologyParser.java index 6b2245bd..93fc63d1 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/parsers/PhysicalTopologyParser.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/parsers/PhysicalTopologyParser.java @@ -71,7 +71,7 @@ public static Map loadPhysicalTopologyMultiDC(St for(String dcName: dcNameType.keySet()) { NetworkOperatingSystem nos; nos = new NetworkOperatingSystemSimple("NOS_"+dcName); - + netOsList.put(dcName, nos); parser.parseNode(dcName); } @@ -85,6 +85,8 @@ public static Map loadPhysicalTopologyMultiDC(St } for(String dcName: dcNameType.keySet()) { if("network".equals(dcNameType.get(dcName))) { + //potential bug: why do same operations for different type of dcNameType? This results in "net" to gain zero + //nodeTable NetworkOperatingSystem nos = netOsList.get(dcName); nos.configurePhysicalTopology(parser.getHosts(dcName), parser.getSwitches(dcName), parser.getLinks()); } diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/physicalcomponents/PhysicalTopology.java b/src/main/java/org/cloudbus/cloudsim/sdn/physicalcomponents/PhysicalTopology.java index 2c3b1c78..1de161e8 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/physicalcomponents/PhysicalTopology.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/physicalcomponents/PhysicalTopology.java @@ -157,7 +157,7 @@ public void addLink(Node fromNode, Node toNode, double latency){ int from = fromNode.getAddress(); int to = toNode.getAddress(); - long bw = (fromNode.getBandwidth()"+nodesTable.get(to).getAddress()); @@ -212,6 +212,15 @@ public Collection getAllSwitches() { } return allSwitches; } + + public boolean isCloudNode(){ + + for(Node n:nodesTable.values()) { + if(n instanceof SDNHost) + return true; + } + return false; + } public Collection getAllHosts() { Collection allHosts = new LinkedList<>(); diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmAllocationPolicyEx.java b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmAllocationPolicyEx.java index 1c278fc4..69cc1f33 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmAllocationPolicyEx.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmAllocationPolicyEx.java @@ -410,7 +410,6 @@ protected double getOverRatioBw(SDNVm vm, Host host) { public void updateResourceAllocation(Host host) { // Update the resource allocation ratio of every VM - return; } // Temporary resource reservation for migration purpose diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmGroup.java b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmGroup.java index c8ff01af..bd6917c8 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmGroup.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/VmGroup.java @@ -114,7 +114,9 @@ public static void classifyGroupByArcList(List sortedArcPool, List getMostUtilizedVms(List hosts) { } // Sort the most utilized VMs - Collections.sort(migrationOverVMList, new Comparator() { - public int compare(SDNVm o1, SDNVm o2) { - double endTime = CloudSim.clock(); - double startTime = endTime - Configuration.migrationTimeInterval; - - double o1util = o1.getMonitoringValuesVmCPUUtilization().getAverageValue(startTime, endTime); - double o2util = o2.getMonitoringValuesVmCPUUtilization().getAverageValue(startTime, endTime); - return (int) (o1util - o2util); - } + Collections.sort(migrationOverVMList, (o1, o2) -> { + double endTime = CloudSim.clock(); + double startTime = endTime - Configuration.migrationTimeInterval; + + double o1util = o1.getMonitoringValuesVmCPUUtilization().getAverageValue(startTime, endTime); + double o2util = o2.getMonitoringValuesVmCPUUtilization().getAverageValue(startTime, endTime); + return (int) (o1util - o2util); }); return migrationOverVMList; diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/OverBookingVmAllocationPolicyDistributeConnected.java b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/OverBookingVmAllocationPolicyDistributeConnected.java index 086a5ad6..352b3266 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/OverBookingVmAllocationPolicyDistributeConnected.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/OverBookingVmAllocationPolicyDistributeConnected.java @@ -43,7 +43,7 @@ public boolean allocateHostForVmInGroup(Vm vm, VmGroup vmGroup) { else { // Other VMs in the group has been already allocated // Avoid the correlated hosts. - List allHosts = new ArrayList(this.getHostList()); + List allHosts = new ArrayList(this.getHostList()); allHosts.removeAll(connectedHosts); if(allocateHostForVm(vm, hostSelectionPolicy.selectHostForVm((SDNVm)vm, allHosts)) == true) { diff --git a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/VmMigrationPolicyLeastCorrelated.java b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/VmMigrationPolicyLeastCorrelated.java index 8c820af7..5f842381 100644 --- a/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/VmMigrationPolicyLeastCorrelated.java +++ b/src/main/java/org/cloudbus/cloudsim/sdn/policies/vmallocation/overbooking/VmMigrationPolicyLeastCorrelated.java @@ -98,12 +98,10 @@ protected static List sortLeastCorrelatedHosts(SDNVm vm, Li } // Sort the most utilized VMs - Collections.sort(hosts, new Comparator() { - public int compare(Host o1, Host o2) { - double o1cc = corr.get(o1); - double o2cc = corr.get(o2); - return Double.compare(o1cc, o2cc); - } + Collections.sort(hosts, (Comparator) (o1, o2) -> { + double o1cc = corr.get(o1); + double o2cc = corr.get(o2); + return Double.compare(o1cc, o2cc); }); return (List) hosts; }