Skip to content

Releases: cloudsimplus/cloudsimplus

v6.2.3 - Bugfix release

23 Apr 14:17
3a8a65b
Compare
Choose a tag to compare

This release fix small issues including:

It also fix the critical issue #281. Despite it is about the Google Cluster Data Traces, that is a core issue related to message processing that may affect accuracy of your simulations because some events may have been missed.

v6.2.0 - High performance improvements for large-scale simulations

05 Apr 19:33
4f7ec12
Compare
Choose a tag to compare

This release improves the way to store the requested and allocated MIPS capacity for VMs and Cloudlets.
Check issue #291 and PR #290 for details.

It also fixes a minor bug when allocating MIPS for a VM (#292). But that bug may have not impacted your simulations.

v6.1.0 - High performance improvement for Host and VM CPU utilisation statistics in large-scale experiments

10 Mar 19:48
ddfab76
Compare
Choose a tag to compare

This update redesigns UtilizationHistory classes, breaking compatibility.
Keeping a Map to store the history for Hosts and VM CPU utilization along with simulation run, collecting data according to the Datacenter scheduling interval, has a huge penalty in simulation performance and memory consumption.
Storing this data drastically degrades the performance of large-scale experiments. For experiments that simulate days of execution, the performance and memory footprint penalty makes such large-scale experiments unfeasible.

This new release doesn't keep this history anymore, just storing summarized statistics. Check issue #287 for details.

v6.0.0 - Power Module redesign and Network Module update

21 Dec 14:26
eddf6a1
Compare
Choose a tag to compare

1. Redesigned Power Module (#257, #265, #266, #268)

1.1 Advances

  • New, simple PowerModel interface. It is backwards compatible (providing the getPower() method) but also offers a new method getPowerMeasurement() which returns an object with more detailed information (currently static & dynamic fraction but can be easily extended).
  • Gets rid of all the old PowerModel implementations from the original CloudSim paper, since they are overly specific.
  • Adds PowerModel implementations for Datacenter and Host:
    • PowerModelHost has a more intuitive interface PowerModelHost(staticPower, maxPower) than the old PowerModelLinear(double maxPower, double staticPowerPercent)
  • DatacenterPowerSupply was replaced with PowerMeter. PowerMeter can be applied to any PowerAware entities like Datacenters or Hosts (and in the future also VMs, etc). The implementation of PowerMeter is decoupled from the core which resulted in a lot of removed code in Datacenter and especially HostSimple.

1.2 Other changes

  • Moves wattSecondsToKWattHours() to Conversion class
  • Throws exception in PowerModelHostSimple constructor when maxPower or staticPower is smaller than 1. That may indicate the researcher is trying to pass a percentage instead of a value in watts.
  • Stops a Datacenter to accept someone else's PowerModel.
  • If a Datacenter assigned to a datacenter is tried to be assigned to another one, an exception
    is thrown because each Datacenter must have its own PowerModel.
  • Changes setPowerModel() on Host and Datacenter to comply to "least astonishment principle". It's not intuitive that setting null will be replaced by a PowerModelDatacenter.NULL or PowerModelHost.NULL object. A meaningful error message showing how to do that is provided in such a case.

1.3 Upgrading Notes

If you come from CloudSim Plus 5.x and used the PowerModule, there are some steps you need to follow to update your simulations,
since now we have specific implementations of PowerModel for Datacenter and Hosts. The steps are:

  1. Replaces PowerModel implementations such as PowerModelLinear byPowerModelHostSimple (previous PowerModelLinear) or PowerModelSpec. The very specific implementations PowerModelSqr, PowerModelSqrt and PowerModelCubic were removed because they aren't realistic.
    Implementations such as PowerModelSpecPowerIbmX3250XeonX3470, that represent the power model for a very specific hardware were also removed. If you want to use such a kind of specific model, just use the new PowerModelSpec and pass the utilization percentage array from the previous implementation as a parameter.
  2. The static power consumption provided in the constructor is not in percentage anymore, but watts. But don't worry, if you provide a value smaller than 1 (which may indicate a percentage value), an exception will be thrown to let you know.
  3. Replaces class to PowerAware.wattsSecToKWattsHour by Conversion.wattSecondsToKWattHours.

2. Redesigned Network Module

  • Migrates network API from id-based to object/entity-based. This way, you can pass entity objects instead of arbitrary IDs that could not even represent a valid entity and cause runtime errors (#260).
  • Moves Brite-specific methods fromNetworkTopology interface to BriteNetworkTopology class (#264)

3. General Improvements

  • Adds SimEntity.startTime and shutdownTime attribute to know when the entity was started and shut down
  • Adds DatacenterBroker.shutdownWhenIdle attribute to define if it should be automatically shut down when idle or not.
  • Rename CloudSimEntity.shutdownEntity() method to shutdown() to avoid redundancy.

4. BugFixes

  • Avoids ConcurrentModificationException in event loop (#267)
  • Setting Broker vmDestructionDelay as 0 makes broker to shutdown before adding cloudlets to finished list (#271)
  • The broker was destroying VMs after becoming idle but wasn't shutting down when all VMs finished (#273)
  • VmSchedulerAbstract was setting more Host's PEs as free than expected after deallocating a VM (#274)

5. Performance

  • Redesigns the way to check if there is any event matching a given predicate in the future queue. This improves the performance ofHostFaultInjection and PowerMeter event scheduling.
  • Purges finished entities from list, improving performance and reducing memory consumption in large scale experiments (#269)

Acknowledgment

The great changes in Power and Network modules were made thanks to Philipp Wiesner who developed LEAF, a simulator for large energy-aware fog computing environment. LEAF uses CloudSim Plus as the underlying cloud simulation framework.

v5.4.0 - Fixes critical bugs and introduces features to provide more simulation control

07 Apr 13:56
bc9c588
Compare
Choose a tag to compare

Updates and New Features

  • Includes all AWS EC2 Instance Templates from the "US Est (Ohio)" Region, available at https://aws.amazon.com/ec2/pricing/on-demand/
  • Add instructions to use Gradle in the README
  • #228 - Enables DatacenterBroker to avoid retrying or not the creating of failed VMs
  • #233 - Provide more public LOGGER instances for specific classes. Check LoggingExample.java
  • #236 - Datacenter kept trying to migrate VMs from under or overloaded Hosts without waiting some time.
    A setHostSearchForMigrationDelay(double delay) method was introduced in Datacenter. Check MigrationExample1.java

Bugfixes

  • #54 - VmSchedulerTimeShared wasn't sharing Host PEs between different VMs when there is fewer Host PEs than required by all VMs
  • #226 - Some cloudlets weren't finishing, although the CPU utilization is high
  • #227 - MinTimeBetweenEventsExample.java was showing -1 as the ExecTime for almost all Cloudlets
  • #229 - VmSchedulerSpaceShared was throwing a NoSuchElementException when all Host PEs were already used
  • #231 - When a Cloudlet is bound to a VM and that VM was not created, the Cloudlet status wasn't set to FAILED
  • #232 - VmSchedulers were showing a warning "VmSchedulerXX: It was requested an empty list of PEs for Vm YY in Host ZZ" because the resources of a destroyed VM were tried to be deallocated twice
  • #234 - VmAllocationPolicyMigrationAbstract was not allocating Hosts without a PowerModel. Since power consumption is buil-in in the HostSimple class of CloudSim Plus, the developer can choose if he/she wants to model power consumption or not using regular Hosts.
  • #235 - Some simulations using a VmAllocationPolicyMigration were freezing when there were under/overloaded Hosts.

Improves UtilizationModelPlanetLab and fixes some bugs

14 Sep 14:04
63a9076
Compare
Choose a tag to compare

New Features

  • Add size() method to Datacenter interface to enable getting its number of Hosts.
  • #216 :: Enable manual VM migrations based on arbitrary conditions
  • #221 :: Enable UtilizationModelPlanetLab to read the number of lines from a comment at the beginning of the file
  • #222 :: Enable UtilizationModelPlanetLab to scale the values read from the trace

BugFixes

v5.0.0 - Incredible performance improvements, synchronous simulations, placement of groups of VMs, selection of the closest Datacenter, new policies and more

18 Jun 07:45
97accc6
Compare
Choose a tag to compare

1. Important new Features

1.1. Implement synchronous simulations (#205)

This feature enables the simulation to be run inside a regular loop as below:

simulation.startSync();
while(simulation.isRunning()){
    simulation.runFor(INTERVAL);
    /*
    Perform some operation here, 
    such as data collection or submission of new VMs or Cloudlets. 
    */
}
simulation.finish();

That makes it easier to interact with the simulation and perform some tasks, such as data collection.
Thanks for Pawel Koperek.

1.2. DatacenterBroker

  • Enables Broker to try selecting the closest Datacenter to place VMs, according to their time zone (#212).
  • Enables Broker to destroy a VM and return the list of unfinished Cloudlets (#209). Thanks for Pawel Koperek.
  • Enables placing groups of VMs into the same PM (#90).
  • Introduces DatacenterBrokerBestFit. Thanks to Humaira Abdul Salam.
  • Introduces DatacenterBrokerFirstFit.

2. Introduces new Vm methods and updates Host

  • The Vm.getHostCpuUtilization() method enables computing the relative VM CPU utilization from the Host. That is different from the same method in VmUtilizationHistory since the former just works during simulation execution, while the latter uses the history to compute the utilization.
  • Vm.getHostRamUtilization() and Vm.getHostBwUtilization() provide the same feature for RAM and BW.
  • Adds the VmRelativeHostResourceUtilizationExample to show the relative percentage of each resource every VM is using from its Host.
  • Introduces getUpTimeHours() and getTotalUpTimeHours() methods in Host interface to return the number of hours a Host has been active.

Renames following methods in Host and Vm to provide uniformity:

  • Host.getUtilizationOfCpu to getCpuPercentUtilization
  • Host.getUtilizationOfCpuMips to getCpuMipsUtilization
  • Host.getUtilizationOfBw to getBwUtilization
  • Host.getUtilizationOfRam to getRamUtilization
  • Vm.getCpuPercentUsage to getCpuPercentUtilization
  • Vm.getTotalCpuMipsUsage to getTotalCpuMipsUtilization

3. Refactor and redesign classes in distributions package (#201)

  • Provides uniformity for parameter order in ContinuousDistribution classes
  • Introduces new constructors for ContinuousDistribution classes, enabling the researcher to provide a specific RandomGenerator instance that will be used as the actual pseudo random number generator.
  • Makes the ContinuousDistribution classes to use inheritance instead of composition. Despite the recommendation is to favor composition, in this case, that was just causing a huge increase in memory usage in large scale simulations. This way, now ContinuousDistribution classes extend AbstractRealDistribution instead of storing an attribute of this type.

4. General Features

  • Moves time-related methods from Conversion to TimeUtil class.
  • Introduces VmAllocationPolicyWorstFit, VmAllocationPolicyRandom, VmAllocationPolicyRoundRobin.
  • Moves ExperimentRunner and Experiment classes to main module, to enable researchers extend such classes to implement their own experiments that execute in a repeatable manner. This way, they can use a scientific approach to collect valid results. Moving this base classes to the main module stops researchers from depending on the cloudsim-plus-testbeds module, which just provides existing testbeds that may be used just as a learning resource.
  • Smaller bug-fixes.

5. Performance

The performance improvements in this release are impressive. The list below shows where the improvements were made. If you want a glympse of the impact in simulation time, check the end of the Exclusive Features section at the home page.

  • Improves performance of Broker's Cloudlets creation request (#203)
  • The Host previous utilization mips is just used when there is a DatacenterPowerSupply instance attached to the Datacenter. Since getting the utilization of CPU is a very expensive operation in large scale experiments, if a Datacenter power supply is not set, the value is not stored.
  • Improves performance of idle VM detection (#200).
  • Improves overall performance of VmAllocationPolicies (#190, #191).
  • Improves DatacenterBroker performance for allocation of VMs and Cloudlets (#109, #188).
  • Improves DatacenterBroker performance for checking if a VM is alive (#187).

5.1 UtilizationModelStochastic

  • Improves performance when getting the utilization value from the history map (#194).
  • Introduces historyEnabled attribute and setHistoryEnabled() to allow enabling or disabling the history of utilization values (#197).
  • Enables the utilization history by default, because that option brings more performance (at the cost of higher memory consumption). If you are running a large scale simulation, that history may grow too much, which will impact performance anyway. But for regular simulations, enabling the history provides better performance because a lower number of pseudo-random numbers will be generated.
  • Enables the UtilizationModelStochastic to always return a new utilization
    • Allow the researcher to decide if a UtilizationModelStochastic instance will always return a new utilization value every time the getUtilization() methods are called.
    • Returning a new random utilization value for every call to those methods enables the researcher to use a single UtilizationModelStochastic instance for all Cloudlets. This drastically reduces simulation time and memory consumption in large scale simulations. It also ensures that distinct Cloudlets may have different resource utilization even for the same requested time.

v4.3.1 - Bug fixes, built-in VM power consumption, dynamic activation of hosts and more

20 Apr 19:30
81c3b64
Compare
Choose a tag to compare
  • #185 :: Warn when a simulation which has an explicit termination time is lasting too long. This way, the researcher may know if he/she has set a too long termination time, instead of just keep waiting the simulation to finish when there are no events to process.
  • #184 :: Refactor ContinuousDistribution implementations providing consistent order in construtor parameters. The parameter order of NormalDistr's constructor was changed from NormalDistr(long seed, double mean, double standardDeviation) to NormalDistr(double mean, double standardDeviation, long seed). This way, the SEED (when available) is always the last parameter, conforming to constructors of other random number generators such as the UniformDistr. This change probably will cause a compilation error and will be easy to detect and fix. However, if you are using int or long for all the 3 parameters, there will be no error or warning and your simulation results will be just wrong. In such a case, you need to find where you are using this NormalDistr constructor and correct parameters order.
  • #183 :: Adds time conversion methods to the Conversion class
  • #180 :: When a submission delay is set, VM creation is not being delayed by the DatacenterBroker
  • #178 :: Fix confusion between energy, power and their units
  • #173, #174, #175 :: Performance improvements for large scale simulations
  • #171 :: Cloudlet BW utilization is always zero
  • Adds RamAndBwUsageHistoryExample to collect VM's RAM and BW utilization
  • #168 :: Compute VM Power usage
  • #163 :: Some cloudlets don't finish execution - Adds new example to show it's just a configuration issue.
  • #161 :: Introduce an onCloudletStartListener to be notified when a Cloudlet starts executing
  • #128, #181 :: Enable VmAllocationPolicy implementations to power Hosts on and off as required. Introduce the following methods to Host: getIdleShutdownDeadline(), setIdleShutdownDeadline(), getUpTime() and getTotalUpTime(). Accordingly updates the Host startTime and shutdownTime when the activation status of a Host changes.

v4.0.3 - Google Cluster Data Trace Readers: bugfix release

04 Oct 20:02
3093cb4
Compare
Choose a tag to compare

v4.0.0 - Google Cluster Data Trace Readers

03 Sep 20:29
7677cc9
Compare
Choose a tag to compare
  • Process trace files from Google Cluster Data creating Hosts and Cloudlets (tasks). A script to download the trace files is available at download-google-cluster-data.sh. Examples are available here (#149).
  • Reimplement Host's and VM's power usage computation that were returning inconsistent results for different Datacenter's scheduling intervals (#153).
  • Makes the UtilizationModelPlanetLab work as a circular list when the Cloudlet using it as a CPU UtilizationModel runs longer than there is data in the trace file. This way, when the end of the file is reached, it starts reading from the beginning to avoid ArrayIndexOutOfBoundsException (#152).
  • Enables creation of Cloudlets with undefined lengths, so that they can keep running until a message is sent to finish them. This enables the simulation of tasks such as a web service that keeps running waiting for requests, until a signal to finish it is sent. (#150).
  • Improves the HostSimple.isSuitableForVm method which was incorrectly checking if a Host is suitable for a Vm (#148).
  • Other small improvements.