Releases: cloudsimplus/cloudsimplus
v6.2.3 - Bugfix release
v6.2.0 - High performance improvements for large-scale simulations
v6.1.0 - High performance improvement for Host and VM CPU utilisation statistics in large-scale experiments
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
1. Redesigned Power Module (#257, #265, #266, #268)
1.1 Advances
- New, simple
PowerModel
interface. It is backwards compatible (providing thegetPower()
method) but also offers a new methodgetPowerMeasurement()
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 forDatacenter
andHost
:- PowerModelHost has a more intuitive interface
PowerModelHost(staticPower, maxPower)
than the oldPowerModelLinear(double maxPower, double staticPowerPercent)
- PowerModelHost has a more intuitive interface
DatacenterPowerSupply
was replaced withPowerMeter
.PowerMeter
can be applied to anyPowerAware
entities like Datacenters or Hosts (and in the future also VMs, etc). The implementation ofPowerMeter
is decoupled from the core which resulted in a lot of removed code inDatacenter
and especiallyHostSimple
.
1.2 Other changes
- Moves
wattSecondsToKWattHours()
toConversion
class - Throws exception in
PowerModelHostSimple
constructor whenmaxPower
orstaticPower
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'sPowerModel
. - If a
Datacenter
assigned to a datacenter is tried to be assigned to another one, an exception
is thrown because eachDatacenter
must have its ownPowerModel
. - Changes
setPowerModel()
onHost
andDatacenter
to comply to "least astonishment principle". It's not intuitive that setting null will be replaced by aPowerModelDatacenter.NULL
orPowerModelHost.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:
- Replaces PowerModel implementations such as PowerModelLinear by
PowerModelHostSimple
(previousPowerModelLinear
) orPowerModelSpec
. The very specific implementationsPowerModelSqr
,PowerModelSqrt
andPowerModelCubic
were removed because they aren't realistic.
Implementations such asPowerModelSpecPowerIbmX3250XeonX3470
, 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 newPowerModelSpec
and pass the utilization percentage array from the previous implementation as a parameter. - 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.
- Replaces class to
PowerAware.wattsSecToKWattsHour
byConversion.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 from
NetworkTopology
interface toBriteNetworkTopology
class (#264)
3. General Improvements
- Adds
SimEntity.startTime
andshutdownTime
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 toshutdown()
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 of
HostFaultInjection
andPowerMeter
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
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.
AsetHostSearchForMigrationDelay(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
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
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 theHost
. That is different from the same method inVmUtilizationHistory
since the former just works during simulation execution, while the latter uses the history to compute the utilization. Vm.getHostRamUtilization()
andVm.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()
andgetTotalUpTimeHours()
methods inHost
interface to return the number of hours a Host has been active.
Renames following methods in Host
and Vm
to provide uniformity:
Host.getUtilizationOfCpu
togetCpuPercentUtilization
Host.getUtilizationOfCpuMips
togetCpuMipsUtilization
Host.getUtilizationOfBw
togetBwUtilization
Host.getUtilizationOfRam
togetRamUtilization
Vm.getCpuPercentUsage
togetCpuPercentUtilization
Vm.getTotalCpuMipsUsage
togetTotalCpuMipsUtilization
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 specificRandomGenerator
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, nowContinuousDistribution
classes extendAbstractRealDistribution
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
andExperiment
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 thecloudsim-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 aDatacenterPowerSupply
instance attached to theDatacenter
. 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 andsetHistoryEnabled()
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 thegetUtilization()
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.
- Allow the researcher to decide if a
v4.3.1 - Bug fixes, built-in VM power consumption, dynamic activation of hosts and more
- #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)
toNormalDistr(double mean, double standardDeviation, long seed)
. This way, theSEED
(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()
andgetTotalUpTime()
. 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
v4.0.0 - Google Cluster Data Trace Readers
- 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.