mem-cache: Split array indexing and replacement policies.
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Mon, 19 Feb 2018 14:13:11 +0000 (15:13 +0100)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Thu, 22 Mar 2018 14:50:23 +0000 (14:50 +0000)
commitd207e9ccee411877fdeac80bb68a27900560f50f
tree120810cf72c52ed5df29436552e06f1fb11aa5ce
parent0473286ab1e9992a906eff380000bf90c82eeccb
mem-cache: Split array indexing and replacement policies.

Replacement policies (LRU, Random) are currently considered as array
indexing methods, but have completely different functionalities:

- Array indexers determine the possible locations for block allocation.
  This information is used to generate replacement candidates when
  conflicts happen.
- Replacement policies determine which of the replacement candidates
  should be evicted to make room for new allocations.

For this reason, they were split into different classes. Advantages:

- Easier and more straightforward to implement other replacement
  policies (RRIP, LFU, ARC, ...)
- Allow easier future implementation of cache organization schemes

As now we can't assure the use of sets, the previous way to create a
true LRU is not viable. Now a timestamp_bits parameter controls how
many bits are dedicated for the timestamp, and a true LRU can be
achieved through an infinite number of bits (although a few bits suffice
in practice).

Change-Id: I23750db121f1474d17831137e6ff618beb2b3eda
Reviewed-on: https://gem5-review.googlesource.com/8501
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
26 files changed:
configs/common/cores/arm/O3_ARM_v7a.py
configs/common/cores/arm/ex5_LITTLE.py
configs/common/cores/arm/ex5_big.py
src/mem/cache/Cache.py
src/mem/cache/base.cc
src/mem/cache/blk.hh
src/mem/cache/cache.cc
src/mem/cache/replacement_policies/ReplacementPolicies.py [new file with mode: 0644]
src/mem/cache/replacement_policies/SConscript [new file with mode: 0644]
src/mem/cache/replacement_policies/base.cc [new file with mode: 0644]
src/mem/cache/replacement_policies/base.hh [new file with mode: 0644]
src/mem/cache/replacement_policies/lru_rp.cc [new file with mode: 0644]
src/mem/cache/replacement_policies/lru_rp.hh [new file with mode: 0644]
src/mem/cache/replacement_policies/random_rp.cc [new file with mode: 0644]
src/mem/cache/replacement_policies/random_rp.hh [new file with mode: 0644]
src/mem/cache/tags/SConscript
src/mem/cache/tags/Tags.py
src/mem/cache/tags/base.hh
src/mem/cache/tags/base_set_assoc.cc
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.cc
src/mem/cache/tags/fa_lru.hh
src/mem/cache/tags/lru.cc [deleted file]
src/mem/cache/tags/lru.hh [deleted file]
src/mem/cache/tags/random_repl.cc [deleted file]
src/mem/cache/tags/random_repl.hh [deleted file]