def test_LFU_LFUFast(self): reader = csvReader("{}/trace.csv".format(DAT_FOLDER), init_params={ "header": True, 'label': 5, 'delimiter': ',' }) p = cGeneralProfiler(reader, "LFU", cache_size=2000, num_of_threads=4) p2 = cGeneralProfiler(reader, "LFUFast", cache_size=2000, num_of_threads=4) hr = p.get_hit_ratio() hr2 = p2.get_hit_ratio() self.assertCountEqual(hr, hr2) self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.17430096864700317) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.82569903135299683) p2.plotHRC("test.png", cache_unit_size=32 * 1024) reader.close()
def plotHRCs(self, op=None, clf=True, save=True, figname="HRC_multi_trace.pdf", **kwargs): if op is None: if len(self.hrs) == 0: self.get_hit_rate() for i in range(len(self.hrs)): label = self.readers[i].file_loc[self.readers[i].file_loc.rfind('/')+1:] plt.plot(np.arange(0, self.bin_size*(len(self.hrs[i])-2), self.bin_size), self.hrs[i][:-2], label=label) elif op == "+" or op == "add" or op == "addition": assert 'mix_mode' in kwargs, "please provide mix_mode when doing trace mixing/addition" # the following only works on Linux mixed_trace = tempfile.NamedTemporaryFile() traceMixer.mix_asBinary(readers=self.readers, mix_mode="real_time", output=mixed_trace.name) mixed_reader = binaryReader(mixed_trace.name, init_params={"label": 1, "fmt": "<L"}) if self.cache_name == "LRU": profiler = LRUProfiler(mixed_reader, cache_size=self.cache_size) else: profiler = cGeneralProfiler(mixed_reader, cache_name=self.cache_name, cache_size=self.cache_size, bin_size=self.bin_size, cache_params=self.cache_params, num_of_threads=self.num_of_threads) hr = profiler.get_hit_rate() plt.plot(np.arange(0, self.bin_size * (len(hr) - 2), self.bin_size), hr[:-2], label="mixed") if save: plt.legend(loc="best") plt.xlabel("Cache size/items") plt.ylabel("Hit Ratio") plt.savefig(figname) if clf: plt.clf()
def test_LRU_2(self): reader = vscsiReader("{}/trace.vscsi".format(DAT_FOLDER)) p = cGeneralProfiler(reader, "LRU_2", cache_size=2000) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.16544891893863678) hc = p.get_hit_count() self.assertEqual(hc[10], 164) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.83455109596252441) hr = p.get_hit_ratio(begin=113852, end=113872, cache_size=5000) self.assertAlmostEqual(hr[1], 0.2) reader.close()
def test_SLRU(self): reader = vscsiReader("{}/trace.vscsi".format(DAT_FOLDER)) p = cGeneralProfiler(reader, "SLRU", cache_size=2000, cache_params={"N": 2}) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.1767423003911972) hc = p.get_hit_count() self.assertEqual(hc[10], 117) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.8232576847076416) hr = p.get_hit_ratio(begin=113852, end=113872, cache_size=5000) self.assertAlmostEqual(hr[1], 0.2) reader.close()
def test_FIFO(self): reader = vscsiReader("{}/trace.vscsi".format(DAT_FOLDER)) p = cGeneralProfiler(reader, "FIFO", cache_size=2000, num_of_threads=4) p2 = generalProfiler(reader, 'FIFO', cache_size=2000, num_of_threads=4) hr = p.get_hit_ratio() hr2 = p2.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], hr2[100]) self.assertAlmostEqual(hr[100], 0.16934804618358612) hc = p.get_hit_count() self.assertEqual(hc[10], 449) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.83065193891525269) hr = p.get_hit_ratio(begin=113852, end=113872, cache_size=5000) self.assertAlmostEqual(hr[1], 0.2) p.plotHRC("test.png", cache_unit_size=32 * 1024) reader.close()
def __init__(self, readers, cache_name, cache_size=-1, bin_size=-1, cache_params=None, num_of_threads=4): self.readers = readers self.cache_name = cache_name self.cache_size = cache_size self.bin_size = bin_size self.cache_params = cache_params self.num_of_threads = num_of_threads self.hrs = [] if cache_name.lower() == "lru": self.bin_size = 1 self.profilers = [LRUProfiler(reader, cache_size=cache_size) for reader in self.readers] else: assert cache_size != -1, "please provide cache size for non-LRU profiler" if bin_size == -1: self.bin_size = cache_size//100 self.profilers = [cGeneralProfiler(reader, self.cache_name, self.cache_size, self.bin_size, cache_params=self.cache_params, num_of_threads=self.num_of_threads) for reader in self.readers]
def test_Optimal(self): reader = vscsiReader("{}/trace.vscsi".format(DAT_FOLDER)) p = cGeneralProfiler(reader, "Optimal", cache_size=2000) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.28106996417045593) hc = p.get_hit_count() self.assertEqual(hc[10], 180) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.71893000602722168) hr = p.get_hit_ratio(begin=113852, end=113872, cache_size=5000) self.assertAlmostEqual(hr[1], 0.2) reader.close() reader = plainReader("{}/trace.txt".format(DAT_FOLDER)) p = cGeneralProfiler(reader, "Optimal", cache_size=2000, num_of_threads=4) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.28106996417045593) hc = p.get_hit_count() self.assertEqual(hc[10], 180) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.71893000602722168) p.plotHRC("test2.png", cache_unit_size=32 * 1024) reader.close() reader = csvReader("{}/trace.csv".format(DAT_FOLDER), init_params={ "header": True, 'label': 5, 'delimiter': ',' }) p = cGeneralProfiler(reader, "Optimal", cache_size=2000, num_of_threads=4) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.28106996417045593) hc = p.get_hit_count() self.assertEqual(hc[10], 180) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.71893000602722168) reader.close() reader = binaryReader("{}/trace.vscsi".format(DAT_FOLDER), init_params={ "label": 6, "real_time": 7, "fmt": "<3I2H2Q" }) p = cGeneralProfiler(reader, "Optimal", cache_size=2000, num_of_threads=4) hr = p.get_hit_ratio() self.assertAlmostEqual(hr[0], 0.0) self.assertAlmostEqual(hr[100], 0.28106996417045593) hc = p.get_hit_count() self.assertEqual(hc[10], 180) self.assertEqual(hc[0], 0) mr = p.get_miss_rate() self.assertAlmostEqual(mr[-1], 0.71893000602722168) reader.close()