A simulation library based on Cloudsim that aims to offer many methods to automate replication of various simulation scenarios.
I faced alot of difficulties during my masters studies and alot of time was consumed by the process of re-implementating the research papers' algorithm/s instead of focusing on the actual improvments that could be done on any algorithm. Therefore, i created this tool to help me replicate all of those various experimentation scenarios with few lines of code as possible and as scalable and flexible as i can make them.
- Simplify process of creating, modifying and deleting cloudsim entities.
- Create random attributes and automate enitity instantiation.
- Control the distribution of created cloudlets over brokers, such as: Even or Random.
- Integrate scheduling algorithms and control cloudsim process easily.
- Packed with implementations of several famous cloud algorithms such as: Honey Bee and PSO.
- Display experiment outcomes in form of tables, charts and log files.
Help me expand base of implemented cloud algorithms
Create a ReCloud
instance to start configuring experiment fields, then launch instance through Recloud.launch()
:
// Create a ReCloud instance.
ReCloud recloud = new ReCloud();
// Create a datacenters/server.
recloud.servers().newServer().make();
// Create a host.
recloud.servers().newHost().make();
// Create a broker.
recloud.jobs().newBroker().make();
// Create a virtual machine.
recloud.jobs().newVm().make();
// Create a cloudlet (Task).
recloud.jobs().newTask().make();
// Add wanted simulations to experiment.
recloud.experiment().newSimulations(new CloudsimSimulation());
// Add goal for number of cloudlets created.
recloud.experiment().taskTargets(100);
// Launch.
ReCloud.launch(recloud);
Configure each cloud entity separatly and run multiple scheduling algorithms with the same setup environment:
// Create a ReCloud instance.
ReCloud recloud = new ReCloud();
// Create and configure datacenters/server.
recloud.servers().newServer().name("Server").environment("x86", "Linux", "Xen").timeZone(10.0)
.secCost(3.0).memCost(0.05).storageCost(0.001).bwCost(0.0).intervals(0).clones(1).make();
// Create and configure host.
recloud.servers().newHost().on("Server").mips(177730).pes(6).ram(16000).bw(15000)
.storage(4000000).clones(2).make();
// Create and configure broker.
recloud.jobs().newBroker().name("koala").make();
// Create and configure virtual machine.
recloud.jobs().newVm().mips(9726).pes(1).ram2(9).bw(1000).image(10000).vmm("Xen").clones(5).make();
// Create and configure a cloudlet (Task).
recloud.jobs().newTask().randomStyle(RandomStyle.Fixed_Pace).length(10000, 20000).pes(1)
.filesize(1).outpusize(1).make();
// Add wanted simulations to experiment.
recloud.experiment().newSimulations(
new CloudsimSimulation(),
new Bullet_CS(GunType.Magnum),
new SJF_CS(),
new HoneyBee_CS(0.1)
);
// Add goal for number of cloudlets created.
recloud.experiment().taskTargets(100);
// Launch.
ReCloud.launch(recloud);
The difficulty of more complex examples rise with the experiment parameters, say we need the following setup:
[01] 2 servers |
server_1
&server_2
.
[02] 2 hosts |host_1
onserver_1
&server_2
|host_2
onserver_1
.
[03] 1 host |host_3
onserver_2
.
[04] 2 brokers |koala 1
&koala 2
.
[05] 2 virtual machines |vm_1
onkoala_1
|vm_2
onkoala_1
&koala_2
with3
identical clones.
[06] 1 virtual machine |vm_3
onkoala_2
.
[07] 1 fixed task-type* cloudlets.
[08] 1 random task-type* cloudlets onkoala_2
.task-types*: are cloudlets templates that will generate cloudsim cloudlets/tasks in runtime according to their setup.
And with this setup we need to configure the experiment as following:
[09] Create cloudlets and ditribute them over brokers
randomly
. [10] TestCloudsimSimulation
,Bullet_Magnum
andParticle Swarm Optimization algorithms
. [11] Experiment with100, 200, 300
tasks.
// Create a ReCloud instance.
ReCloud recloud = new ReCloud();
// [01]
recloud.servers().newServer().name("server_1").make();
recloud.servers().newServer().name("server_2").make();
// [02]
recloud.servers().newHost().on("server_1", "server_2").make();
recloud.servers().newHost().on("server_1").make();
// [03]
recloud.servers().newHost().on("server_2").make();
// [04]
recloud.jobs().newBroker().name("koala_1").make();
recloud.jobs().newBroker().name("koala_2").make();
// [05]
recloud.jobs().newVm().on("koala_1").make();
recloud.jobs().newVm().on("koala_1").clones(3).make();
// [06]
recloud.jobs().newVm().on("koala_2").make();
// [07]
recloud.jobs().newTask().length(10000).pes(1).filesize(1).outpusize(1).make();
// [08]
recloud.jobs().newTask().on("koala_2").length(10000, 20000).pes(1).filesize(1).outpusize(1).make();
// [09]
recloud.jobs().taskSplit(TasksSplit.Random);
// [10]
recloud.experiment().newSimulations(
new CloudsimSimulation(),
new Bullet_CS(GunType.Magnum),
new PSO_CS(100, 1000, 0.1, 0.9, 1.49445, 1.49445, 5, Inertia.LDIW_1, Position.Sigmoid)
);
// [11]
recloud.experiment().taskTargets(100, 200, 300);
// Launch.
ReCloud.launch(recloud);