示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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()
示例#4
0
    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()
示例#5
0
    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()
示例#6
0
    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]
示例#7
0
    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()