-
Notifications
You must be signed in to change notification settings - Fork 0
/
DatacenterCreator.java
179 lines (139 loc) · 7.1 KB
/
DatacenterCreator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package utils;
import MetaheuristicsNew.PowerVmAllocationPolicy;
import MetaheuristicsNew.PowerVmSchedulerTimeShared;
import org.apache.commons.math3.analysis.function.Power;
import org.cloudbus.cloudsim.*;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.power.PowerDatacenter;
import org.cloudbus.cloudsim.power.PowerHost;
import org.cloudbus.cloudsim.power.PowerHostUtilizationHistory;
import org.cloudbus.cloudsim.power.models.PowerModelLinear;
import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
import org.cloudbus.cloudsim.sdn.example.policies.VmSchedulerTimeSharedEnergy;
import org.fog.utils.FogLinearPowerModel;
import javax.xml.crypto.Data;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
public class DatacenterCreator {
private static Datacenter datacenter;
public static Datacenter getDatacenter(){
return datacenter;
}
public static Datacenter createDatacenter(String name) {
// Here are the steps needed to create a PowerDatacenter:
// 1. We need to create a list to store one or more Machines
List<Host> hostList = new ArrayList<>();
// 2. A Machine contains one or more PEs or CPUs/Cores. Therefore, should
// create a list to store these PEs before creating a Machine.
List<Pe> peList = new ArrayList<>();
int mips = 2000;
// 3. Create PEs and add these into the list.
peList.add(new Pe(0, new PeProvisionerSimple(mips)));
//==========HERE=====================
// peList.add(new Pe(1, new PeProvisionerSimple(mips)));
// peList.add(new Pe(2, new PeProvisionerSimple(mips)));
// peList.add(new Pe(3, new PeProvisionerSimple(mips)));
//==================================
//4. Create Hosts with its id and list of PEs and add them to the list of machines
int hostId = 0;
int ram = 2048; //host memory (MB) ((it was 2048))
long storage = 1000000; //host storage
int bw = 200000;
hostList.add(
new Host(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList,
new VmSchedulerTimeShared(peList)
)
); // This is our first machine
//==============
// 5. Create a DatacenterCharacteristics object that stores the
// properties of a data center: architecture, OS, list of
// Machines, allocation policy: time- or space-shared, time zone
// and its price (G$/Pe time unit).
String arch = "x86"; // system architecture
String os = "Linux"; // operating system
String vmm = "Xen";
double time_zone = 10.0; // time zone this resource located
double cost = 3.0; // the cost of using processing in this resource
double costPerMem = 0.05; // the cost of using memory in this resource
double costPerStorage = 0.1; // the cost of using storage in this resource
double costPerBw = 0.1; // the cost of using bw in this resource
LinkedList<Storage> storageList = new LinkedList<>(); //we are not adding SAN devices by now
DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw);
// 6. Finally, we need to create a PowerDatacenter object.
Datacenter datacenter = null;
try {
datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
} catch (Exception e) {
e.printStackTrace();
}
return datacenter;
}
public static PowerDatacenter createDatacenter(String name, int hostId) {
// Here are the steps needed to create a PowerDatacenter:
// 1. We need to create a list to store one or more Machines
List<PowerHost> hostList = new ArrayList<>();
// 2. A Machine contains one or more PEs or CPUs/Cores. Therefore, should
// create a list to store these PEs before creating a Machine.
List<Pe> peList = new ArrayList<>();
int mips = 2000;
// 3. Create PEs and add these into the list.
peList.add(new Pe(0, new PeProvisionerSimple(mips)));
//==========HERE=====================
// peList.add(new Pe(1, new PeProvisionerSimple(mips)));
// peList.add(new Pe(2, new PeProvisionerSimple(mips)));
// peList.add(new Pe(3, new PeProvisionerSimple(mips)));
//==================================
//4. Create Hosts with its id and list of PEs and add them to the list of machines
// int hostId = 0;
int ram = 2048; //host memory (MB) ((it was 2048))
long storage = 1000000; //host storage
int bw = 200000;
hostList.add(
new PowerHostUtilizationHistory(
hostId,
new RamProvisionerSimple(ram),
new BwProvisionerSimple(bw),
storage,
peList,
new PowerVmSchedulerTimeShared(peList),
new PowerModelLinear(1000, 15)
)
); // This is our first machine
//==============
// 5. Create a DatacenterCharacteristics object that stores the
// properties of a data center: architecture, OS, list of
// Machines, allocation policy: time- or space-shared, time zone
// and its price (G$/Pe time unit).
String arch = "x86"; // system architecture
String os = "Linux"; // operating system
String vmm = "Xen";
double time_zone = 10.0; // time zone this resource located
double cost = 3.0; // the cost of using processing in this resource
double costPerMem = 0.05; // the cost of using memory in this resource
double costPerStorage = 0.1; // the cost of using storage in this resource
double costPerBw = 0.1; // the cost of using bw in this resource
LinkedList<Storage> storageList = new LinkedList<>(); //we are not adding SAN devices by now
DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw);
// 6. Finally, we need to create a PowerDatacenter object.
PowerDatacenter datacenter = null;
try {
datacenter = new PowerDatacenter(name, characteristics, new PowerVmAllocationPolicy(hostList), storageList, 5);
//
datacenter.setDisableMigrations(false);
} catch (Exception e) {
e.printStackTrace();
}
return datacenter;
}
}