Introduction
Related work
Cloud computing simulators
Comparison of Simcan2Cloud and SoTA solutions
Main features | General aspects | Cloud provider | Users (workload) | DC | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tool | Year | Lang. | Avail. | Platform | GUI | Comm. model | Network topology | SLA | Cost | Rent ext. | Sched. policies | Waiting queue | API | Real traces | Traffic dist. | Prior users | HW usage | HW detail |
CloudSim | 2009 | Java | Open Source | SimJava | ✗ | Limited | Limited | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | ✗ |
NetworkCloudSim | 2009 | Java | Open Source | CloudSim | ✗ | Limited | Limited | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
CloudAnalyst | 2010 | Java | Open Source | CloudSim | \(\checkmark\) | Limited | Limited | Limited | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
iCanCloud | 2011 | C++ | Open Source | OMNeT++ | \(\checkmark\) | Limited | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | \(\checkmark\) |
DCSim | 2011 | Java | Open Source | - | ✗ | ✗ | ✗ | Limited | \(\checkmark\) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
GreenCloud | 2012 | C++ Otcl | Open Source | NS2 | Limited | Full | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ |
WokflowSim | 2012 | Java | Open Source | CloudSim | ✗ | Limited | Limited | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
CloudNetSim++ | 2014 | C++ | Open Source | OMNeT++ | \(\checkmark\) | Limited | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | ✗ | \(\checkmark\) | ✗* (VM) | \(\checkmark\) | ✗ |
CloudExp | 2014 | Java | N.A | CloudSim | \(\checkmark\) | Full | Limited | \(\checkmark\) | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
UCloud | 2014 | Java | Open Source | CloudSim | ✗ | Limited | Limited | ✗ | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
DISSECT-CF | 2014 | Java | Open Source | - | ✗ | Full | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) |
SCORE | 2018 | Scala | Open Source | Google Omega | ✗ | ✗ | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
SCORE-GAME | 2018 | Scala | Open Source | Google Omega | ✗ | ✗ | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
CDOSim | 2021 | Java | Open Source | CloudSim | \(\checkmark\) | Limited | Limited | \(\checkmark\) | \(\checkmark\) | ✗ | \(\checkmark\) | ✗ | ✗ | \(\checkmark\) | \(\checkmark\) | ✗ | ✗ | Limited |
Simcan2Cloud | 2022 | C++ | Open Source | OMNeT++ | \(\checkmark\) | Limited | Limited | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) |
Simcan2Cloud
Id | Code Metadata | Description |
---|---|---|
C1 | Current code version | 0.1 |
C2 | Permanent link to code/repository used for this code version | |
C3 | Legal Code Licence | GPL |
C4 | Code versioning system used | git |
C5 | Software code languages, tools, and services used | C++, OMNeT++, Java |
C6 | Compilation requirements, operating environments & dependencies | OMNeT++ 5.0, Java 8, TCL/TK 8.4, Bison, Flex, NetBeans 7 or above |
C7 | If available, link to developer manual/documentation | |
C8 | Support email for queries | pablo.cerro@uam.es |
Software description
Service level agreements
Type | Base (per hour) | Discount (% of the cost) | Inc-priority (% of the cost) | Offer (% of the cost) | Compensation (% of the cost) |
---|---|---|---|---|---|
\({SLA}_{1}\)
| 0.012 | 60 | 10 | 5 | 80 |
\({SLA}_{2}\)
| 0.012 | 20 | 50 | 30 | 10 |
\({SLA}_{3}\)
| 0.012 | 10 | 70 | 70 | 5 |
Architecture
API
Component | Id | Method | Description |
---|---|---|---|
UserGeneration | 1 | initialise | Initialises the user generation module. |
UserGeneration | 2 | generateShuffledUsers | Generates a users workload with a random order. |
UserGeneration | 3 | getNextUser | Obtains the next user to be processed. |
UserGeneration | 4 | sendRequest | Sends a VM request to the cloud provider. |
UserGeneration | 5 | subscribe | Sends a subscription request to the cloud provider. |
UserGeneration | 6 | createVmRequest | Creates a VM request for a specific user. |
UserGeneration | 7 | handleResponseVmAccept | Handles the accept response of the cloud provider to a specific VM request. |
UserGeneration | 8 | handleResponseVmReject | Handles the reject response of the cloud provider to a specific VM request. |
UserGeneration | 9 | updateVmUserStatus | Updates the status of a specific VM. |
UserGeneration | 10 | submitService | Submits a service to be executed in the cloud. |
UserGeneration | 11 | createAppRequest | Generates a request for the execution of an application. |
UserGeneration | 12 | handleResponseAppAccept | Handles an accept response sent by the cloud provider for the execution of a specific application. |
UserGeneration | 13 | handleResponseAppReject | Handles a reject response sent by the cloud provider for the execution of a specific application. |
UserGeneration | 14 | handleResponseAppTimeout | Handles a timeout response sent by the cloud provider for the execution of a specific application. |
UserGeneration | 15 | calculateStatistics | Generates a report with the statistics obtained during the simulation. |
CloudProvider | 16 | initialise | Initialises the cloud provider module. |
CloudProvider | 17 | checkVmUserFit | Checks whether the VMs requested by a user fits in a data-centre and sends the request to it. |
CloudProvider | 18 | updateSubsQueue | Updates the subscription queue. |
CloudProvider | 19 | notifySubscription | Notifies users that the system is ready to receive their service submissions. |
CloudProvider | 20 | timeoutSubscription | Notifies users that their subscription time has expired. |
CloudProvider | 21 | handleUserAppRequest | Forwards the request for the execution of an application to the data-centre. |
DataCentreManager | 22 | initialise | Initialises the data-centre manager module. |
DataCentreManager | 23 | checkVmUserFit | Checks whether the VMs requested by a user fits in the system. |
DataCentreManager | 24 | getTotalCoresByVmType | Returns all the computational cores required by a VM type. |
DataCentreManager | 25 | acceptVmRequest | Accepts a VM request. |
DataCentreManager | 26 | rejectVmRequest | Rejects a request for the execution of an application. |
DataCentreManager | 27 | allocateVM | Allocates a VM in the cloud. |
DataCentreManager | 28 | handleUserAppRequest | Handles the request for the execution of an application sent by a specific user. |
DataCentreManager | 29 | acceptAppRequest | Accepts a request for the execution of an application. |
DataCentreManager | 30 | rejectAppRequest | Rejects a request for the execution of an application. |
DataCentreManager | 31 | timeoutAppRequest | Notifies the user that the time for the execution of an application has expired. |
GUI
Empirical study
Experiment 1: Synthetic workloads and multiple CPU configurations
LemmingUser
users, each one requesting 2 vmMedium
VMs for two hours. The timestamp indicating when users arrive to the system has been calculated using an exponential distribution with mean=60.5 seconds. On each requested VM, the users deploy a CPU-intensive appplication that executes five iterations of the following actions: read 10MB of data from disk \(\rightarrow\) execute 79,200,000 MIs \(\rightarrow\) write 5 MB of data to disk. The maximum subscription time is 10 hours, which means that those users that were not able to access the requested resources in this time, left the system unattended. Finally, 90% of those users that needed more time to execute the submitted applications – once the renting time expires – requested an extension to allow the successful execution of the applications.
VM Name | CPU cores / SCU | RAM Memory | Storage |
---|---|---|---|
vmSmall | 1 | 2 GB | 250 GB |
vmMedium | 2 | 4 GB | 500 GB |
vmLarge | 4 | 8 GB | 1 TB |
User role | # User instances | Requested resources |
---|---|---|
MinionUser | 5000 | 5x vmSmall 2h |
LemmingUser | 3725 | 2x vmMedium 2h |
SmurfUser | 125 | 50x vmMedium 2h |
FraggleRock | 1150 | 5x vmLarge 3h, 5xvmMedium 2h |
Machines | U. Attended | Average | Std | Min | 25% | 50% | 75% | Max |
---|---|---|---|---|---|---|---|---|
128 | 2163 | 8.692 | 2.765 | 0.0 | 9.91 | 9.985 | 9.995 | 9.999 |
256 | 5089 | 7.791 | 3.212 | 0.0 | 5.39 | 9.963 | 9.990 | 10.0 |
512 | 9183 | 0.634 | 1.874 | 0.0 | 0.02 | 0.111 | 0.527 | 9.999 |
1024 | 10000 | 0.004 | 0.030 | 0.0 | 0.0 | 0.0 | 0.0 | 0.770 |
Machines | U. Attended | Average | Std | Min | 25% | 50% | 75% | Max |
---|---|---|---|---|---|---|---|---|
128 | 4399 | 8.908 | 2.350 | 0.0 | 9.81 | 9.898 | 9.953 | 9.999 |
256 | 8689 | 5.366 | 2.702 | 0.0 | 3.12 | 5.210 | 7.637 | 9.999 |
512 | 9638 | 0.771 | 2.518 | 0.0 | 0.0 | 0.0 | 0.003 | 9.998 |
1024 | 10000 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
Experiment 2: Real world traces and SLAs
-
0% of priority users and 0% of reserved machines.
-
10% of priority users and 10% of reserved machines.
-
30% of priority users and 10% of reserved machines.
-
30% of priority users and 30% of reserved machines.
Configuration | # Machines. | Pri. Att. | Pri. Reg. Att. | Reg. Att. | Total Unatt. | Reg. Unatt. | Pri. Unatt. | Total Income |
---|---|---|---|---|---|---|---|---|
NP:0, NR:0 | 256 | 0 | 0 | 40450 | 11407 | 11407 | 0 | 44373.3 |
512 | 0 | 0 | 51673 | 184 | 184 | 0 | 62266.6 | |
768 | 0 | 0 | 51857 | 0 | 0 | 0 | 65282.7 | |
1024 | 0 | 0 | 51857 | 0 | 0 | 0 | 65998.6 | |
NP:10, NR:10 | 256 | 3328 | 54 | 35887 | 12588 | 10690 | 1898 | 44282.0 |
512 | 4302 | 168 | 46406 | 981 | 171 | 810 | 65201.3 | |
768 | 5040 | 126 | 46577 | 114 | 0 | 114 | 68773.2 | |
1024 | 5233 | 27 | 46577 | 20 | 0 | 20 | 69589.6 | |
NP:30, NR:10 | 256 | 5335 | 1260 | 30693 | 14569 | 5467 | 9102 | 44868.9 |
512 | 7728 | 3141 | 36156 | 4832 | 4 | 4828 | 68527.2 | |
768 | 9835 | 5418 | 36160 | 444 | 0 | 444 | 74518.8 | |
1024 | 11176 | 4433 | 36160 | 88 | 0 | 88 | 75875.9 | |
NP:30, NR:30 | 256 | 10039 | 53 | 28072 | 13693 | 8088 | 5605 | 46827.3 |
512 | 13299 | 272 | 36026 | 2260 | 134 | 2126 | 70135.4 | |
768 | 15227 | 237 | 36160 | 233 | 0 | 233 | 74933.6 | |
1024 | 15647 | 11 | 36160 | 39 | 0 | 39 | 75762.0 |