mem: Avoid unnecessary snoops on writebacks and clean evictions
This patch optimises the handling of writebacks and clean evictions when using a snoop filter. Instead of snooping into the caches to determine if the block is cached or not, simply set the status based on the snoop-filter result.
This commit is contained in:
parent
c086c20bd2
commit
f02a9338c1
1 changed files with 12 additions and 1 deletions
|
@ -198,7 +198,18 @@ CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id)
|
||||||
" SF size: %i lat: %i\n", src_port->name(),
|
" SF size: %i lat: %i\n", src_port->name(),
|
||||||
pkt->cmdString(), pkt->getAddr(), sf_res.first.size(),
|
pkt->cmdString(), pkt->getAddr(), sf_res.first.size(),
|
||||||
sf_res.second);
|
sf_res.second);
|
||||||
forwardTiming(pkt, slave_port_id, sf_res.first);
|
|
||||||
|
if (pkt->evictingBlock()) {
|
||||||
|
// for block-evicting packets, i.e. writebacks and
|
||||||
|
// clean evictions, there is no need to snoop up, as
|
||||||
|
// all we do is determine if the block is cached or
|
||||||
|
// not, instead just set it here based on the snoop
|
||||||
|
// filter result
|
||||||
|
if (!sf_res.first.empty())
|
||||||
|
pkt->setBlockCached();
|
||||||
|
} else {
|
||||||
|
forwardTiming(pkt, slave_port_id, sf_res.first);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
forwardTiming(pkt, slave_port_id);
|
forwardTiming(pkt, slave_port_id);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue