add python script used to evaluation effect of cache size on number of cache misses
parent
c7de473325
commit
c9357b2417
|
@ -0,0 +1,45 @@
|
||||||
|
# reads lines from stdin representing requests
|
||||||
|
# outputs percentage of cache misses for various cache sizes
|
||||||
|
|
||||||
|
import collections
|
||||||
|
|
||||||
|
class LRUCache:
|
||||||
|
def __init__(self, capacity):
|
||||||
|
self.capacity = capacity
|
||||||
|
self.cache = collections.OrderedDict()
|
||||||
|
self.misses = 0
|
||||||
|
|
||||||
|
def get(self, key):
|
||||||
|
try:
|
||||||
|
value = self.cache.pop(key)
|
||||||
|
self.cache[key] = value
|
||||||
|
return value
|
||||||
|
except KeyError:
|
||||||
|
self.misses += 1
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def set(self, key, value):
|
||||||
|
try:
|
||||||
|
self.cache.pop(key)
|
||||||
|
except KeyError:
|
||||||
|
if len(self.cache) >= self.capacity:
|
||||||
|
self.cache.popitem(last=False)
|
||||||
|
self.cache[key] = value
|
||||||
|
|
||||||
|
caches = [LRUCache(i*10) for i in range(1, 11)]
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
seen = set()
|
||||||
|
|
||||||
|
cnt = 0
|
||||||
|
for line in sys.stdin:
|
||||||
|
cnt += 1
|
||||||
|
for c in caches:
|
||||||
|
if line in seen:
|
||||||
|
c.get(line)
|
||||||
|
c.set(line, 0)
|
||||||
|
seen.add(line)
|
||||||
|
|
||||||
|
for c in caches:
|
||||||
|
print c.capacity, c.misses * 100.0 / cnt
|
Loading…
Reference in New Issue