A platform to simulate cloud enviornment using simpy as simulation engine
To learn more about usage please see example.py
you can clone the repository and run exmple using following
git clone [email protected]:cloudsim-py/cloudsim.git
pip install simpy
python example.py
Cloudsi-py has the following entitiy to build your cloud enviornment
A Processing Element (PE) is a fundamental unit of computation within a computer system, executing instructions to perform operations on data. An individual host can have one or more PEs, collectively contributing to its processing capabilities.
Example of creating PE
mips = 1000 # MIPS (Million Instructions Per Second) rating of the computing resource
pe = PE(mips)
A host is a computing entity that provides resources, such as processing power, memory, storage, and bandwidth, within a computer system. It serves as a platform for running VM. A datacenter can have one or more hosts, each contributing to its computational capacity. A host can run multiple VM
Example of host properties:
pe_list = [] # List to store processing elements (PEs) in a host
ram = 2048 # Host memory capacity in megabytes (MB)
storage = 1000000 # Host storage capacity in megabytes (MB)
bw = 10000 # Host bandwidth capacity in megabits per second (Mbps)
Example for creating host:
pe_list = [Pe(1000),Pe(1000),Pe(1000)] # Assuming mips value is 1000
ram = 2048 # host memory (MB)
storage = 1000000 # host storage
bw = 10000
$host = Host(ram, bw, storage, pe_list)
A datacenter is a central facility that stores, manages, and processes data. It houses hosts with resources like processing power and storage.
Example of datcenter properties:
host_list = [], # List to store host machines in the datacenter
arch = "x86" # Architecture of the datacenter (e.g., x86)
os = "Linux" # Operating system of the datacenter (e.g., Linux)
vmm = "Xen" # Virtual machine monitor (e.g., Xen)
time_zone = 10.0 # Time zone of the datacenter
cost = 3.0 # Overall cost of the datacenter
cost_per_mem = 0.05 # Cost per unit of memory in the datacenter
cost_per_storage = 0.001 # Cost per unit of storage in the datacenter
cost_per_bw = 0.0 # Cost per unit of bandwidth in the datacenter
storage_list = [] # List to store storage devices in the datacenter
Example for creating datacenter:
def create_datacenter(name):
# 1. Create a list to store our machine
host_list = []
# 2. Create PEs and add these into a list.
pe_list = [Pe(1000),Pe(1000),Pe(1000)] # Assuming mips value is 1000
# 3. Create Host with its id and list of PEs and add them to the list of machines
ram = 2048 # host memory (MB)
storage = 1000000 # host storage
bw = 10000
host_list.append(
Host(
ram,
bw,
storage,
pe_list
)
) # This is our machine
# 5. Create a DatacenterCharacteristics object
arch = "x86"
os = "Linux"
vmm = "Xen"
time_zone = 10.0
cost = 3.0
cost_per_mem = 0.05
cost_per_storage = 0.001
cost_per_bw = 0.0
storage_list = deque() # we are not adding SAN devices by now
characteristics = DatacenterCharacteristics(
arch, os, vmm, host_list, time_zone, cost, cost_per_mem, cost_per_storage, cost_per_bw
)
# 6. Finally, create a Datacenter object.
datacenter = None
datacenter = Datacenter(name, characteristics, None, storage_list, 0)
return datacenter
Virtual Machine (VM) acts as a virtualized computing instance for running applications (cloudlets). It emulates the behavior of a physical machine, facilitating efficient resource allocation and management within the simulated cloud environment.
Example of VM properties:
mips = 250
size = 10000 # image size (MB)
ram = 1024 # vm memory (MB)
bw = 2000
pes_number = 1 # number of cpus
vmm = "Xen"
Example for creating vm:
broker_id = datacenter_instance.get_broker_id()
vmlist = []
# VM description
mips = 250
size = 10000 # image size (MB)
ram = 1024 # vm memory (MB)
bw = 2000
pes_number = 1 # number of cpus
vmm = "Xen" # VMM name
# create two VMs
vm1 = Vm(broker_id, mips, pes_number, ram, bw, size, vmm) # Replace None with the appropriate CloudletScheduler
vm2 = Vm(broker_id, mips * 2, pes_number*2, ram, bw, size, vmm) # Replace None with the appropriate CloudletScheduler
# add the VMs to the vmList
vmlist.append(vm1)
vmlist.append(vm2)
A cloudlet is akin to an application that runs on a virtual machine (VM). It represents a specific computing task or set of tasks offloaded to the cloud for execution.
Example of cloudlet properties:
length = 10 # Duration of the cloudlet's execution in simulation time units.
pes_number = 1 # Number of Processing Elements (PEs) required for the cloudlet.
file_size = 50 # Size of the input file associated with the cloudlet (e.g., in megabytes).
output_size = 50 # Size of the output file produced by the cloudlet (e.g., in megabytes).
Example for creating datacenter:
cloudlet1 = Cloudlet( length=10, pes_number=1, file_size=50, output_size=50)
cloudlet2 = Cloudlet( length=15, pes_number=2, file_size=100, output_size=100)
cloudlet3 = Cloudlet( length=8, pes_number=1, file_size=30, output_size=30)
simcloud-py provides following simulations / Feature
Example usage :
datacenter_instance.get_details()
Example output:
Datacenter name: MyDatacenter
Number of hosts: 1
Number of VMs: 2
Host ID: 0c05847d-d7b1-4685-875b-8297bd480830
RAM: 2048
BW: 10000
Storage: 1000000
PEs: 3)
VM ID: 4bcbc66d-4d22-4eda-8a1c-63e12399da58
MIPS: 250
PEs: 1
RAM: 1024
BW: 2000
Size: 10000
VMM: Xen
VM ID: 94244787-3503-4981-8ff6-8e8dd47d8693
MIPS: 500
PEs: 2
RAM: 1024
BW: 2000
Size: 10000
VMM: Xen
Example usage:
datacenter_instance.get_total_cost()
Example output:
Datacenter cost: 3.0
Memory cost: 102.4
Storage cost: 1000.0
Bandwidth cost: 0.0
Total cost: 1105.4
# Create a list of Cloudlets
cloudlet1 = Cloudlet(length=10, pes_number=1, file_size=50, output_size=50)
cloudlet2 = Cloudlet(length=15, pes_number=2, file_size=100, output_size=100)
cloudlet3 = Cloudlet(length=8, pes_number=1, file_size=30, output_size=30)
cloudlet_list = [cloudlet1, cloudlet2, cloudlet3]
# Execute the Cloudlets in the datacenter
cloudlet_execution = CloudletExecution(cloudlet_list, datacenter_instance)
cloudlet_execution.execute()
Example output:
Cloudlet 39e06124-919f-41b5-956a-d028033ebb8f starts execution on VM 10078ab6-c844-4e4a-beab-cffd823b16eb at 0
Cloudlet ba8da363-5a1d-42a6-9fe7-bef2fa58bac7 starts execution on VM 348469dd-f98a-47e5-9892-bf5c460573a1 at 0
Cloudlet 39e06124-919f-41b5-956a-d028033ebb8f completes execution on VM 10078ab6-c844-4e4a-beab-cffd823b16eb at 10
Cloudlet 4eff8fdd-b3e8-4cd2-ab3c-44cfa8b1b4ac starts execution on VM 10078ab6-c844-4e4a-beab-cffd823b16eb at 10
Cloudlet ba8da363-5a1d-42a6-9fe7-bef2fa58bac7 completes execution on VM 348469dd-f98a-47e5-9892-bf5c460573a1 at 15
Cloudlet 4eff8fdd-b3e8-4cd2-ab3c-44cfa8b1b4ac completes execution on VM 10078ab6-c844-4e4a-beab-cffd823b16eb at 18