Ruby: Reorder Cache Lookup in Protocol Files
authorNilay Vaish <nilay@cs.wisc.edu>
Sat, 12 Feb 2011 17:41:20 +0000 (11:41 -0600)
committerNilay Vaish <nilay@cs.wisc.edu>
Sat, 12 Feb 2011 17:41:20 +0000 (11:41 -0600)
commit0cede15d6c5213d83e4cd143014321b2ee7ec5eb
tree2bff094d29f493d61a63cba2fb9a04f409d9e120
parent2971b8401a4a76a774962900d9aed6e9eb4b2950
Ruby: Reorder Cache Lookup in Protocol Files
The patch changes the order in which L1 dcache and icache are looked up when
a request comes in. Earlier, if a request came in for instruction fetch, the
dcache was looked up before the icache, to correctly handle self-modifying
code. But, in the common case, dcache is going to report a miss and the
subsequent icache lookup is going to report a hit. Given the invariant -
caches under the same controller keep track of disjoint sets of cache blocks,
we can move the icache lookup before the dcache lookup. In case of a hit in
the icache, using our invariant, we know that the dcache would have reported
a miss. In  case of a miss in the icache, we know that icache would have
missed even if the dcache was looked up before looking up the icache.
Effectively, we are doing the same thing as before, though in the common case,
we expect reduction in the number of lookups. This was empirically confirmed
for MOESI hammer. The ratio lookups to access requests is now about 1.1 to 1.
src/mem/protocol/MESI_CMP_directory-L1cache.sm
src/mem/protocol/MOESI_CMP_directory-L1cache.sm
src/mem/protocol/MOESI_CMP_token-L1cache.sm
src/mem/protocol/MOESI_hammer-cache.sm