config: Update memtest to stress test cache clusivity
authorAndreas Hansson <andreas.hansson@arm.com>
Fri, 6 Nov 2015 08:26:42 +0000 (03:26 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Fri, 6 Nov 2015 08:26:42 +0000 (03:26 -0500)
This patch adds an new twist to the memtest cache hierarchy, in that
it switches from mostly inclusive to mostly exclusive at every level
in the tree. This has helped weed out plenty issues, and serves as a
good stress tests.

configs/example/memtest.py

index 08f13453368ec4c85793442983908cddc8b0dc8a..354451a618ab5ad1d3e64d9e6b93d805b6744ae5 100644 (file)
@@ -177,7 +177,7 @@ else:
 # Define a prototype L1 cache that we scale for all successive levels
 proto_l1 = Cache(size = '32kB', assoc = 4,
                  hit_latency = 1, response_latency = 1,
-                 tgts_per_mshr = 8)
+                 tgts_per_mshr = 8, clusivity = 'mostly_incl')
 
 if options.blocking:
      proto_l1.mshrs = 1
@@ -197,6 +197,15 @@ for scale in cachespec[:-1]:
      next.response_latency = prev.response_latency * 10
      next.assoc = prev.assoc * scale
      next.mshrs = prev.mshrs * scale
+
+     # Swap the inclusivity/exclusivity at each level. L2 is mostly
+     # exclusive with respect to L1, L3 mostly inclusive, L4 mostly
+     # exclusive etc.
+     if (prev.clusivity.value == 'mostly_incl'):
+          next.clusivity = 'mostly_excl'
+     else:
+          next.clusivity = 'mostly_incl'
+
      cache_proto.insert(0, next)
 
 # Make a prototype for the tester to be used throughout