コード例 #1
0
def check_stats_write_empty(exported_obj: Core, mode: CacheMode, cls: CacheLineSize):
    stats = exported_obj.cache.get_stats()
    assert stats["conf"]["cache_mode"] == mode, "Cache mode"
    # TODO(ajrutkow): why 1 for WT ??
    assert exported_obj.cache.device.get_stats()[IoDir.WRITE] == \
        (2 if mode.lazy_write() else (1 if mode == CacheMode.WT else 0)), \
        "Writes to cache device"
    assert exported_obj.device.get_stats()[IoDir.WRITE] == (0 if mode.lazy_write() else 1), \
        "Writes to core device"
    assert stats["req"]["wr_full_misses"]["value"] == (1 if mode.write_insert() else 0), \
        "Write full misses"
    assert stats["usage"]["occupancy"]["value"] == \
        ((cls / CacheLineSize.LINE_4KiB) if mode.write_insert() else 0), \
        "Occupancy"
コード例 #2
0
def check_stats_write_after_read(exported_obj: Core,
                                 mode: CacheMode,
                                 cls: CacheLineSize,
                                 read_from_empty=False):
    stats = exported_obj.cache.get_stats()
    assert exported_obj.cache.device.get_stats()[IoDir.WRITE] == \
        (0 if mode in {CacheMode.WI, CacheMode.PT} else
            (2 if read_from_empty and mode.lazy_write() else 1)), \
        "Writes to cache device"
    assert exported_obj.device.get_stats()[IoDir.WRITE] == (0 if mode.lazy_write() else 1), \
        "Writes to core device"
    assert stats["req"]["wr_hits"]["value"] == \
        (1 if (mode.read_insert() and mode != CacheMode.WI)
            or (mode.write_insert() and not read_from_empty) else 0), \
        "Write hits"
    assert stats["usage"]["occupancy"]["value"] == \
        (0 if mode in {CacheMode.WI, CacheMode.PT} else (cls / CacheLineSize.LINE_4KiB)), \
        "Occupancy"