Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
G
gpucloudsim
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LPDS
gpucloudsim
Commits
0b6537bb
Commit
0b6537bb
authored
Dec 22, 2011
by
saurabh.kr.garg@gmail.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
--no commit message
--no commit message
parent
1a68b1be
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
432 additions
and
0 deletions
+432
-0
TestBagofTaskApp.java
...loudsim/examples/network/datacenter/TestBagofTaskApp.java
+91
-0
TestExample.java
...bus/cloudsim/examples/network/datacenter/TestExample.java
+341
-0
No files found.
modules/cloudsim-examples/src/main/java/org/cloudbus/cloudsim/examples/network/datacenter/TestBagofTaskApp.java
0 → 100755
View file @
0b6537bb
package
org
.
cloudbus
.
cloudsim
.
examples
.
network
.
datacenter
;
/**
* BagofTaskApp is an example of AppCloudlet having three noncommunicating tasks.
*
*
* Please refer to following publication for more details:
*
* Saurabh Kumar Garg and Rajkumar Buyya, NetworkCloudSim: Modelling Parallel
* Applications in Cloud Simulations, Proceedings of the 4th IEEE/ACM
* International Conference on Utility and Cloud Computing (UCC 2011, IEEE CS
* Press, USA), Melbourne, Australia, December 5-7, 2011.
*
*
* @author Saurabh Kumar Garg
* @since CloudSim Toolkit 1.0
*/
import
java.util.List
;
import
org.cloudbus.cloudsim.UtilizationModel
;
import
org.cloudbus.cloudsim.UtilizationModelFull
;
import
org.cloudbus.cloudsim.core.CloudSim
;
import
org.cloudbus.cloudsim.network.datacenter.AppCloudlet
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkCloudlet
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkConstants
;
import
org.cloudbus.cloudsim.network.datacenter.TaskStage
;
public
class
TestBagofTaskApp
extends
AppCloudlet
{
public
TestBagofTaskApp
(
int
type
,
int
appID
,
double
deadline
,
int
numbervm
,
int
userId
)
{
super
(
type
,
appID
,
deadline
,
numbervm
,
userId
);
this
.
numbervm
=
this
.
getnumvm
();
this
.
exeTime
=
getExecTime
()/
this
.
numbervm
;
}
@Override
public
void
createCloudletList
(
List
<
Integer
>
vmIdList
){
//basically, each task runs the simulation and then data is consolidated in one task
int
executionTime
=
getExecTime
();
long
memory
=
1000
;
long
fileSize
=
NetworkConstants
.
FILE_SIZE
;
long
outputSize
=
NetworkConstants
.
OUTPUT_SIZE
;
int
pesNumber
=
NetworkConstants
.
PES_NUMBER
;
int
stgId
=
0
;
int
t
=
NetworkConstants
.
currentCloudletId
;
for
(
int
i
=
0
;
i
<
numbervm
;
i
++){
UtilizationModel
utilizationModel
=
new
UtilizationModelFull
();
NetworkCloudlet
cl
=
new
NetworkCloudlet
(
NetworkConstants
.
currentCloudletId
,
executionTime
/
numbervm
,
pesNumber
,
fileSize
,
outputSize
,
memory
,
utilizationModel
,
utilizationModel
,
utilizationModel
);
NetworkConstants
.
currentCloudletId
++;
cl
.
setUserId
(
userId
);
cl
.
submittime
=
CloudSim
.
clock
();
cl
.
currStagenum
=-
1
;
cl
.
setVmId
(
vmIdList
.
get
(
i
));
//compute and send data to node 0
cl
.
stages
.
add
(
new
TaskStage
(
NetworkConstants
.
EXECUTION
,
NetworkConstants
.
COMMUNICATION_LENGTH
,
executionTime
/
numbervm
,
stgId
++,
memory
,
vmIdList
.
get
(
0
),
cl
.
getCloudletId
()));
//0 has an extra stage of waiting for results; others send
if
(
i
==
0
){
for
(
int
j
=
1
;
j
<
numbervm
;
j
++)
cl
.
stages
.
add
(
new
TaskStage
(
NetworkConstants
.
WAIT_RECV
,
NetworkConstants
.
COMMUNICATION_LENGTH
,
0
,
stgId
++,
memory
,
vmIdList
.
get
(
j
),
cl
.
getCloudletId
()+
j
));
}
else
{
cl
.
stages
.
add
(
new
TaskStage
(
NetworkConstants
.
WAIT_SEND
,
NetworkConstants
.
COMMUNICATION_LENGTH
,
0
,
stgId
++,
memory
,
vmIdList
.
get
(
0
),
t
));
}
clist
.
add
(
cl
);
}
}
/**
* One can generate number of VMs for each application based on deadline
* @return
*/
public
int
getnumvm
(){
double
exetime
=
getExecTime
()/
2
;
//for two vms
if
(
this
.
deadline
>
exetime
)
return
2
;
else
if
(
this
.
deadline
>(
exetime
/
4
))
return
4
;
return
4
;
}
private
int
getExecTime
()
{
//use exec constraints
return
100
;
}
}
modules/cloudsim-examples/src/main/java/org/cloudbus/cloudsim/examples/network/datacenter/TestExample.java
0 → 100755
View file @
0b6537bb
package
org
.
cloudbus
.
cloudsim
.
examples
.
network
.
datacenter
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.text.DecimalFormat
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.LinkedList
;
import
java.util.List
;
import
org.cloudbus.cloudsim.Cloudlet
;
import
org.cloudbus.cloudsim.CloudletSchedulerSpaceShared
;
import
org.cloudbus.cloudsim.DatacenterCharacteristics
;
import
org.cloudbus.cloudsim.Host
;
import
org.cloudbus.cloudsim.Log
;
import
org.cloudbus.cloudsim.Pe
;
import
org.cloudbus.cloudsim.Storage
;
import
org.cloudbus.cloudsim.UtilizationModel
;
import
org.cloudbus.cloudsim.UtilizationModelFull
;
import
org.cloudbus.cloudsim.Vm
;
import
org.cloudbus.cloudsim.VmAllocationPolicySimple
;
import
org.cloudbus.cloudsim.VmSchedulerTimeShared
;
import
org.cloudbus.cloudsim.core.CloudSim
;
import
org.cloudbus.cloudsim.distributions.UniformDistr
;
import
org.cloudbus.cloudsim.network.datacenter.AppCloudlet
;
import
org.cloudbus.cloudsim.network.datacenter.EdgeSwitch
;
import
org.cloudbus.cloudsim.network.datacenter.NetDatacenterBroker
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkConstants
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkDatacenter
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkHost
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkVm
;
import
org.cloudbus.cloudsim.network.datacenter.NetworkVmAllocationPolicy
;
import
org.cloudbus.cloudsim.provisioners.BwProvisionerSimple
;
import
org.cloudbus.cloudsim.provisioners.PeProvisionerSimple
;
import
org.cloudbus.cloudsim.provisioners.RamProvisionerSimple
;
public
class
TestExample
{
/**
* @param args
*/
/** The cloudlet list. */
private
static
List
<
AppCloudlet
>
cloudletList
;
/** The vmlist. */
private
static
List
<
NetworkVm
>
vmlist
;
/**
* Creates main() to run this example.
*
* @param args
* the args
*/
public
static
void
main
(
String
[]
args
)
{
Log
.
printLine
(
"Starting CloudSimExample1..."
);
try
{
int
num_user
=
1
;
// number of cloud users
Calendar
calendar
=
Calendar
.
getInstance
();
boolean
trace_flag
=
false
;
// mean trace events
// Initialize the CloudSim library
CloudSim
.
init
(
num_user
,
calendar
,
trace_flag
);
// Second step: Create Datacenters
// Datacenters are the resource providers in CloudSim. We need at
// list one of them to run a CloudSim simulation
NetworkDatacenter
datacenter0
=
createDatacenter
(
"Datacenter_0"
);
// Third step: Create Broker
NetDatacenterBroker
broker
=
createBroker
();
int
brokerId
=
broker
.
getId
();
broker
.
setLinkDC
(
datacenter0
);
// broker.setLinkDC(datacenter0);
// Fifth step: Create one Cloudlet
cloudletList
=
new
ArrayList
<
AppCloudlet
>();
vmlist
=
new
ArrayList
<
NetworkVm
>();
// submit vm list to the broker
broker
.
submitVmList
(
vmlist
);
// Sixth step: Starts the simulation
CloudSim
.
startSimulation
();
CloudSim
.
stopSimulation
();
// Final step: Print results when simulation is over
List
<
Cloudlet
>
newList
=
broker
.
getCloudletReceivedList
();
printCloudletList
(
newList
);
System
.
out
.
println
(
"numberofcloudlet "
+
newList
.
size
()
+
" Cached "
+
NetDatacenterBroker
.
cachedcloudlet
+
" Data transfered "
+
NetworkConstants
.
totaldatatransfer
);
// Print the debt of each user to each datacenter
datacenter0
.
printDebts
();
Log
.
printLine
(
"CloudSimExample1 finished!"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Log
.
printLine
(
"Unwanted errors happen"
);
}
}
/**
* Creates the datacenter.
*
* @param name
* the name
*
* @return the datacenter
*/
private
static
NetworkDatacenter
createDatacenter
(
String
name
)
{
// Here are the steps needed to create a PowerDatacenter:
// 1. We need to create a list to store
// our machine
List
<
NetworkHost
>
hostList
=
new
ArrayList
<
NetworkHost
>();
// 2. A Machine contains one or more PEs or CPUs/Cores.
// In this example, it will have only one core.
// List<Pe> peList = new ArrayList<Pe>();
int
mips
=
1
;
// 3. Create PEs and add these into a list.
// peList.add(new Pe(0, new PeProvisionerSimple(mips))); // need to
// store Pe id and MIPS Rating
// 4. Create Host with its id and list of PEs and add them to the list
// of machines
int
hostId
=
0
;
int
ram
=
2048
;
// host memory (MB)
long
storage
=
1000000
;
// host storage
int
bw
=
10000
;
for
(
int
i
=
0
;
i
<
NetworkConstants
.
EdgeSwitchPort
*
NetworkConstants
.
AggSwitchPort
*
NetworkConstants
.
RootSwitchPort
;
i
++)
{
// 2. A Machine contains one or more PEs or CPUs/Cores.
// In this example, it will have only one core.
// 3. Create PEs and add these into an object of PowerPeList.
List
<
Pe
>
peList
=
new
ArrayList
<
Pe
>();
peList
.
add
(
new
Pe
(
0
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
1
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
2
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
3
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
4
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
5
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
6
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
peList
.
add
(
new
Pe
(
7
,
new
PeProvisionerSimple
(
mips
)));
// need to
// store
// PowerPe
// id and
// MIPS
// Rating
// 4. Create PowerHost with its id and list of PEs and add them to
// the list of machines
hostList
.
add
(
new
NetworkHost
(
i
,
new
RamProvisionerSimple
(
ram
),
new
BwProvisionerSimple
(
bw
),
storage
,
peList
,
new
VmSchedulerTimeShared
(
peList
)));
// This is our 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.001
;
// the cost of using storage in this
// resource
double
costPerBw
=
0.0
;
// the cost of using bw in this resource
LinkedList
<
Storage
>
storageList
=
new
LinkedList
<
Storage
>();
// 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 NetworkDatacenter object.
NetworkDatacenter
datacenter
=
null
;
try
{
datacenter
=
new
NetworkDatacenter
(
name
,
characteristics
,
new
NetworkVmAllocationPolicy
(
hostList
),
storageList
,
0
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
// Create Internal Datacenter network
CreateNetwork
(
2
,
datacenter
);
return
datacenter
;
}
// We strongly encourage users to develop their own broker policies, to
// submit vms and cloudlets according
// to the specific rules of the simulated scenario
/**
* Creates the broker.
*
* @return the datacenter broker
*/
private
static
NetDatacenterBroker
createBroker
()
{
NetDatacenterBroker
broker
=
null
;
try
{
broker
=
new
NetDatacenterBroker
(
"Broker"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
return
broker
;
}
/**
* Prints the Cloudlet objects.
*
* @param list
* list of Cloudlets
* @throws IOException
*/
private
static
void
printCloudletList
(
List
<
Cloudlet
>
list
)
throws
IOException
{
int
size
=
list
.
size
();
Cloudlet
cloudlet
;
double
fintime
=
0
;
String
indent
=
" "
;
Log
.
printLine
();
Log
.
printLine
(
"========== OUTPUT =========="
);
Log
.
printLine
(
"Cloudlet ID"
+
indent
+
"STATUS"
+
indent
+
"Data center ID"
+
indent
+
"VM ID"
+
indent
+
"Time"
+
indent
+
"Start Time"
+
indent
+
"Finish Time"
);
DecimalFormat
dft
=
new
DecimalFormat
(
"###.##"
);
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
cloudlet
=
list
.
get
(
i
);
Log
.
print
(
indent
+
cloudlet
.
getCloudletId
()
+
indent
+
indent
);
if
(
cloudlet
.
getCloudletStatus
()
==
Cloudlet
.
SUCCESS
)
{
Log
.
print
(
"SUCCESS"
);
fintime
=
cloudlet
.
getFinishTime
();
Log
.
printLine
(
indent
+
indent
+
cloudlet
.
getResourceId
()
+
indent
+
indent
+
indent
+
cloudlet
.
getVmId
()
+
indent
+
indent
+
dft
.
format
(
cloudlet
.
getActualCPUTime
())
+
indent
+
indent
+
dft
.
format
(
cloudlet
.
getExecStartTime
())
+
indent
+
indent
+
dft
.
format
(
cloudlet
.
getFinishTime
()));
}
}
}
static
void
CreateNetwork
(
int
numhost
,
NetworkDatacenter
dc
)
{
// //Root Switch
// Switch swroot=new Switch("Root", Constants.ROOT_LEVEL, dc);
// dc.Switchlist.put(swroot.getId(), swroot);
// //Agg Switch
// Switch aggswitch[]=new Switch[(int) Constants.RootSwitchPort];
// for(int j=0;j<Constants.RootSwitchPort;j++)
// {
// aggswitch[j]=new Switch("Agg"+j, Constants.Agg_LEVEL, dc);
// swroot.downlinkswitches.add(aggswitch[j]);
// aggswitch[j].uplinkswitches.add(swroot);
// dc.Switchlist.put(aggswitch[j].getId(), aggswitch[j]);
// }
// Edge Switch
EdgeSwitch
edgeswitch
[]
=
new
EdgeSwitch
[
1
];
for
(
int
i
=
0
;
i
<
1
;
i
++)
{
edgeswitch
[
i
]
=
new
EdgeSwitch
(
"Edge"
+
i
,
NetworkConstants
.
EDGE_LEVEL
,
dc
);
// edgeswitch[i].uplinkswitches.add(null);
dc
.
Switchlist
.
put
(
edgeswitch
[
i
].
getId
(),
edgeswitch
[
i
]);
// aggswitch[(int)
// (i/Constants.AggSwitchPort)].downlinkswitches.add(edgeswitch[i]);
}
for
(
Host
hs
:
dc
.
getHostList
())
{
NetworkHost
hs1
=
(
NetworkHost
)
hs
;
hs1
.
bandwidth
=
NetworkConstants
.
BandWidthEdgeHost
;
int
switchnum
=
(
int
)
(
hs
.
getId
()
/
NetworkConstants
.
EdgeSwitchPort
);
edgeswitch
[
switchnum
].
hostlist
.
put
(
hs
.
getId
(),
hs1
);
dc
.
HostToSwitchid
.
put
(
hs
.
getId
(),
edgeswitch
[
switchnum
].
getId
());
hs1
.
sw
=
edgeswitch
[
switchnum
];
List
<
NetworkHost
>
hslist
=
hs1
.
sw
.
fintimelistHost
.
get
(
0
D
);
if
(
hslist
==
null
)
{
hslist
=
new
ArrayList
<
NetworkHost
>();
hs1
.
sw
.
fintimelistHost
.
put
(
0
D
,
hslist
);
}
hslist
.
add
(
hs1
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment