154 lines
4.3 KiB
Java
154 lines
4.3 KiB
Java
package org.fog.utils;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.cloudbus.cloudsim.core.CloudSim;
|
|
import org.fog.entities.Tuple;
|
|
|
|
public class TimeKeeper {
|
|
|
|
private static TimeKeeper instance;
|
|
|
|
private long simulationStartTime;
|
|
private int count;
|
|
private Map<Integer, Double> emitTimes;
|
|
private Map<Integer, Double> endTimes;
|
|
private Map<Integer, List<Integer>> loopIdToTupleIds;
|
|
private Map<Integer, Double> tupleIdToCpuStartTime;
|
|
private Map<String, Double> tupleTypeToAverageCpuTime;
|
|
private Map<String, Integer> tupleTypeToExecutedTupleCount;
|
|
|
|
private Map<Integer, Double> loopIdToCurrentAverage;
|
|
private Map<Integer, Integer> loopIdToCurrentNum;
|
|
|
|
public static TimeKeeper getInstance(){
|
|
if(instance == null)
|
|
instance = new TimeKeeper();
|
|
return instance;
|
|
}
|
|
|
|
public int getUniqueId(){
|
|
return count++;
|
|
}
|
|
|
|
public void tupleStartedExecution(Tuple tuple){
|
|
tupleIdToCpuStartTime.put(tuple.getCloudletId(), CloudSim.clock());
|
|
}
|
|
|
|
public void tupleEndedExecution(Tuple tuple){
|
|
if(!tupleIdToCpuStartTime.containsKey(tuple.getCloudletId()))
|
|
return;
|
|
double executionTime = CloudSim.clock() - tupleIdToCpuStartTime.get(tuple.getCloudletId());
|
|
if(!tupleTypeToAverageCpuTime.containsKey(tuple.getTupleType())){
|
|
tupleTypeToAverageCpuTime.put(tuple.getTupleType(), executionTime);
|
|
tupleTypeToExecutedTupleCount.put(tuple.getTupleType(), 1);
|
|
} else{
|
|
double currentAverage = tupleTypeToAverageCpuTime.get(tuple.getTupleType());
|
|
int currentCount = tupleTypeToExecutedTupleCount.get(tuple.getTupleType());
|
|
tupleTypeToAverageCpuTime.put(tuple.getTupleType(), (currentAverage*currentCount+executionTime)/(currentCount+1));
|
|
}
|
|
}
|
|
|
|
public Map<Integer, List<Integer>> loopIdToTupleIds(){
|
|
return getInstance().getLoopIdToTupleIds();
|
|
}
|
|
|
|
private TimeKeeper(){
|
|
count = 1;
|
|
setEmitTimes(new HashMap<Integer, Double>());
|
|
setEndTimes(new HashMap<Integer, Double>());
|
|
setLoopIdToTupleIds(new HashMap<Integer, List<Integer>>());
|
|
setTupleTypeToAverageCpuTime(new HashMap<String, Double>());
|
|
setTupleTypeToExecutedTupleCount(new HashMap<String, Integer>());
|
|
setTupleIdToCpuStartTime(new HashMap<Integer, Double>());
|
|
setLoopIdToCurrentAverage(new HashMap<Integer, Double>());
|
|
setLoopIdToCurrentNum(new HashMap<Integer, Integer>());
|
|
}
|
|
|
|
public int getCount() {
|
|
return count;
|
|
}
|
|
|
|
public void setCount(int count) {
|
|
this.count = count;
|
|
}
|
|
|
|
public Map<Integer, Double> getEmitTimes() {
|
|
return emitTimes;
|
|
}
|
|
|
|
public void setEmitTimes(Map<Integer, Double> emitTimes) {
|
|
this.emitTimes = emitTimes;
|
|
}
|
|
|
|
public Map<Integer, Double> getEndTimes() {
|
|
return endTimes;
|
|
}
|
|
|
|
public void setEndTimes(Map<Integer, Double> endTimes) {
|
|
this.endTimes = endTimes;
|
|
}
|
|
|
|
public Map<Integer, List<Integer>> getLoopIdToTupleIds() {
|
|
return loopIdToTupleIds;
|
|
}
|
|
|
|
public void setLoopIdToTupleIds(Map<Integer, List<Integer>> loopIdToTupleIds) {
|
|
this.loopIdToTupleIds = loopIdToTupleIds;
|
|
}
|
|
|
|
public Map<String, Double> getTupleTypeToAverageCpuTime() {
|
|
return tupleTypeToAverageCpuTime;
|
|
}
|
|
|
|
public void setTupleTypeToAverageCpuTime(
|
|
Map<String, Double> tupleTypeToAverageCpuTime) {
|
|
this.tupleTypeToAverageCpuTime = tupleTypeToAverageCpuTime;
|
|
}
|
|
|
|
public Map<String, Integer> getTupleTypeToExecutedTupleCount() {
|
|
return tupleTypeToExecutedTupleCount;
|
|
}
|
|
|
|
public void setTupleTypeToExecutedTupleCount(
|
|
Map<String, Integer> tupleTypeToExecutedTupleCount) {
|
|
this.tupleTypeToExecutedTupleCount = tupleTypeToExecutedTupleCount;
|
|
}
|
|
|
|
public Map<Integer, Double> getTupleIdToCpuStartTime() {
|
|
return tupleIdToCpuStartTime;
|
|
}
|
|
|
|
public void setTupleIdToCpuStartTime(Map<Integer, Double> tupleIdToCpuStartTime) {
|
|
this.tupleIdToCpuStartTime = tupleIdToCpuStartTime;
|
|
}
|
|
|
|
public long getSimulationStartTime() {
|
|
return simulationStartTime;
|
|
}
|
|
|
|
public void setSimulationStartTime(long simulationStartTime) {
|
|
this.simulationStartTime = simulationStartTime;
|
|
}
|
|
|
|
public Map<Integer, Double> getLoopIdToCurrentAverage() {
|
|
return loopIdToCurrentAverage;
|
|
}
|
|
|
|
public void setLoopIdToCurrentAverage(Map<Integer, Double> loopIdToCurrentAverage) {
|
|
this.loopIdToCurrentAverage = loopIdToCurrentAverage;
|
|
}
|
|
|
|
public Map<Integer, Integer> getLoopIdToCurrentNum() {
|
|
return loopIdToCurrentNum;
|
|
}
|
|
|
|
public void setLoopIdToCurrentNum(Map<Integer, Integer> loopIdToCurrentNum) {
|
|
this.loopIdToCurrentNum = loopIdToCurrentNum;
|
|
}
|
|
|
|
|
|
}
|