Skip to content

Releases: cloudsimplus/cloudsimplus

v1.3.1 - Bugfix Release

16 Apr 14:47
f491477
Compare
Choose a tag to compare

Fix issue #126

Consider there are 4 Cloudlets running at the same time inside the same VM and that a UtilizationModelFull was used to define how a Cloudlet requests RAM from its VM. This issue was enabling, for instance, that all Cloudlets requested together 400% of RAM from the VM, which is obviously not possible without virtual memory (which is not supported in simulations).

You are strongly recommended to check more details in #126.

Send messages between entities

Enable internal message passing mechanism to accept and SimEntity as the source and destination for a message, instead of int IDs. That makes easier to interact with the involved entities, enabling the event processing to call some methods directly on these entities. It also avoids looking up the entities into a list or map in order to get an instance to them. That makes the message processing faster.

This feature also enables freely changing entities' names. When the ID of an entity is changed, its name is accordingly changed to.

v1.3.0 - Creation of Hosts during Simulation Runtime

01 Apr 19:13
7b51aa7
Compare
Choose a tag to compare

Enables simulating the physical expansion of a Datacenter by dynamically adding new Hosts (PMs) at simulation runtime. The Datacenter interface now has the methods addHost and addHostList, which can be called before or after starting the simulation, to expand a Datacenter physical capacity by adding new Hosts.

This release also makes it easier to create a Datacenter since a DatacenterCharacteristics object is not required anymore. When a Datacenter is instantiated, it internally creates a DatacenterCharacteristics object. In place of passing such an object to the Datacenter constructor, you just need to pass a List of Hosts.

This way, instead of creating a Datacenter like this:

DatacenterCharacteristics characts = new DatacenterCharacteristicsSimple(hostList);
Datacenter dc0 = new DatacenterSimple(cloudsim, characts, new VmAllocationPolicySimple());

you simple do:

Datacenter dc0 = new DatacenterSimple(cloudsim, hostList, new VmAllocationPolicySimple());

The DatacenterCharacteristics can be accessed using the Datacenter.getDatacenterCharacteristics() method, enabling the characteristics (such as costs) to be changed.

v1.2.7 - Refactoring Release

30 Mar 16:00
695dae6
Compare
Choose a tag to compare
Refactoring Release

v1.2.6 - Bufix Release

09 Jan 16:52
ce5ac57
Compare
Choose a tag to compare

Fix the issue #123 to enable canceling the execution of running Cloudlets.

v1.2.3 - Updates Host Fault Injection Mechanism

05 Jun 21:51
Compare
Choose a tag to compare

