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
1c980a4e
Commit
1c980a4e
authored
Jan 10, 2012
by
rodrigo.calheiros
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CloudSin version String updated to 3.0.
parent
6ef9f1ed
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
234 additions
and
186 deletions
+234
-186
CloudSim.java
...im/src/main/java/org/cloudbus/cloudsim/core/CloudSim.java
+234
-186
No files found.
modules/cloudsim/src/main/java/org/cloudbus/cloudsim/core/CloudSim.java
View file @
1c980a4e
...
...
@@ -30,25 +30,25 @@ import org.cloudbus.cloudsim.core.predicates.PredicateNone;
* such file are mapped to CloudSim entities. Delay calculated from the BRITE
* model are added to the messages send through CloudSim. Messages using the old
* model are converted to the apropriate methods with the correct parameters.
*
* @author
Rodrigo N. Calheiros
* @author
Anton Beloglazov
* @since
CloudSim Toolkit 1.0
*
* @author
Rodrigo N. Calheiros
* @author
Anton Beloglazov
* @since
CloudSim Toolkit 1.0
*/
public
class
CloudSim
{
/** The Constant CLOUDSIM_VERSION_STRING. */
private
static
final
String
CLOUDSIM_VERSION_STRING
=
"
2.1.1
"
;
private
static
final
String
CLOUDSIM_VERSION_STRING
=
"
3.0
"
;
/** The id of CIS entity. */
private
static
int
cisId
=
-
1
;
/** The id of CloudSimShutdown entity. */
@SuppressWarnings
(
"unused"
)
private
static
int
shutdownId
=
-
1
;
private
static
int
shutdownId
=
-
1
;
/** The CIS object. */
private
static
CloudInformationService
cis
=
null
;
private
static
CloudInformationService
cis
=
null
;
/** The Constant NOT_FOUND. */
private
static
final
int
NOT_FOUND
=
-
1
;
...
...
@@ -59,22 +59,28 @@ public class CloudSim {
/** The calendar. */
private
static
Calendar
calendar
=
null
;
/** The termination time. */
private
static
double
terminateAt
=
-
1
;
private
static
double
terminateAt
=
-
1
;
/**
* Initialises all the common attributes.
*
* @param _calendar the _calendar
* @param _traceFlag the _trace flag
* @param numUser number of users
* @throws Exception This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or empty
*
* @param _calendar
* the _calendar
* @param _traceFlag
* the _trace flag
* @param numUser
* number of users
* @throws Exception
* This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty
* @pre $none
* @post $none
*/
private
static
void
initCommonVariable
(
Calendar
_calendar
,
boolean
_traceFlag
,
int
numUser
)
throws
Exception
{
private
static
void
initCommonVariable
(
Calendar
_calendar
,
boolean
_traceFlag
,
int
numUser
)
throws
Exception
{
initialize
();
// NOTE: the order for the below 3 lines are important
traceFlag
=
_traceFlag
;
...
...
@@ -102,16 +108,19 @@ public class CloudSim {
* <li>CloudSimShutdown
* </ul>
* <p>
*
* @param numUser the number of User Entities created. This parameters indicates
* that {@link gridsim.CloudSimShutdown} first waits for all user
* entities's END_OF_SIMULATION signal before issuing terminate
* signal to other entities
* @param cal starting time for this simulation. If it is <tt>null</tt>,
* then the time will be taken from
* <tt>Calendar.getInstance()</tt>
* @param traceFlag <tt>true</tt> if CloudSim trace need to be written
*
*
* @param numUser
* the number of User Entities created. This parameters indicates
* that {@link gridsim.CloudSimShutdown} first waits for all user
* entities's END_OF_SIMULATION signal before issuing terminate
* signal to other entities
* @param cal
* starting time for this simulation. If it is <tt>null</tt>,
* then the time will be taken from
* <tt>Calendar.getInstance()</tt>
* @param traceFlag
* <tt>true</tt> if CloudSim trace need to be written
*
* @see gridsim.CloudSimShutdown
* @see CloudInformationService.CloudInformationService
* @pre numUser >= 0
...
...
@@ -142,11 +151,12 @@ public class CloudSim {
* <p>
* <b>Note</b>: This method should be called after all the entities have
* been setup and added.
*
*
* @return the double
* @throws NullPointerException This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty.
* @throws NullPointerException
* This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty.
* @see gridsim.CloudSim#init(int, Calendar, boolean)
* @pre $none
* @post $none
...
...
@@ -175,10 +185,12 @@ public class CloudSim {
* Stops Cloud Simulation (based on {@link Simulation#runStop()}). This
* should be only called if any of the user defined entities
* <b>explicitly</b> want to terminate simulation during execution.
*
* @throws NullPointerException This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or empty
*
*
* @throws NullPointerException
* This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty
*
* @see gridsim.CloudSim#init(int, Calendar, boolean)
* @see Simulation#runStop()
* @pre $none
...
...
@@ -192,10 +204,10 @@ public class CloudSim {
+
"Error - can't stop Cloud Simulation."
);
}
}
/**
* This method is called if one wants to terminate the simulation.
*
*
* @return true, if successful; false otherwise.
*/
public
static
boolean
terminateSimulation
()
{
...
...
@@ -205,12 +217,12 @@ public class CloudSim {
}
/**
* This method is called if one wants to terminate the simulation at a
*
given
time.
*
* @param time
the time at which the simulation has to be terminated
*
@return true, if successful
* otherwise.
* This method is called if one wants to terminate the simulation at a
given
* time.
*
* @param time
*
the time at which the simulation has to be terminated
*
@return true, if successful
otherwise.
*/
public
static
boolean
terminateSimulation
(
double
time
)
{
if
(
time
<=
clock
)
{
...
...
@@ -223,11 +235,11 @@ public class CloudSim {
/**
* Gets a new copy of initial simulation Calendar.
*
* @return a new copy of Calendar object or
if CloudSim hasn't
*
been
initialized
*
* @return a new copy of Calendar object or
if CloudSim hasn't been
*
initialized
* @see gridsim.CloudSim#init(int, Calendar, boolean, String[], String[],
* String)
*
String)
* @see gridsim.CloudSim#init(int, Calendar, boolean)
* @pre $none
* @post $none
...
...
@@ -244,8 +256,8 @@ public class CloudSim {
/**
* Gets the entity ID of <tt>CloudInformationService</tt>.
*
* @return the Entity ID or
if it is not found
*
* @return the Entity ID or if it is not found
* @pre $none
* @post $result >= -1
*/
...
...
@@ -256,9 +268,9 @@ public class CloudSim {
/**
* Sends a request to Cloud Information Service (GIS) entity to get the list
* of all Cloud hostList.
*
* @return A List containing CloudResource ID (as an Integer object)
*
or if a
CIS entity hasn't been created before
*
* @return A List containing CloudResource ID (as an Integer object)
or if a
*
CIS entity hasn't been created before
* @pre $none
* @post $none
*/
...
...
@@ -276,13 +288,13 @@ public class CloudSim {
private
static
List
<
SimEntity
>
entities
;
/** The future event queue. */
protected
static
FutureQueue
future
;
protected
static
FutureQueue
future
;
/** The deferred event queue. */
protected
static
DeferredQueue
deferred
;
protected
static
DeferredQueue
deferred
;
/** The simulation clock. */
private
static
double
clock
;
private
static
double
clock
;
/** Flag for checking if the simulation is running. */
private
static
boolean
running
;
...
...
@@ -330,7 +342,7 @@ public class CloudSim {
/**
* Get the current simulation time.
*
*
* @return the simulation time
*/
public
static
double
clock
()
{
...
...
@@ -339,7 +351,7 @@ public class CloudSim {
/**
* Get the current number of entities in the simulation.
*
*
* @return The number of entities
*/
public
static
int
getNumEntities
()
{
...
...
@@ -348,9 +360,10 @@ public class CloudSim {
/**
* Get the entity with a given id.
*
* @param id the entity's unique id number
* @return The entity, or if it could not be found
*
* @param id
* the entity's unique id number
* @return The entity, or if it could not be found
*/
public
static
SimEntity
getEntity
(
int
id
)
{
return
entities
.
get
(
id
);
...
...
@@ -358,8 +371,9 @@ public class CloudSim {
/**
* Get the entity with a given name.
*
* @param name The entity's name
*
* @param name
* The entity's name
* @return The entity
*/
public
static
SimEntity
getEntity
(
String
name
)
{
...
...
@@ -368,8 +382,9 @@ public class CloudSim {
/**
* Get the id of an entity with a given name.
*
* @param name The entity's name
*
* @param name
* The entity's name
* @return The entity's unique id number
*/
public
static
int
getEntityId
(
String
name
)
{
...
...
@@ -383,9 +398,10 @@ public class CloudSim {
/**
* Gets name of the entity given its entity ID.
*
* @param entityID the entity ID
* @return the Entity name or if this object does not have one
*
* @param entityID
* the entity ID
* @return the Entity name or if this object does not have one
* @pre entityID > 0
* @post $none
*/
...
...
@@ -401,9 +417,10 @@ public class CloudSim {
/**
* Gets name of the entity given its entity ID.
*
* @param entityID the entity ID
* @return the Entity name or if this object does not have one
*
* @param entityID
* the entity ID
* @return the Entity name or if this object does not have one
* @pre entityID > 0
* @post $none
*/
...
...
@@ -416,7 +433,7 @@ public class CloudSim {
/**
* Returns a list of entities created for the simulation.
*
*
* @return the entity iterator
*/
public
static
List
<
SimEntity
>
getEntityList
()
{
...
...
@@ -433,8 +450,9 @@ public class CloudSim {
* Add a new entity to the simulation. This is present for compatibility
* with existing simulations since entities are automatically added to the
* simulation upon instantiation.
*
* @param e The new entity
*
* @param e
* The new entity
*/
public
static
void
addEntity
(
SimEntity
e
)
{
SimEvent
evt
;
...
...
@@ -455,8 +473,9 @@ public class CloudSim {
* Internal method used to add a new entity to the simulation when the
* simulation is running. It should <b>not</b> be called from user
* simulations.
*
* @param e The new entity
*
* @param e
* The new entity
*/
protected
static
void
addEntityDynamically
(
SimEntity
e
)
{
if
(
e
==
null
)
{
...
...
@@ -470,9 +489,8 @@ public class CloudSim {
/**
* Internal method used to run one tick of the simulation. This method
* should <b>not</b> be called in simulations.
*
* @return true, if successful
* otherwise
*
* @return true, if successful otherwise
*/
public
static
boolean
runClockTick
()
{
SimEntity
ent
;
...
...
@@ -531,9 +549,11 @@ public class CloudSim {
/**
* Used to hold an entity for some time.
*
* @param src the src
* @param delay the delay
*
* @param src
* the src
* @param delay
* the delay
*/
public
static
void
hold
(
int
src
,
long
delay
)
{
SimEvent
e
=
new
SimEvent
(
SimEvent
.
HOLD_DONE
,
clock
+
delay
,
src
);
...
...
@@ -543,9 +563,11 @@ public class CloudSim {
/**
* Used to pause an entity for some time.
*
* @param src the src
* @param delay the delay
*
* @param src
* the src
* @param delay
* the delay
*/
public
static
void
pause
(
int
src
,
double
delay
)
{
SimEvent
e
=
new
SimEvent
(
SimEvent
.
HOLD_DONE
,
clock
+
delay
,
src
);
...
...
@@ -555,12 +577,17 @@ public class CloudSim {
/**
* Used to send an event from one entity to another.
*
* @param src the src
* @param dest the dest
* @param delay the delay
* @param tag the tag
* @param data the data
*
* @param src
* the src
* @param dest
* the dest
* @param delay
* the delay
* @param tag
* the tag
* @param data
* the data
*/
public
static
void
send
(
int
src
,
int
dest
,
double
delay
,
int
tag
,
Object
data
)
{
if
(
delay
<
0
)
{
...
...
@@ -572,13 +599,19 @@ public class CloudSim {
}
/**
* Used to send an event from one entity to another, with priority in the queue.
*
* @param src the src
* @param dest the dest
* @param delay the delay
* @param tag the tag
* @param data the data
* Used to send an event from one entity to another, with priority in the
* queue.
*
* @param src
* the src
* @param dest
* the dest
* @param delay
* the delay
* @param tag
* the tag
* @param data
* the data
*/
public
static
void
sendFirst
(
int
src
,
int
dest
,
double
delay
,
int
tag
,
Object
data
)
{
if
(
delay
<
0
)
{
...
...
@@ -590,12 +623,15 @@ public class CloudSim {
}
/**
* Sets an entity's state to be waiting. The predicate used to wait for an event
* is now passed to Sim_system. Only events that satisfy the predicate will be
* passed to the entity. This is done to avoid unnecessary context switches.
*
* @param src the src
* @param p the p
* Sets an entity's state to be waiting. The predicate used to wait for an
* event is now passed to Sim_system. Only events that satisfy the predicate
* will be passed to the entity. This is done to avoid unnecessary context
* switches.
*
* @param src
* the src
* @param p
* the p
*/
public
static
void
wait
(
int
src
,
Predicate
p
)
{
entities
.
get
(
src
).
setState
(
SimEntity
.
WAITING
);
...
...
@@ -606,11 +642,14 @@ public class CloudSim {
}
/**
* Checks if events for a specific entity are present in the deferred event queue.
*
* @param d the d
* @param p the p
*
* Checks if events for a specific entity are present in the deferred event
* queue.
*
* @param d
* the d
* @param p
* the p
*
* @return the int
*/
public
static
int
waiting
(
int
d
,
Predicate
p
)
{
...
...
@@ -628,10 +667,12 @@ public class CloudSim {
/**
* Selects an event matching a predicate.
*
* @param src the src
* @param p the p
*
*
* @param src
* the src
* @param p
* the p
*
* @return the sim event
*/
public
static
SimEvent
select
(
int
src
,
Predicate
p
)
{
...
...
@@ -649,9 +690,11 @@ public class CloudSim {
/**
* Find first deferred event matching a predicate.
*
* @param src the src
* @param p the p
*
* @param src
* the src
* @param p
* the p
* @return the sim event
*/
public
static
SimEvent
findFirstDeferred
(
int
src
,
Predicate
p
)
{
...
...
@@ -668,10 +711,12 @@ public class CloudSim {
/**
* Removes an event from the event queue.
*
* @param src the src
* @param p the p
*
*
* @param src
* the src
* @param p
* the p
*
* @return the sim event
*/
public
static
SimEvent
cancel
(
int
src
,
Predicate
p
)
{
...
...
@@ -689,12 +734,15 @@ public class CloudSim {
}
/**
* Removes all events that match a given predicate from the future event queue
* returns true if at least one event has been cancelled; false otherwise.
*
* @param src the src
* @param p the p
*
* Removes all events that match a given predicate from the future event
* queue returns true if at least one event has been cancelled; false
* otherwise.
*
* @param src
* the src
* @param p
* the p
*
* @return true, if successful
*/
public
static
boolean
cancelAll
(
int
src
,
Predicate
p
)
{
...
...
@@ -716,8 +764,9 @@ public class CloudSim {
/**
* Processes an event.
*
* @param e the e
*
* @param e
* the e
*/
private
static
void
processEvent
(
SimEvent
e
)
{
int
dest
,
src
;
...
...
@@ -730,50 +779,49 @@ public class CloudSim {
// Ok now process it
switch
(
e
.
getType
())
{
case
SimEvent
.
ENULL
:
throw
new
IllegalArgumentException
(
"Event has a null type."
);
case
SimEvent
.
CREATE
:
SimEntity
newe
=
(
SimEntity
)
e
.
getData
();
addEntityDynamically
(
newe
);
break
;
case
SimEvent
.
SEND
:
// Check for matching wait
dest
=
e
.
getDestination
();
if
(
dest
<
0
)
{
throw
new
IllegalArgumentException
(
"Attempt to send to a null entity detected."
);
}
else
{
int
tag
=
e
.
getTag
();
dest_ent
=
entities
.
get
(
dest
);
if
(
dest_ent
.
getState
()
==
SimEntity
.
WAITING
)
{
Integer
destObj
=
Integer
.
valueOf
(
dest
);
Predicate
p
=
waitPredicates
.
get
(
destObj
);
if
((
p
==
null
)
||
(
tag
==
9999
)
||
(
p
.
match
(
e
)))
{
dest_ent
.
setEventBuffer
((
SimEvent
)
e
.
clone
());
dest_ent
.
setState
(
SimEntity
.
RUNNABLE
);
waitPredicates
.
remove
(
destObj
);
}
else
{
deferred
.
addEvent
(
e
);
}
case
SimEvent
.
ENULL
:
throw
new
IllegalArgumentException
(
"Event has a null type."
);
case
SimEvent
.
CREATE
:
SimEntity
newe
=
(
SimEntity
)
e
.
getData
();
addEntityDynamically
(
newe
);
break
;
case
SimEvent
.
SEND
:
// Check for matching wait
dest
=
e
.
getDestination
();
if
(
dest
<
0
)
{
throw
new
IllegalArgumentException
(
"Attempt to send to a null entity detected."
);
}
else
{
int
tag
=
e
.
getTag
();
dest_ent
=
entities
.
get
(
dest
);
if
(
dest_ent
.
getState
()
==
SimEntity
.
WAITING
)
{
Integer
destObj
=
Integer
.
valueOf
(
dest
);
Predicate
p
=
waitPredicates
.
get
(
destObj
);
if
((
p
==
null
)
||
(
tag
==
9999
)
||
(
p
.
match
(
e
)))
{
dest_ent
.
setEventBuffer
((
SimEvent
)
e
.
clone
());
dest_ent
.
setState
(
SimEntity
.
RUNNABLE
);
waitPredicates
.
remove
(
destObj
);
}
else
{
deferred
.
addEvent
(
e
);
}
}
break
;
case
SimEvent
.
HOLD_DONE
:
src
=
e
.
getSource
();
if
(
src
<
0
)
{
throw
new
IllegalArgumentException
(
"Null entity holding."
);
}
else
{
entities
.
get
(
src
).
setState
(
SimEntity
.
RUNNABLE
);
deferred
.
addEvent
(
e
);
}
break
;
}
break
;
case
SimEvent
.
HOLD_DONE
:
src
=
e
.
getSource
();
if
(
src
<
0
)
{
throw
new
IllegalArgumentException
(
"Null entity holding."
);
}
else
{
entities
.
get
(
src
).
setState
(
SimEntity
.
RUNNABLE
);
}
break
;
default
:
break
;
default
:
break
;
}
}
...
...
@@ -794,19 +842,17 @@ public class CloudSim {
/**
* Check if the simulation is still running. This method should be used by
* entities to check if they should continue executing.
*
* @return if the simulation is still running,
* otherwise
*
* @return if the simulation is still running, otherwise
*/
public
static
boolean
running
()
{
return
running
;
}
}
/**
* This method is called if one wants to pause the simulation.
*
* @return true, if successful
* otherwise.
*
* @return true, if successful otherwise.
*/
public
static
boolean
pauseSimulation
()
{
paused
=
true
;
...
...
@@ -816,10 +862,10 @@ public class CloudSim {
/**
* This method is called if one wants to pause the simulation at a given
* time.
*
* @param time
the time at which the simulation has to be paused
*
@return true, if successful
* otherwise.
*
* @param time
*
the time at which the simulation has to be paused
*
@return true, if successful
otherwise.
*/
public
static
boolean
pauseSimulation
(
long
time
)
{
if
(
time
<=
clock
)
{
...
...
@@ -833,9 +879,8 @@ public class CloudSim {
/**
* This method is called if one wants to resume the simulation that has
* previously been paused.
*
* @return if the simulation has been restarted or or
* otherwise.
*
* @return if the simulation has been restarted or or otherwise.
*/
public
static
boolean
resumeSimulation
()
{
paused
=
false
;
...
...
@@ -845,12 +890,12 @@ public class CloudSim {
}
return
!
paused
;
}
}
/**
* Start the simulation running. This should be called after all the
* entities have been setup and added, and their ports linked.
*
*
* @return the double last clock value
*/
public
static
double
run
()
{
...
...
@@ -861,15 +906,17 @@ public class CloudSim {
if
(
runClockTick
()
||
abruptTerminate
)
{
break
;
}
//this block allows termination of simulation at a specific time
//
this block allows termination of simulation at a specific time
if
(
terminateAt
>
0.0
&&
clock
>=
terminateAt
)
{
terminateSimulation
();
clock
=
terminateAt
;
break
;
}
if
(
pauseAt
!=
-
1
&&
((
future
.
size
()
>
0
&&
clock
<=
pauseAt
&&
pauseAt
<=
future
.
iterator
().
next
().
eventTime
())
||
future
.
size
()
==
0
&&
pauseAt
<=
clock
))
{
if
(
pauseAt
!=
-
1
&&
((
future
.
size
()
>
0
&&
clock
<=
pauseAt
&&
pauseAt
<=
future
.
iterator
().
next
()
.
eventTime
())
||
future
.
size
()
==
0
&&
pauseAt
<=
clock
))
{
pauseSimulation
();
clock
=
pauseAt
;
}
...
...
@@ -933,8 +980,9 @@ public class CloudSim {
/**
* Prints a message about the progress of the simulation.
*
* @param message the message
*
* @param message
* the message
*/
private
static
void
printMessage
(
String
message
)
{
Log
.
printLine
(
message
);
...
...
@@ -942,7 +990,7 @@ public class CloudSim {
/**
* Checks if is paused.
*
*
* @return true, if is paused
*/
public
static
boolean
isPaused
()
{
...
...
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