class ProactiveRenewUniform(object): def __init__(self, amount, cachesize, total_rate, Ts, popularity): self._amount = amount self._popularity = popularity self._total_rate = total_rate self._che = Che(amount, cachesize, self._popularity, total_rate) self._Ts = Ts self._rate = self._requestRate() self._hit_ratio = self._hitRatio() self._pub_load_c = {} self._pub_load = self._pubLoad() def _requestRate(self): rr = {} for i in range(1, self._amount + 1): rr[i] = self._total_rate * self._popularity[i] return rr def _hitRatio(self): return self._che.hitRatio() def hitRatio(self): return self._hit_ratio def totalHitRatio(self): return self._che.totalHitRatio() def Che(self): return self._che def _pubLoad(self): load = 0 for i in range(1, self._amount + 1): self._pub_load_c[i] = 1.0 / self._Ts * self._che.hitRatio()[i] load = load + 1.0 / self._Ts * self._che.hitRatio()[i] return load def pubLoadC(self): return self._pub_load_c def pubLoad(self): return self._pub_load def totalLoad(self): return self._total_rate * (1 - self.totalHitRatio()) + self._pub_load class _F(object): def __init__(self, rate, Ts, Tc): self._rate = rate self._Ts = Ts self._Tc = Tc def F1(self, t): return (1 - exp(-self._rate * t)) / self._Ts def F2(self, t): return (1 - exp(-self._rate * t)) / self._Tc
class ProactiveRenew(object): def __init__(self, amount, cachesize, total_rate, expected_value, popularity): self._amount = amount self._popularity = popularity self._total_rate = total_rate self._che = Che(amount, cachesize, self._popularity, total_rate) self._ev = expected_value self._rate = self._requestRate() self._hit_ratio = self._hitRatio() self._pub_load_c = {} self._pub_load = self._pubLoad() def _requestRate(self): rr = {} for i in range(1, self._amount + 1): rr[i] = self._total_rate * self._popularity[i] return rr def _hitRatio(self): return self._che.hitRatio() def hitRatio(self): return self._hit_ratio def totalHitRatio(self): return self._che.totalHitRatio() def Che(self): return self._che def _pubLoad(self): load = 0 for i in range(1, self._amount + 1): self._pub_load_c[i] = self._che.hitRatio()[i] / self._ev load = load + self._che.hitRatio()[i] / self._ev return load def pubLoadC(self): return self._pub_load_c def pubLoad(self): return self._pub_load def totalLoad(self): return self._total_rate * (1 - self.totalHitRatio()) + self._pub_load