Added / Changed

  • Renamed the DatacenterBroker getVmsCreatedList() method to getVmCreatedList()
    and added a getVmExecList() one (#106).
    Now the getVmExecList() method is the one which stores the list of all currently running VMs.
    These VMs may or may not be running Cloudlets, but they are available
    for new submitted Cloudlets to be placed into them.
    The old getVmCreatedList() stores all created VMs for the broker
    along the entire simulation time.
    This way, the list of all created VMs can be queried after the simulation finishes.

Changed

  • Updates Host Fault Injection Mechanism (#105).

v1 2.2 - Amazon EC2 Instance Templates and other small features

03 Jun 21:02
Compare
Choose a tag to compare

Added

  • Amazon EC2 instance templates in JSON format (#97).
  • Vm.getStartTime(), Vm.getStopTime() and Vm.getTotalExecutionTime() methods to, respectively: get the time a VM started running for the first time; the time it was destroyed in the last Host it executed; and the total execution time across all Hosts the VM possibly have migrated across (#98).
  • Allow a VM belonging to a broker to be destroyed after all its Cloudlets have finished, independently of the state of other running VMs and according to a given delay (#99).

Changed

  • Host Fault Injection Mechanism (#81).

Fixed

  • Cloudlets executed with CloudletSchedulerSpaceShared were giving incorrect results (#96).

v1.2.1 - Updates Host Fault Injection Mechanism, fixes bugs and includes minor features

28 May 07:10
Compare
Choose a tag to compare

Added

  • PowerVmAllocationPolicyMigrationBestFitStaticThreshold to select the Host to place or migrate a VM
    using a Best Fit policy, that is, it selects the Host with less available resources
    that is enough to place a given VM.
  • EventListener to notify subscribers when all VMs in the DatacenterBroker waiting list were created (#92).
  • Enables Hosts to be powered on and off (#89).
  • Enables changing the CPU migration overhead for any VmScheduler.
    A new constructor was added to these schedulers to enable setting this value once
    (#88).
  • Enables dynamically adding new columns to the simulation results table (#87).

Fixed

  • Bug fixes (#95)

Changed

  • Updates the Host Fault Injection Mechanism to allow creating a snapshot of a VM
    when all VMs belonging to a broker have failed (#93).

v1.2.0 - Vertical VM Scaling, Initial Host Fault Injection, Automatic generation of IDs ...

18 May 22:44
Compare
Choose a tag to compare

Added

  • Vertical VM Scaling Mechanism (#7)
    for up and down scaling of VM resources such as Ram, Bandwidth and PEs (CPUs).
  • double getUtilization() method in the UtilizationModel class to get the utilization percentage of a given resource
    at the current simulation time.
  • Methods getUtilizationOfRam(), getUtilizationOfBw(), getUtilizationOfCpu() added to Cloudlet in order
    to get utilization percentage of RAM, BW and CPU, respectively, for the current simulation time.
  • UtilizationModel.Unit enum to define the measuring unit in which a Cloudlet resource, to which a UtilizationModel is associated to,
    will be used. The enum values can be PERCENTAGE or ABSOLUTE, that respectively defines that the Cloudlet resource usage will be in percentage or absolute values. The existing UtilizationModels continue to define the value in percentage,
    as described in their documentation. The UtilizationModelDynamic (previously called UtilizationModelArithmeticProgression) allows setting a different unit
    for such an UtilizationModel (#62).
  • UtilizationModelDynamic now allows
    defining the resource usage increment behavior using a Lambda Expression, enabling the developer to give a function that performs the increment in an arithmetic, geometric, exponential or any other kind of progression he/she needs (#64).
  • Updated the DatacenterBroker interface and implementing classes, including the methods setVmComparator and setCloudletComparator to enable
    a developer to set a Comparator object (which can be given as a Lambda Expression) to sort VMs and Cloudlets before they are actually requested to be created in some Datacenter. This enables defining priorities to request the creation of such objects.
    If no Comparator is defined, the objects creation request follows the order in which they were submitted.
  • Host Fault Injection Mechanism (under development) to enable injection of random failures into Hosts PEs: it injects failures into Host PEs and reallocates working PEs to running VMs. When all PEs from a Host fail, it starts clones of failed VMs to recovery from failure. This way, it is simulated the instantiation of VM snapshots into different Hosts (#81).
    • Added the method Host.getWorkingPesList().
    • Poisson Distribution implementation enabling the simulation of inter-arrival times of events such as Host failures.
  • Added the method void submitCloudletList(List<? extends Cloudlet> list, Vm vm) to the DatacenterBroker, enabling submission of a list of cloudlets to run inside a specific VM.
  • Added the method void submitCloudletList(List<? extends Cloudlet> list, Vm vm, double submissionDelay) to the DatacenterBroker, enabling submission of a list of cloudlets to run inside a specific VM, and at the same time, allowing delaying the creation of such cloudlets.
  • Added a getCloudletList() method int the CloudletScheduler to get the list of all cloudlets which are executing or waiting inside a given VM.
  • Includes new boolean methods to the Pe interface to make easier to check the PE status.
    New methods are isFree(), isBuzy(), isFailed() and isWorking().
  • Allowed disabling log on every SimEntity by calling the new method SimEntity.setLog().
    If Log.disable() is called, it disables all simulation logs,
    independent of the configuration on each entity.
    This new feature enables fine-grained control of entities log.

Changed

  • Changed the methods getRam(), getBw() and getSize() from Vm interface to instead of returning a long value that represents the resource capacity,
    to return an actual Resource object that provides information about the capacity and usage. The method getSize() was renamed to getStorage().
  • Changed the methods getRamCapacity(), getBwCapacity() and getStorageCapacity() from Host interface to instead of returning a long value that represents the resource capacity, to return an actual Resource object that provides information about the capacity and usage. The methods were renamed, removing the "Capacity" suffix.
  • Automatic generation of IDs for Hosts, VMs and Cloudlets.
    • Hosts IDs can be manually defined using the setId() method, but the constructor parameter was removed.
      The IDs of Hosts across different Datacenters can be duplicated,
      since when a search for a Host is made using the HostList method,
      just the Hosts of a given Datacenter are considered.
    • Hosts IDs are generated when a List of Hosts is attached to a Datacenter.
    • Cloudlets and VMs IDs are generated when they are submitted to a Broker.
  • Hosts constructors require the RAM and bandwidth capacity, since storage already was required.
  • Instantiating a ResourceProvisionerSimple now requires just a default no-args constructor.
  • The DatacenterBroker interfaces now allow using Java 8 Lambda Expressions to define selection policies.
    • It provides a functional way of defining the policies to select a Datacenter to host a Vm, a fallback Datacenter when the creation of requested VMs failed in the previous selected Datacenter and to select a VM to run a Cloudlet.
    • The DatacenterBrokerSimple is yet selecting the first Datacenter to place VMs and uses a round-robin policy to select a VM to run the Cloudlets. If such behaviors need to be changed, it is not required to create a new DatacenterBroker class.
    • Since there are 3 selection policies to override (the selection of default datacenter, fallback datacenter and VM), the combination of different implementations for these 3 policies will require the creation of several DatacenterBroker implementations that will be impossible to maintain.
    • Using the new functional implementation there is no need to create a new DatacenterBroker class and the implementations can be exchanged just using the new setDatacenterSupplier, setFallbackDatacenterSupplier and setVmMapper methods, passing a Lambda Expression to them.
    • Automatically set the DatacenterBroker when Cloudlets and VMS are submitted. (#83)
    • Refactored the method CloudletScheduler.getCloudletFinishedList() to keep the list of finished Cloudlets after the simulation
      ends. The DatacenterBroker.getCloudletsFinishedList() method returns the list of finished Cloudlets, but for all VMs of the broker.
      The CloudletScheduler method allows getting the finished list for a specific VM, enabling the researcher to compute some metrics using the data stored in Cloudlets attributes after the simulation ends. (#78)

v1.1.0 - Completely refactored PeProvisionerSimple to just extend the ResourceProvisionerSimple

14 Jan 12:21
Compare
Choose a tag to compare

This release provides some refactoring and bug fixes to enable implementation of Vertical VM Scaling proposed in #7.

Fixed

  • Closed Isssue #60
  • Fixed the issue of allocating the same physical PE for multiple Virtual PEs inside the VmSchedulerTimeShared class.

Changed

  • Changed the signature of the PeSimple constructor that now requires the PE MIPS capacity instead of an ID,
    because it is in fact an attribute that must belong to a PE. The PE is the one that has a MIPS capacity.
    If a PE ID is not defined, when a PE list is assigned to a Host, the host automatically defines the IDs.
  • The PeProvisionerSimple constructor doesn't require any parameter anymore. It internally creates
    an association with the PE that receives the PeProvisioner instance when a Pe is created.
  • All the duplicated code inside the PeProvisioner and PeProvisionerSimple were removed.
    The PeProvisionerSimple class now extends the ResourceProvisionerSimple and the PeProvisioner is now an interface.

v1.0.0 - First stable release available at Maven Central

06 Jan 20:27
Compare
Choose a tag to compare

In January of 2015 we started to contribute to CloudSim and due to different philosophies from CloudSim team we decided to initiate CloudSim Plus as an independent project. One year of intense and constant work later, after 375 commits and 30 issues closed, we are proud to announce that CloudSim Plus 1.0 is available as the first stable release.

The framework went through a comprehensive re-design and we doubt there is a single class that was not refactored to improve code quality, clarity and extensiblity and to provide an extensive and updated documentation.

All the performed changes aimed to reduce violation of several software engineering principles, that directly impact researchers trying to extend the framework to provide some specific features for their simulations. Some bugs that reduced the framework accuracy were also fixed. Some of these principles, practices and recommendations are Design Patterns, SOLID principles and clean code programming.

With all these principles in mind, CloudSim Plus has become a modern, better structured and much easier-to-use cloud simulation framework. It is a Java 8 framework that strongly relies on the most recent features of Java language to provide a code that is simpler, easier to understand and to extend. There are innumerous changes and several exclusive features and improvements that make CloudSim Plus a promising project.

Some of the most relevant and exclusive features and improvements are presented below:

  • Parallel execution of experiments, enabling multiple runs of a given simulation to be executed simultaneously
    in a multi-core machine.
  • Horizontal VM scaling to balance workload of dynamically arrived cloudlets by creating new VMs on-demand.
  • Dynamic creation of VMs and Cloudlets by delaying their submission to a broker.
  • Dynamic creation of VMs at runtime without requiring the need to create new brokers.
  • Listener objects to monitor several events happening during simulation execution, enabling metrics collection and dynamic resource allocation for SLA fulfillment.
  • Classes and interfaces to allow implementation of heuristics such as Tabu Search, Simulated Annealing, Ant Colony Systems and so on.
  • Implementation of the Completely Fair Scheduler used in recent version of the Linux Kernel, that in fact performs task preemption
    as a multi-task mechanism.
  • Completely re-designed, reusable and simpler Network module that just works.
  • Extremely simpler constructors for objects such as Datacenter, Host, Vm, Cloudlet, VmAllocationPolicy, VmScheduler and ClodletSchedler.
  • A very easier way to initialize a simulation by just calling a no-args constructor of the CloudSim class.
  • Totally re-organized package and modules structure, grouping classes such as Hosts into an exclusive package.

And for the first time, a cloud simulation framework is provided at the Maven Central repository to enable a researcher to include CloudSim Plus as a dependency into his/her pom.xml project file, making it even easier to use CloudSim Plus. Such a feature also enables researchers to implement new modules and tools running on top of CloudSim Plus, without requiring them to include CloudSim Plus source code inside their projects. That also encourage these researchers making changes to CloudSim Plus code to submit pull request to include those changes in the official repository, contributing to the entire academic and open source community.

The efforts of CloudSim Plus already were recognized by the acceptance of a paper in a top conference. More details will be provided as soon as the paper is published.

We'd like to hear from researchers using CloudSim Plus. Join us at the Google Groups Forum.

For more information, check the README file at the project's home page.