Exemple #1
0
def testLRU():
    print ('######### LRU ########\n')
    lru = LRU(5)
    for i in range(8):
        lru.put(str(i), i)
        if i == 5:
            lru.get(str(i))
    lru.remove('3')
    lru.showNodes()
Exemple #2
0
def random_read(lru_len=100,times=20000):
    key_list=get_random_int(0,1500,times)
    lru_obj=LRU(lru_len) 
    for key in key_list:
        lru_obj.put(key,key)
    beg_time=time.time()
    for key in key_list:
        lru_obj.get(key)
    end_time=time.time()
    print("测试随机读操作{}次,lru_len长度为{},情况下耗时{} ".format(times,lru_len,end_time-beg_time))
    time.time()
Exemple #3
0
def random_wirte(lru_len=100,times=20000):
    """
    [测试随机写操作]

    Keyword Arguments:
        times {int} -- [本轮测试次数] (default: {20000})
    """
    key_list=get_random_int(0,1500,times)
    lru_obj=LRU(lru_len) 
    beg_time=time.time()
    for key in key_list:
        lru_obj.put(key,key)
    end_time=time.time()
    print("测试随机写操作{}次,lru_len长度为{},情况下耗时{} ".format(times,lru_len,end_time-beg_time))
    time.time()
Exemple #4
0
def random_read_write(lru_len=100,times=20000):
    """
    随机读写
    """
    key_list=get_random_int(0,1500,times)
    lru_obj=LRU(lru_len) 

    beg_time=time.time()
    for index,key in  enumerate(key_list):
        if index%2==0:
            lru_obj.put(key,key)
        else:
            lru_obj.get(key)
    end_time=time.time()
    print("测试随机读写操作{}次,lru_len长度为{},情况下耗时{} ".format(times,lru_len,end_time-beg_time))
    time.time()
Exemple #5
0
class Cache:

    # Replacement policies
    LRU = "LRU"
    FIFO = 'FIFO'

    def __init__(self, name, size, policy):
        self.name = name
        self.size = size
        self.free_space = size
        self.policy = policy  # Eviction policy
        self.hashmap = {}  # Mapping <objname,objsize>

        if (self.policy == Cache.LRU):
            self.cache = LRU(self.size)
        elif (self.policy == Cache.FIFO):
            self.cache = queue.Queue(maxsize=self.size)

        # Statistics
        self.hit_count = 0
        self.miss_count = 0

    def has_key(self, key):
        if key in self.hashmap.keys():
            return True
        else:
            return False

    def update(self, key, size):
        self.hashmap[key] = size
        self.hit_count += 1
        if (self.policy == Cache.LRU):
            self.cache.update(key=size)
        elif (self.policy == Cache.FIFO):
            self.cache.put(key)

    def insert(self, key, size, directory):
        if (self.policy == Cache.LRU):
            self.insertLRU(key, size, directory)
        elif (self.policy == Cache.FIFO):
            self.insertFIFO(key, size, directory)

    def evictLRU(self, directory):
        oid = self.cache.peek_last_item()[0]
        directory.removeBlock(oid, self.name)
        del [oid]
        del self.hashmap[oid]
        self.free_space += int(self.hashmap[oid])

    def evictFIFO(self, directory):
        oid = self.cache.get()
        directory.removeBlock(oid, self.name)
        self.free_space += int(self.hashmap[oid])
        del self.hashmap[oid]

    def insertLRU(self, key, size, directory):
        while (int(size) >= self.free_space):
            self.evictLRU(directory)
        self.cache[key] = size
        self.hashmap[key] = size
        self.free_space += size
        self.miss_count += 1

    def insertFIFO(self, key, size, directory):
        while (int(size) >= self.free_space):
            self.evictFIFO(directory)
        self.cache.put(key)
        self.hashmap[key] = size
        self.free_space += size
        self.miss_count += 1

    def put(self, key, size, directory):
        if self.has_key(key):
            self.update(key, size)
        else:
            self.insert(key, size, directory)

    def print(self):
        if (self.policy == Cache.LRU):
            print(self.name, "LRU", self.hashmap, self.cache.items())
        elif (self.policy == Cache.FIFO):
            print(self.name, "LRU", self.hashmap, list(self.cache.queue))

    def remove(self, key):
        del self.hashmap[key]
        if (self.policy == Cache.LRU):
            del self.cache[key]
        elif (self.policy == Cache.FIFO):
            a = 5