Grid Simulation
Grid Simulation
This chapter presents the design and implementation of GridSim, a toolkit for modelling and simulation of
resources and application scheduling in large-scale parallel and distributed computing environments. The
requirements for simulating complex systems are identified. We discuss various mechanisms used by
GridSim to support the simulation of Grid entities—resources, users, application tasks, and
schedulers/brokers—and their characteristics using discrete events. GridSim supports the creation of
repeatable and controllable Grid environments for quicker performance evaluation of scheduling strategies
under different scenarios such as varying number of resources and users with different requirements. A
recipe for developing application scheduling simulators using the GridSim toolkit is presented at the end.
5.1 Introduction
In order to demonstrate the effectiveness of resource brokers and associated scheduling algorithms, their
performance needs to be evaluated under different scenarios such as varying the number of resources and
users with different requirements. In a real Grid environment, it is hard and perhaps even impossible to
perform scheduler performance evaluation in a repeatable and controllable manner for different
scenarios—the availability of resources and their load continuously varies with time and it is impossible for
an individual user/domain to control activities of other users in different administrative domains.
The designers of resource management and scheduling systems and algorithms for large-scale
distributed computing systems need a simple framework for deterministic modeling and simulation of
resources and applications to evaluate their design strategies and algorithms. When access to ready-to-use
testbed infrastructure is not available, building it is expensive and time consuming. Also, even if the testbed
is available, it is limited to a few resources and domains; and testing scheduling algorithms for scalability
and adaptability, and evaluating scheduler performance for various applications and resource scenarios is
harder to trace and resource intensive. Researchers and educators in Grid computing have also recognized
the importance and the need for such a toolkit for modeling and simulation environments [61]. We have
developed a Java-based discrete-event Grid simulation toolkit called GridSim. The toolkit supports
modeling and simulation of heterogeneous Grid resources (both time- and space-shared), users and
application models. It provides primitives for creation of application tasks, mapping of tasks to resources,
and their management. To demonstrate suitability of the GridSim toolkit, we have simulated a Nimrod-G
like Grid resource broker and evaluated the performance of deadline and budget constrained cost- and time-
minimization scheduling algorithms.
Our interest in building a simulation environment arose from the need for performing a detailed
evaluation of deadline and budget constraint scheduling algorithms implemented within the Nimrod-G
broker [100]. We performed many experiments using the Nimrod-G broker for scheduling task farming
applications on the WWG (World-Wide Grid) [111] testbed resources with small configuration (like 2
hours deadline and 10 machines for a single user). The ability to experiment with a large number of Grid
scenarios was limited by the number of resources that were available in the WWG testbed. Also, it was
impossible to perform repeatable evaluation of scheduling strategies as the availability, allocation, and
usage of resources changed with time. Also conducting performance evaluation on a real Grid tested for a
81
number of different scenarios is resource intensive and time consuming task, which can be drastically
minimized by using discrete event simulation techniques.
The GridSim toolkit supports modeling and simulation of a wide range of heterogeneous resources, such
as single or multiprocessors, shared and distributed memory machines such as PCs, workstations, SMPs,
and clusters managed by time or space-shared schedulers. That means, GridSim can be used for modeling
and simulation of application scheduling on various classes of parallel and distributed computing systems
such as clusters, Grids, and P2P networks. The resources in clusters are located in a single administrative
domain and managed by a single entity whereas, in Grid and P2P systems, resources are geographically
distributed across multiple administrative domains with their own management policies and goals. Another
key difference between cluster and Grid/P2P systems arises from the way application scheduling is
performed. The schedulers in cluster systems focus on enhancing overall system performance and utility, as
they are responsible for the whole system. Whereas, schedulers in Grid/P2P systems called resource
brokers, focus on enhancing performance of a specific application in such a way that its end-users
requirements are met.
The rest of this chapter is organized as follows. Section 5.2 discusses related work with highlights on
unique features that distinguish our toolkit from other packages. The GridSim architecture and internal
components that make up GridSim simulations are discussed in Section 5.3. Section 5.4, discusses how to
build GridSim based scheduling simulations. The final section summarizes the chapter along with
comments on adoption and usage of the GridSim toolkit.
82
supported in simulation. Hence, our GridSim toolkit extends the ideas in existing systems and overcomes
their limitations accordingly.
Finally, we have chosen to implement GridSim in Java by leveraging SimJava’s [29] basic discrete
event simulation infrastructure. This feature is likely to appeal to educators and students since Java has
emerged as a popular programming language for network computing.
83
services offered by the lower-level infrastructure. The fourth layer is concerned with the simulation of
resource aggregators called Grid resource brokers or schedulers. The final layer focuses on application and
resource modeling with different scenarios using the services provided by the two lower-level layers for
evaluating scheduling and resource management policies, heuristics, and algorithms. In this section, we
briefly discuss SimJava model for discrete events (a second-layer component) and focus mainly on the
GridSim (the third-layer) design and implementation. The resource broker simulation and performance
evaluation is highlighted in the next two sections.
GridSim Toolkit
Resource Modeling and Simulation (with Time and Space shared schedulers)
Single CPU SMPs Clusters Load Pattern Network Reservation
84
accordingly, and restarts entities as appropriate. This continues until no more events are generated. If the
Java virtual machine supports native threads, then all entities starting at exactly the same simulation time
may run concurrently.
Sh ig ger
ut na #i
do l
S
M
wn
an
a
User #i Broker #i Output Output Resource #j
Scheduler
Appli Job Out Queue
Process
Jobs
cation Internet Job In Queue Queue
Input Input
Input
Output de cs
#i
or ti
R rite
ec tis
r
W
ep r
R Sta
Resource
or #i
t
List
Information
Service
Figure 5.2: A flow diagram in GridSim based simulations.
A simulation environment needs to abstract all the entities and their time dependent interactions in the
real system. It needs to support the creation of user-defined time dependent response functions for the
interacting entities. The response function can be a function of the past, current, or both states of entities.
GridSim based simulations contain entities for the users, brokers, resources, information service, statistics,
and network based I/O as shown in Figure 5.2. The design and implementation issues of these GridSim
entities are discussed below:
User – Each instance of the User entity represents a Grid user. Each user may differ from the rest of the
users with respect to the following characteristics:
• Types of job created e.g., job execution time, number of parametric replications, etc.,
• Scheduling optimization strategy e.g., minimization of cost, time, or both,
• Activity rate e.g., how often it creates new job,
• Time zone, and
• Absolute deadline and budget, or
85
• D-and B-factors, deadline and budget relaxation parameters, measured in the range [0,1] express
deadline and budget affordability of the user relative to the application processing requirements
and available resources.
Broker – Each user is connected to an instance of the Broker entity. Every job of a user is first submitted to
its broker and the broker then schedules the parametric tasks according to the user’s scheduling policy.
Before scheduling the tasks, the broker dynamically gets a list of available resources from the global
directory entity. Every broker tries to optimize the policy of its user and therefore, brokers are expected
to face extreme competition while gaining access to resources. The scheduling algorithms used by the
brokers must be highly adaptable to the market’s supply and demand situation.
Resource – Each instance of the Resource entity represents a Grid resource. Each resource may differ from
the rest of resources with respect to the following characteristics:
• Number of processors;
• Cost of processing;
• Speed of processing;
• Internal process scheduling policy e.g., time shared or space shared;
• Local load factor; and
• Time zone.
The resource speed and the job execution time can be defined in terms of the ratings of standard
benchmarks such as MIPS and SPEC. They can also be defined with respect to the standard machine.
Upon obtaining the resource contact details from the Grid information service, brokers can query
resources directly for their static and dynamic properties.
Grid Information Service – It provides resource registration services and maintains a list of resources
available in the Grid. This service can be used by brokers to discover resource contact, configuration,
and status information.
Input and Output –The flow of information among the GridSim entities happen via their Input and Output
entities. Every networked GridSim entity has I/O channels, which are used for establishing a link
between the entity and its own Input and Output entities. Note that the GridSim entity and its Input
and Output entities are threaded entities i.e., they have their own execution thread with body() method
that handle the events. The GridSim model for communication between entities is illustrated in Figure
5.3. The use of separate entities for input and output enables a networked entity to model full duplex
and multi-user parallel communications. The support for buffered input and output channels associated
with every GridSim entity provides a simple mechanism for an entity to communicate with other
entities and at the same time enables the modeling of a communication delay transparently.
86
EA EB
body()
body()
Send(output, data, EB) Receive(input, data, EA)
…
…
…
…
Input_EA Input_EB
body()
… body()
…
Output_EA Output_EB
body() body()
…
@ t2 )
… data
el iver
(D
data, t2
Timed Event Delivery
Figure 5.3: Entity communication model via its Input and Output entities.
87
Grid User1 User1 Grid Grid Resource Grid Information Grid Shutdown Grid Statistics Report
Entity Broker Entity Entity Service Entity Entity Entity Writer Entity
(Register Resource)
(Get Resource List)
(Submit
Expt.) (Get Resource Characteristics)
(Submit Gridlet1)
[Gridlet2
(Gridlet2 Finished) completion event]
(Done [Gridlet3
Expt.) (Gridlet3 Finished) completion event]
(Record My Statistics)
(I am Done)
(Get Resource
List)
(Terminate) [If all Users
The delivery of the most recently
are “Done”]
scheduled internal asynchronous (Terminate) (Create Report)
event to indicate the Gridlet
completion. (Get Stat)
Internal asynchronous event is (Synchronous Event)
(Done)
ignored since the arrival of
other events has changed the (Terminate)
(Asynchronous Event)
resource scenario.
Figure 5.4: An event diagram for interaction between a time-shared resource and other entities.
The GridSim entities (user, broker, resource, information service, statistics, shutdown, and report writer)
send events to other entities to signify the request for service, deliver results, or raise internal actions. Note
that GridSim implements core entities that simulate resource, information service, statistics, and shutdown
services. These services can be used to simulate users, brokers, and an optional report writer for creating
statistical reports at the end of a simulation. The event source and destination entities must agree upon the
protocols for service request and delivery. The protocols for interaction between the user-defined and core
entities are pre-defined.
When GridSim starts, the resource entities register themselves with the Grid Information Service (GIS)
entity, by sending events. This resource registration process is similar to GRIS (Grid Resource Information
Server) registering with GIIS (Grid Index Information Server) in Globus system. Depending on the user
entity’s request, the broker entity sends an event to the GIS entity, to signify a query for resource discovery.
The GIS entity returns a list of registered resources and their contact details. The broker entity sends events
to resources with request for resource configuration and properties. They respond with dynamic
information such as resources cost, capability, availability, load, and other configuration parameters. These
events involving the GIS entity are synchronous in nature.
Depending on the resource selection and scheduling strategy, the broker entity places asynchronous
events for resource entities in order to dispatch Gridlets for execution—the broker need not wait for a
resource to complete the assigned work. When the Gridlet processing is finished, the resource entity
updates the Gridlet status and processing time and sends it back to the broker by raising an event to signify
its completion.
The GridSim resources use internal events to simulate resource behavior and resource allocation. The
entity needs to be modeled in such a way that it is able to receive all events meant for it. However, it is up
to the entity to decide on the associated actions. For example, in time-shared resource simulations (see
Figure 5.4) internal events are scheduled to signify the completion time of a Gridlet, which has the smallest
remaining processing time requirement. Meanwhile, if an external event arrives, it changes the share
resource availability for each Gridlet. That means the most recently scheduled event may not necessarily
signify the completion of a Gridlet. The resource entity can discard such internal events without processing.
The use of internal events for simulating resources is discussed in detail in Section 5.3.7.
88
Grid User1 User1 Grid Grid Resource Grid Information Grid Shutdown Grid Statistics Report
Entity Broker Entity Entity Service Entity Entity Entity Writer Entity
(Register Resource)
(Get Resource List)
(Submit
Expt.) (Get Resource Characteristics)
(Submit Gridlet1)
[Gridlet1 completion
event]
(Submit Gridlet2)
(Submit Gridlet3)
(Gridlet1 Finished)
[Gridlet2
completion event]
(Gridlet2 Finished)
[Gridlet3
(Done completion event]
Expt.)
(Gridlet3 Finished)
(Record My Statistics)
(I am Done)
(Get Resource
List)
(Terminate) [If all Users
are “Done”]
(Terminate) (Create Report)
Internal Asynchronous Event: (Get Stat)
scheduled and delivered to (Synchronous Event)
indicate the completion of (Done)
Gridlet.
(Asynchronous Event) (Terminate)
Figure 5.5: An event diagram for interaction between a space-shared resource and other entities.
89
Simulation of Scheduling in Time-Shared Resources
The GridSim resource simulator uses internal events to simulate the execution and allocation of PEs share
to Gridlet jobs. When jobs arrive, time-shared systems start their execution immediately and share
resources among all jobs. Whenever a new Gridlet job arrives, we update the processing time of existing
Gridlets and then add this newly arrived job to the execution set. We schedule an internal event to be
delivered at the earliest completion time of smallest job in the execution set. It then waits for the arrival of
events.
A complete algorithm for simulation of time-share scheduling and execution is shown in Figure 5.6. If a
newly arrived event happens to be an internal event whose tag number is the same as the most recently
scheduled event, then it is recognized as a job completion event. Depending on the number of Gridlets in
execution and the number of PEs in a resource, GridSim allocates appropriate amount of PE share to all
Gridlets for the event duration using the algorithm shown in Figure 5.7. It should be noted that Gridlets
sharing the same PE would get an equal amount of PE share. The completed Gridlet is sent back to its
originator (broker or user) and removed from the execution set. GridSim schedules a new internal event to
be delivered at the forecasted earliest completion time of the remaining Gridlets.
90
schematic representation of Gridlets arrival, internal events delivery, and sending them back to the broker is
shown in Figure 5.4. The comparison between the arrival, execution start, execution finish, and elapsed
time of Gridlets when deployed on time and space shared resources is shown in Table 5.1.
Algorithm: PE_Share_Allocation(Duration)
1. Identify total MI per PE for the duration and the number of PE that process one extra Gridlet
TotalMIperPE = MIPSRatingOfOnePE()*Duration
MinNoOfGridletsPerPE = NoOfGridletsInExec / NoOfPEs
NoOfPEsRunningOneExtraGridlet = NoOfGridletsInExec % NoOfPEs
2. Identify maximum and minimum MI share that Gridlet get in the Duration
If(NoOfGridletsInExec <= NoOfPEs), then:
MaxSharePerGridlet = MinSharePerGridlet = TotalMIperPE
MaxShareNoOfGridlets = NoOfGridletsInExec
Else /* NoOfGridletsInExec > NoOfPEs */
MaxSharePerGridlet = TotalMIperPE/ MinNoOfGridletsPerPE
MinSharePerGridlet = TotalMIperPE/(MinNoOfGridletsPerPE+1)
MaxShareNoOfGridlets = (NoOfPEs - NoOfPEsRunningOneExtraGridlet)* MinNoOfGridletsPerPE
Tasks on
PEs/CPUs P1-G1 P1-G2 P3-G2 P2-G3 P2-G2 P1-G3
G3
PE2 G2 G3
G2
PE1 G1 G2
2 6 9 12 16 19 22 26
Time
G1 G2 G3 G1F G2F G3F
G2 Gridlet2 (8.5 MIPS) P1-G2: Gridlet2 didn’t finish at the 1st prediction time.
G3 Gridlet3 (9.5 MIPS) P2-G2: Gridlet2 finishes at the 2nd prediction time.
Figure 5.8: Modeling time-shared multitasking and multiprocessing based on an event scheme.
91
Table 5.1: A scheduling statistics scenario for time- and space-shared resources in GridSim.
Time-Shared Resource Space-Shared Resource
Arrival Start Finish Elapsed Start Finish Elapsed
Grilets Length Time Time Time Time Time Time Time
Number (MI)
(a) (s) (f) (f-a) (s) (f) (f-a)
G1 10 0 0 10 10 0 10 10
G2 8.5 4 4 14 10 4 12.5 8.5
G3 9.5 7 7 18 11 10 19.5 12.5
92
Algorithm: Allocate_PE_to_the_Gridlet(Gridlet gl)
1. Identify a suitable Machine with Free PE
2. Identify a suitable PE in the machine and Assign to the Gridlet
3. Set Status of the Allocated PE to BUSY
4. Determine the Completion Time of Gridlet and Set an internal event to be delivered at the
completion time
Figure 5.11 illustrates the simulation of space-share scheduling algorithm and Gridlets’ execution. When
Gridlet1 arrives at time 0, it is mapped to PE1 and an internal event to be delivered at the time 10 is
scheduled since the predicted completion time is still 10. At time 4, Gridlet2 arrives and it is mapped to the
PE2. The completion time of Gridlet2 is predicted as 12.5 and the completion time of Gridlet1 is still 10
since both of them are executing on different PEs. A new internal event to be delivered at time 12.5 is
scheduled to signify the completion of Gridlet2. At time 7, Gridlet3 arrives. Since there is no free PE
available on the resource, it is put into the queue. The simulation continues i.e., GridSim resource waits for
the arrival of a new event. At time 10 a new event is delivered which happens to signify the completion of
Gridlet1, which is then sent back to the broker. It then checks to see if there are any Gridlets waiting in the
queue and chooses a suitable Gridlet (in this case as Gridlet2 is based on FCFS policy) and assign the
available PE to it. An internal event to be delivered at time 19.5 is scheduled to indicate the completion
time of Gridlet3 and then waits for the arrival of new events. A new event is delivered at the simulation
time 12.5, which signifies the completion of the Gridlet2, which is then sent back to the broker. There is no
Gridlet waiting in the queue, so it proceeds without scheduling any events and waits for the arrival of the
next event. A new internal event arrives at the simulation time 19.5, which signifies the completion of
Gridlet3. This process continues until resources receive an external event indicating the termination of
simulation. A schematic representation of Gridlets arrival, internal events delivery, and sending them back
to the broker is shown in Figure 5.5.
Tasks on
PEs/CPUs P1-G1 P1-G2 P1-G3
PE2 G2 G3
PE1 G1 G3
2 6 9 12 16 19 22 26
Time
G1 G2 G3 G1F G2F G3F
93
For every Grid resource, the non-Grid (local) workload is estimated based on typically observed load
conditions depending on the time zone of the resource. The network communication speed between a user
and the resources is defined in terms of a data transfer speed (baud rate).
94
Figure 5.12: A class hierarchy diagram of GridSim package.
95
class gridsim.MachineList – An instance of this class simulates a collection of machines. It is up
to the GridSim users to define the connectivity among the machines in a collection. Therefore, this
class can be instantiated to model simple LAN to cluster to WAN.
class gridsim.ResourceCharacteristics –It represents static properties of a resource such as
resource architecture, OS, management policy (time or space shared), cost, and time zone at which the
resource is located along resource configuration.
class gridsim.GridResource – It extends the GridSim class and gains communication and
concurrent entity capability. An instance of this class simulates a resource with properties defined in an
object of the gridsim.ResourceCharacteristics class. The process of creating a Grid
resource is as follows: first create PE objects with a suitable MIPS/SPEC rating, second assemble
them together to create a machine. Finally, group one or more objects of the Machine to form a
resource. A resource having a single machine with one or more PEs is managed as a time-shared
system using round robin scheduling algorithm. A resource with multiple machines is treated as a
distributed memory cluster and is managed as a space-shared system using first-come first served
scheduling policy or its variants.
class gridsim.GridSimStandardPE – It defines MIPS rating for a standard PE or enables the
users to define their own MIPS/SPEC rating for a standard PE. This value can be used for creating PEs
with relative MIPS/SPEC rating for GridSim resources and creating Gridlets with relative processing
requirements.
class gridsim.ResourceCalendar – This class implements a mechanism to support modeling
local load on Grid resources that may vary according to the time zone, time, weekends, and holidays.
class gridsim.GridInformationService – A GridSim entity that provides Grid resource
registration, indexing and discovery services. The Grid resources register their readiness to process
Gridlets by registering themselves with this entity. GridSim entities such as the resource broker can
contact this entity for resource discovery service, which returns a list of registered resource entities and
their contact address. For example, scheduling entities use this service for resource discovery.
class gridsim.Gridlet – This class acts as job package that contains job length in MI, the length of
input and out data in bytes, execution start and end time, and the originator of job. Individual users
model their application by creating Gridlets for processing them on Grid resources assigned by
scheduling entities (resource brokers).
class gridsim.GridletList – It can be used to maintain a list of Gridlets and supports methods
for organizing them.
class gridsim.GridSimTags – It contains various static command tags that indicate a type of
action that needs to be undertaken by GridSim entities when they receive events. The different types of
tags supported in GridSim along with comments indicating possible purpose are shown in Figure 5.13.
96
class gridsim.ResGridlet – It represents a Gridlet submitted to the resource for processing. It
contains Gridlet object along with its arrival time and the ID of machine and PE allocated to it. It acts
as a placeholder for maintaining the amount of resource share allocated at various times for simulating
time-shared scheduling using internal events.
class gridsim.GridStatistics – This is a GridSim entity that records statistical data reported by
other entities. It stores data objects with their label and timestamp. At the end of simulation, the user-
defined report-writer entity can query recorded statistics of interest for report generation.
class gridsim.Accumulator – The objects of this class provide a placeholder for maintaining
statistical values of a series of data added to it. It can be queried for mean, sum, standard deviation, and
the largest and smallest values in the data series.
class gridsim.GridSimShutdown – This is a GridSim entity that waits for termination of all User
entities to determine the end of simulation. It then signals the user-defined report-writer entity to
interact with GridStatistics entity to generate report. Finally, it signals the end of simulation to other
GridSim core entities.
class gridsim.GridSimRandom – This class provides static methods for incorporating randomness
in data used for any simulation. Any predicted/estimated data, e.g., number of Gridlets used by an
experiment, execution time and output size of a Gridlet etc., need to be mapped to real-world data by
introducing randomness to reflect the uncertainty that is present in the prediction/estimation process
and the randomness that exists in the nature itself. The execution time of a Gridlet on a particular
resource, for example, can vary depending on the local load, which is not covered by the scope of
GridSim to simulate.
The real(d, fL, fM) method of this class maps the predicted/estimated value d to a random real-world
value between (1- fL)×d to (1+ fM)×d, using the formula d×(1 - fL + (fL + fM)×rd) where 0.0 ≤ fL, fM ≤
1.0 and rd is a uniformly distributed double value between 0.0 and 1.0. This class also maintains
different values of fL and fM factors for different situations to represent different level of uncertainty
involved.
97
public static void CreateSampleGridEnvironement(int no_of_users, int no_of_resources,
double B_factor, double D_factor, int policy, double how_long, double seed) {
Calendar now = Calendar.getInstance();
// Create Report Writer Entity and category indicates types of information to be recorded.
new ReportWriter(ReportWriterName, no_of_users, no_of_resources, ReportFile, category,
report_on_next_row_flag);
// Create Resources
for(int i=0; i<no_of_resources; i++) {
// Create PEs
PEList peList = new PEList();
for(int j=0; j<(i*1+1); j++)
peList.add(new PE(0, 100));
Figure 5.14: A sample code segment for creating Grid resource and user entities in GridSim.
• Second, we need to model applications by creating a number of Gridlets (that appear similar to
Nimrod-G jobs) and define all parameters associated with jobs as shown in Figure 5.15. The
Gridlets need to be grouped together depending on the application model.
98
class Broker extends GridSim {
private Experiment experiment;
private LinkedList ResIDList;
private LinkedList BrokerResourceList;
... // Gridlet scheduling flow code at the Grid Resource Broker level
// Set Gridlets’ OwnerID as this BrokerID so that Resources knows where to return them.
for(int i=0; i<experiment.GetGridletList().size(); i++)
((Gridlet) experiment.GetGridletList().get(i)).SetUserID(get_id());
// RESOURCE DISCOVERY
ResIDList = (LinkedList) GetGridResourceList();
scheduled_count = ScheduleAdviser();
dispatched_count = Dispatcher();
received_count = Receiver();
Figure 5.16: A sample code segment for creating a Grid resource broker in GridSim.
99
We have used the GridSim toolkit to develop a Nimrod-G like economic Grid resource broker simulator
and evaluated the performance of a number of scheduling algorithms based on deadline and budget based
constraints (see the next chapter). The results are promising and demonstrate the suitability of GridSim for
developing simulators for scheduling in parallel and distributed systems. Furthermore, GridSim is gaining
rapid acceptance as a tool for simulation and performance evaluation of computational Grids and Grid
schedulers. It is in use at several academic institutions and commercial enterprises all over the world
including California Institute of Technology, University of Southern California, University of Illinois at
Urbana-Champaign, San Diego Supercomputing Centre, Carnegie Melon University, University of
Adelaide, Manchester University, CERN (European Organisation for Nuclear Research), University of
Paderborn, Hong Kong University, National University of Singapore, Sun Microsystems, C-DOT (Centre
for Development of Telematics), IBM (International Business Machines), Unisys, HP (Hewlett and
Packard), Compaq, British Telecom, and WorldCom.
Software Availability
The GridSim toolkit software with source code can be downloaded from the project website:
http://www.buyya.com/gridsim/
100