90 lines
2.2 KiB
Java
90 lines
2.2 KiB
Java
package org.fog.application.selectivity;
|
|
|
|
import org.cloudbus.cloudsim.core.CloudSim;
|
|
|
|
/**
|
|
* Generates an output tuple for every input tuple according to a bursty model.
|
|
* During high burst period, all input tuples result in an output tuple.
|
|
* During low burst period, no input tuples result in an output tuple.
|
|
* @author Harshit Gupta
|
|
*
|
|
*/
|
|
public class BurstySelectivity implements SelectivityModel{
|
|
|
|
/**
|
|
* Duration of the low burst period
|
|
*/
|
|
double burstLowPeriod;
|
|
|
|
/**
|
|
* Duration of the high burst period
|
|
*/
|
|
double burstHighPeriod;
|
|
|
|
/**
|
|
* First instance of the start of high burst period, using which subsequent burst periods will be calculated.
|
|
*/
|
|
double firstHighTime;
|
|
|
|
public BurstySelectivity(double burstLowPeriod, double burstHighPeriod, double firstHighTime){
|
|
setBurstLowPeriod(burstLowPeriod);
|
|
setBurstHighPeriod(burstHighPeriod);
|
|
setFirstHighTime(firstHighTime);
|
|
}
|
|
|
|
/**
|
|
* If the current time falls in the high burst period of the specified burst model, an output tuple is generated for the incoming tuple.
|
|
*/
|
|
@Override
|
|
public boolean canSelect() {
|
|
double time = CloudSim.clock() + getFirstHighTime();
|
|
double burstPeriod = getBurstHighPeriod()+getBurstLowPeriod();
|
|
double burstStartTime = burstPeriod*((int)(time/burstPeriod));
|
|
if(time <= burstStartTime + getBurstHighPeriod())
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The mean tuple generation rate is the fraction of high burst period in the total burst period.
|
|
*/
|
|
@Override
|
|
public double getMeanRate() {
|
|
return getBurstHighPeriod()/(getBurstHighPeriod()+getBurstLowPeriod());
|
|
}
|
|
|
|
/**
|
|
* Maximum tuple generation rate equals 1 (when the burst is high)
|
|
*/
|
|
@Override
|
|
public double getMaxRate() {
|
|
return 1;
|
|
}
|
|
|
|
public double getBurstLowPeriod() {
|
|
return burstLowPeriod;
|
|
}
|
|
|
|
public void setBurstLowPeriod(double burstLowPeriod) {
|
|
this.burstLowPeriod = burstLowPeriod;
|
|
}
|
|
|
|
public double getBurstHighPeriod() {
|
|
return burstHighPeriod;
|
|
}
|
|
|
|
public void setBurstHighPeriod(double burstHighPeriod) {
|
|
this.burstHighPeriod = burstHighPeriod;
|
|
}
|
|
|
|
public double getFirstHighTime() {
|
|
return firstHighTime;
|
|
}
|
|
|
|
public void setFirstHighTime(double firstHighTime) {
|
|
this.firstHighTime = firstHighTime;
|
|
}
|
|
|
|
}
|