[gem5-dev] Change in public/gem5[master]: config, mem: l3 cache support
Pierre-Yves Péneau has uploaded this change for review. ( https://gem5-review.googlesource.com/2462 Change subject: config, mem: l3 cache support .. config, mem: l3 cache support Change-Id: I78e3c055d5f312647c4ab4f0c937d6dc4841fb57 Signed-off-by: Pierre-Yves Péneau--- M configs/common/CacheConfig.py M configs/common/Caches.py M configs/common/O3_ARM_v7a.py M configs/common/Options.py M configs/example/fs.py M configs/example/se.py 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/configs/common/CacheConfig.py b/configs/common/CacheConfig.py index 52659e8..dd1098d 100644 --- a/configs/common/CacheConfig.py +++ b/configs/common/CacheConfig.py @@ -60,12 +60,12 @@ print "arm_detailed is unavailable. Did you compile the O3 model?" sys.exit(1) -dcache_class, icache_class, l2_cache_class, walk_cache_class = \ -O3_ARM_v7a_DCache, O3_ARM_v7a_ICache, O3_ARM_v7aL2, \ -O3_ARM_v7aWalkCache +dcache_class, icache_class, l2_cache_class, l3_cache_class, \ +walk_cache_class = O3_ARM_v7a_DCache, O3_ARM_v7a_ICache, \ +O3_ARM_v7aL2, O3_ARM_v7aL3, O3_ARM_v7aWalkCache else: -dcache_class, icache_class, l2_cache_class, walk_cache_class = \ -L1_DCache, L1_ICache, L2Cache, None +dcache_class, icache_class, l2_cache_class, l3_cache_class, \ +walk_cache_class = L1_DCache, L1_ICache, L2Cache, L3Cache, None if buildEnv['TARGET_ISA'] == 'x86': walk_cache_class = PageTableWalkerCache @@ -77,8 +77,21 @@ # minimal so that compute delays do not include memory access latencies. # Configure the compulsory L1 caches for the O3CPU, do not configure # any more caches. -if options.l2cache and options.elastic_trace_en: -fatal("When elastic trace is enabled, do not configure L2 caches.") +if (options.l2cache or options.l3cache) and options.elastic_trace_en: +fatal("When elastic trace is enabled, do not configure L2/L3 caches.") + +if options.l3cache: +# Provide a clock for the L3 and the L2-to-L3 bus here as they +# are not connected using addTwoLevelCacheHierarchy. Use the +# same clock as the CPUs. +system.l3 = l3_cache_class(clk_domain=system.cpu_clk_domain, + size=options.l3_size, + assoc=options.l3_assoc) + +system.tol3bus = L2XBar(clk_domain = system.cpu_clk_domain, width=64) +system.l3.cpu_side = system.tol3bus.master +system.l3.mem_side = system.membus.slave + if options.l2cache: # Provide a clock for the L2 and the L1-to-L2 bus here as they @@ -90,7 +103,11 @@ system.tol2bus = L2XBar(clk_domain = system.cpu_clk_domain) system.l2.cpu_side = system.tol2bus.master -system.l2.mem_side = system.membus.slave + +if options.l3cache: +system.l2.mem_side = system.tol3bus.slave +else: +system.l2.mem_side = system.membus.slave if options.memchecker: system.memchecker = MemChecker() diff --git a/configs/common/Caches.py b/configs/common/Caches.py index 926a41d..86cbc52 100644 --- a/configs/common/Caches.py +++ b/configs/common/Caches.py @@ -72,6 +72,15 @@ tgts_per_mshr = 12 write_buffers = 8 +class L3Cache(Cache): +assoc = 16 +tag_latency = 30 +data_latency = 30 +response_latency = 30 +mshrs = 30 +tgts_per_mshr = 8 +write_buffers = 10 + class IOCache(Cache): assoc = 8 tag_latency = 50 diff --git a/configs/common/O3_ARM_v7a.py b/configs/common/O3_ARM_v7a.py index f5c2c71..a2a6f94 100644 --- a/configs/common/O3_ARM_v7a.py +++ b/configs/common/O3_ARM_v7a.py @@ -201,3 +201,19 @@ # Simple stride prefetcher prefetcher = StridePrefetcher(degree=8, latency = 1) tags = RandomRepl() + +# L3 Cache +class O3_ARM_v7aL3(Cache): +tag_latency = 30 +data_latency = 30 +response_latency = 30 +mshrs = 30 +tgts_per_mshr = 8 +size = '16MB' +assoc = 16 +write_buffers = 10 +prefetch_on_access = True +clusivity = 'mostly_excl' +# Simple stride prefetcher +prefetcher = StridePrefetcher(degree=8, latency = 1) +tags = RandomRepl() diff --git a/configs/common/Options.py b/configs/common/Options.py index 9af15ff..49d4af8 100644 --- a/configs/common/Options.py +++ b/configs/common/Options.py @@ -98,6 +98,7 @@ help="use external port for SystemC TLM cosimulation") parser.add_option("--caches", action="store_true") parser.add_option("--l2cache", action="store_true") +parser.add_option("--l3cache", action="store_true") parser.add_option("--num-dirs", type="int", default=1) parser.add_option("--num-l2caches", type="int", default=1)
[gem5-dev] Cron <m5test@zizzer> /z/m5/regression/do-regression quick
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-atomic: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/o3-timing: CHANGED! * build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-two-level: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing: CHANGED! * build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-simple: CHANGED! * build/POWER/tests/opt/quick/se/00.hello/power/linux/o3-timing: CHANGED!* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing-ruby: CHANGED! * build/POWER/tests/opt/quick/se/00.hello/power/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing-ruby: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/o3-timing: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp: CHANGED! * build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-simple: CHANGED! * build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-atomic-mp: CHANGED! * build/X86/tests/opt/quick/se/00.hello/x86/linux/simple-timing: CHANGED! * build/X86/tests/opt/quick/se/00.hello/x86/linux/simple-timing-ruby: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-timing-ruby: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/minor-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-timing-ruby: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-timing: CHANGED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/minor-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/o3-timing: CHANGED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-timing: CHANGED! * build/HSAIL_X86/tests/opt/quick/se/04.gpu/x86/linux/gpu-ruby-GPU_RfO: CHANGED! * build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/simple-timing-ruby: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/o3-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-timing: CHANGED! * build/RISCV/tests/opt/quick/se/00.hello/riscv/linux/simple-atomic: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64a/minor-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-timing-ruby: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64m/minor-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/minor-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/o3-timing: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/simple-timing: CHANGED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64d/simple-timing-ruby: CHANGED! * build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/50.vortex/arm/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/50.vortex/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/03.learning-gem5/arm/linux/learning-gem5-p1-two-level: CHANGED! * build/X86/tests/opt/quick/se/70.twolf/x86/linux/simple-timing: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing: CHANGED! * build/ARM/tests/opt/quick/se/10.mcf/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-atomic-dummychecker: CHANGED! * build/ARM/tests/opt/quick/se/70.twolf/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/simple-atomic: CHANGED! * build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing-checker: CHANGED! *