hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel
Class MaxMinFairSpreader

java.lang.Object
  extended by hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel.ResourceSpreader
      extended by hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel.MaxMinFairSpreader
Direct Known Subclasses:
MaxMinConsumer, MaxMinProvider

public abstract class MaxMinFairSpreader
extends ResourceSpreader

This class is part of the unified resource consumption model of DISSECT-CF. This class provides the implementation of the core scheduling logic in the simulator. The logic is based on the max-min fairness algorithm.

Author:
"Gabor Kecskemeti, Distributed and Parallel Systems Group, University of Innsbruck (c) 2013" "Gabor Kecskemeti, Laboratory of Parallel and Distributed Systems, MTA SZTAKI (c) 2015"

Nested Class Summary
 
Nested classes/interfaces inherited from class hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel.ResourceSpreader
ResourceSpreader.FreqSyncer
 
Field Summary
private  double currentUnProcessed
          Determines the amount of processing that still remains unspent in this spreader.
private  int unassignedNum
          The number of resource consumptions for which this spreader still did not assign temporal resource utilization limits - see: p(c,s,t) in the paper titled "DISSECT-CF: a simulator to foster energy-aware scheduling in infrastructure clouds" .
private  int upLen
          Offers a temporary storage for the size of the current resource consumption list.
 
Fields inherited from class hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel.ResourceSpreader
hashCounter, lastNotifTime, negligableProcessing, perTickProcessingPower, toBeAdded, toBeRemoved, underProcessing, underProcessingLen
 
Constructor Summary
MaxMinFairSpreader(double perSecondProcessing)
          Constructs a generic Max Min fairness based resource spreader.
 
Method Summary
private  void assignProcessingPower()
          Manages the gradual increase of the processing limits for each resource consumption related to this spreader.
private  boolean initializeFreqUpdate()
          At the beginning of a freq update cycle, every influence group member is initialised with this function.
protected  long singleGroupwiseFreqUpdater()
          This function is the entrance to the lowest level scheduling in DISSECT-CF.
protected abstract  void updateConsumptionLimit(ResourceConsumption con, double limit)
          Supposed to update the consumer/provider specific consumption details.
 
Methods inherited from class hu.mta.sztaki.lpds.cloud.simulator.iaas.resourcemodel.ResourceSpreader
cancelConsumption, getCounterPart, getCurrentPowerBehavior, getHashandIncCounter, getPerTickProcessingPower, getSamePart, getSyncer, getTotalProcessed, hashCode, isAcceptableConsumption, isConsumer, processSingleConsumption, registerConsumption, removeTheseConsumptions, setCurrentPowerBehavior, setPerTickProcessingPower, subscribePowerBehaviorChangeEvents, toString, unsubscribePowerBehaviorChangeEvents
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

currentUnProcessed

private double currentUnProcessed
Determines the amount of processing that still remains unspent in this spreader. This value is always smaller than the perTickProcessingPower of the spreader.


unassignedNum

private int unassignedNum
The number of resource consumptions for which this spreader still did not assign temporal resource utilization limits - see: p(c,s,t) in the paper titled "DISSECT-CF: a simulator to foster energy-aware scheduling in infrastructure clouds" .


upLen

private int upLen
Offers a temporary storage for the size of the current resource consumption list. This is updated once in every freq update cycle.

Constructor Detail

MaxMinFairSpreader

public MaxMinFairSpreader(double perSecondProcessing)
Constructs a generic Max Min fairness based resource spreader.

Parameters:
perSecondProcessing - determines the amount of resources this resource spreader could handle in a single tick
Method Detail

initializeFreqUpdate

private boolean initializeFreqUpdate()
At the beginning of a freq update cycle, every influence group member is initialised with this function. The function assures that the private fields of this class are initialised, as well as all resource consumptions in the influence group are set as unassigned and their processing limits are set to 0. This step actually allows the max-min fairness algorithm to gradually increase the processing limits for each resource consumption that could play a role in bottleneck situations.

Returns:
true if there were some resource consumptions to be processed by this spreader.

assignProcessingPower

private void assignProcessingPower()
Manages the gradual increase of the processing limits for each resource consumption related to this spreader. The increase is started from the limithelper of each resource consumption. This limithelper tells to what amount the particular consumption was able to already process (i.e. it is the maximum consumption limit of some of its peers). If a resource consumption is still unassigned then its limithelper should be still lower than the maximum amount of processing possible by its provider/consumer.


singleGroupwiseFreqUpdater

protected long singleGroupwiseFreqUpdater()
This function is the entrance to the lowest level scheduling in DISSECT-CF. The function ensures that each resource consumption is assigned a processing limit and determines what is the resource consumption which will finish earliest with that particular limit. The earliest completion time is then returned to the main resource spreading logic of the simulator.

Specified by:
singleGroupwiseFreqUpdater in class ResourceSpreader
Returns:
the duration (in ticks) one has to wait before any of the resource consumptions in this spreader complete

updateConsumptionLimit

protected abstract void updateConsumptionLimit(ResourceConsumption con,
                                               double limit)
Supposed to update the consumer/provider specific consumption details. Allows differentiation between consumers and providers without conditional statement (instead it requires that this class is subclassed for both consumers and providers).

Parameters:
con - the resource consumption object to be updated with the limit value
limit - the limit value to be propagated to the resource consumption object's relevant (i.e. provider/consumer specific) field


Copyright © 2012–2015 University of Innsbruck & MTA SZTAKI. All rights reserved.