summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Diestelhorst <stephan.diestelhorst@arm.com>2016-05-27 17:05:58 +0100
committerStephan Diestelhorst <stephan.diestelhorst@arm.com>2016-05-27 17:05:58 +0100
commit71a02f624e9c406ad37a1ed7030f98a36da6e59f (patch)
treee6aab1be69e30b4d634b82db63acc1f123d71ea4
parentbe014d433860b88e35a4e6cf9e1710c7afab6192 (diff)
downloadgem5-71a02f624e9c406ad37a1ed7030f98a36da6e59f.tar.xz
mem, config: Selective use of snoop filter
Disable the default snoop filter in the SystemXBar so that the typical membus does not have a snoop filter by default. Instead, add the snoop filter only when there are caches added to the system (with the caches / l2cache options). The underlying problem is that the snoop filter grows without bounds (for now) if there are no caches to tell it that lines have been evicted. This causes slow regression runs for all the atomic regressions. This patch fixes this behaviour. --HG-- extra : source : f97c20511828209757440839ed48d741d02d428f
-rw-r--r--configs/common/CacheConfig.py5
-rw-r--r--tests/configs/base_config.py6
2 files changed, 11 insertions, 0 deletions
diff --git a/configs/common/CacheConfig.py b/configs/common/CacheConfig.py
index 1a2c87828..e4114355f 100644
--- a/configs/common/CacheConfig.py
+++ b/configs/common/CacheConfig.py
@@ -153,6 +153,11 @@ def config_cache(options, system):
else:
system.cpu[i].connectAllPorts(system.membus)
+ # Add a snoop filter to the membus if there are caches above it
+ if (options.l2cache or options.caches) and \
+ (system.membus.snoop_filter == NULL):
+ system.membus.snoop_filter = SnoopFilter()
+
return system
# ExternalSlave provides a "port", but when that port connects to a cache,
diff --git a/tests/configs/base_config.py b/tests/configs/base_config.py
index 3f28ada5d..185c00020 100644
--- a/tests/configs/base_config.py
+++ b/tests/configs/base_config.py
@@ -126,6 +126,9 @@ class BaseSystem(object):
cpu.createInterruptController()
cpu.connectAllPorts(sha_bus if sha_bus != None else system.membus,
system.membus)
+ # System has caches before the membus -> add snoop filter
+ if sha_bus and system.membus.snoop_filter == NULL:
+ system.membus.snoop_filter = SnoopFilter()
def init_kvm(self, system):
"""Do KVM-specific system initialization.
@@ -149,6 +152,9 @@ class BaseSystem(object):
self.init_kvm(system)
sha_bus = self.create_caches_shared(system)
+ # System has caches before the membus -> add snoop filter
+ if sha_bus and system.membus.snoop_filter == NULL:
+ system.membus.snoop_filter = SnoopFilter()
for cpu in system.cpu:
self.init_cpu(system, cpu, sha_bus)