Thursday, 14 September 2017

Adding L3 Cache in gem5

Its very easy and straightforward approach to add more level of caches hierarchy in gem5 system simulator.

1. Add l3 cache option in Options.py
parser.add_option("--l3cache", action="store_true")

2. Add l3 cache class in Caches.py
class L3Cache(Cache):
assoc = 64
tag_latency = 32
data_latency = 32
response_latency = 32
mshrs = 32
tgts_per_mshr = 24
write_buffers = 16

3. Define a L3XBar class in Xbar.py
class L3XBar(CoherentXBar):
# 256-bit crossbar by default
width = 32
frontend_latency = 1
forward_latency = 0
response_latency = 1
snoop_response_latency = 1
snoop_filter = SnoopFilter(lookup_latency = 0)

4. Import L3XBar from XBar in BaseCPU.py
from XBar import L3XBar

5. Define addThreeLevelCacheHierarchy function in BaseCPU.py
def addThreeLevelCacheHierarchy(self, ic, dc, l2c, iwc = None, dwc = None):
self.addPrivateSplitL2Caches(ic, dc, iwc, dwc)
self.toL3Bus = L3XBar()
self.connectCachedPorts(self.toL3Bus)
self.l3cache = l3c
self.toL3Bus.master = self.l3cache.cpu_side
self._cached_ports = ['l3cache.mem_side']

6. Assign L3Cache to l3_cache_class in CacheConfig.py

7. Finally connect l2, l3 and mem buses in CacheConfig.py
if options.l2cache and options.l3cache:
system.l2 = l2_cache_class(clk_domain=system.cpu_clk_domain,
size=options.l2_size,
assoc=options.l2_assoc)

system.l3 = l3_cache_class(clk_domain=system.cpu_clk_domain,
size=options.l3_size,
assoc=options.l3_assoc)

system.tol2bus = L2XBar(clk_domain = system.cpu_clk_domain)
system.tol3bus = L3XBar(clk_domain = system.cpu_clk_domain)

system.l2.cpu_side = system.tol2bus.master
system.l2.mem_side = system.tol3bus.slave

system.l3.cpu_side = system.tol3bus.master
system.l3.mem_side = system.membus.slave

Adding L3 Cache in gem5

Its very easy and straightforward approach to add more level of caches hierarchy in gem5 system simulator. 1. Add l3 cache option in...