| gem5
    v21.1.0.2
    | 
A basic cache tag store. More...
#include <base_set_assoc.hh>
 
  
| Public Types | |
| typedef BaseSetAssocParams | Params | 
| Convenience typedef.  More... | |
|  Public Types inherited from gem5::BaseTags | |
| typedef BaseTagsParams | Params | 
|  Public Types inherited from gem5::ClockedObject | |
| using | Params = ClockedObjectParams | 
| Parameters of ClockedObject.  More... | |
|  Public Types inherited from gem5::SimObject | |
| typedef SimObjectParams | Params | 
| Public Member Functions | |
| BaseSetAssoc (const Params &p) | |
| Construct and initialize this tag store.  More... | |
| virtual | ~BaseSetAssoc () | 
| Destructor.  More... | |
| void | tagsInit () override | 
| Initialize blocks as CacheBlk instances.  More... | |
| void | invalidate (CacheBlk *blk) override | 
| This function updates the tags when a block is invalidated.  More... | |
| CacheBlk * | accessBlock (const PacketPtr pkt, Cycles &lat) override | 
| Access block and update replacement data.  More... | |
| CacheBlk * | findVictim (Addr addr, const bool is_secure, const std::size_t size, std::vector< CacheBlk * > &evict_blks) override | 
| Find replacement victim based on address.  More... | |
| void | insertBlock (const PacketPtr pkt, CacheBlk *blk) override | 
| Insert the new block into the cache and update replacement data.  More... | |
| void | moveBlock (CacheBlk *src_blk, CacheBlk *dest_blk) override | 
| Move a block's metadata to another location decided by the replacement policy.  More... | |
| virtual void | setWayAllocationMax (int ways) override | 
| Limit the allocation for the cache ways.  More... | |
| virtual int | getWayAllocationMax () const override | 
| Get the way allocation mask limit.  More... | |
| Addr | regenerateBlkAddr (const CacheBlk *blk) const override | 
| Regenerate the block address from the tag and indexing location.  More... | |
| void | forEachBlk (std::function< void(CacheBlk &)> visitor) override | 
| Visit each block in the tags and apply a visitor.  More... | |
| bool | anyBlk (std::function< bool(CacheBlk &)> visitor) override | 
| Find if any of the blocks satisfies a condition.  More... | |
|  Public Member Functions inherited from gem5::BaseTags | |
| BaseTags (const Params &p) | |
| virtual | ~BaseTags () | 
| Destructor.  More... | |
| void | cleanupRefs () | 
| Average in the reference count for valid blocks when the simulation exits.  More... | |
| void | computeStats () | 
| Computes stats just prior to dump event.  More... | |
| std::string | print () | 
| Print all tags used.  More... | |
| virtual CacheBlk * | findBlock (Addr addr, bool is_secure) const | 
| Finds the block in the cache without touching it.  More... | |
| virtual ReplaceableEntry * | findBlockBySetAndWay (int set, int way) const | 
| Find a block given set and way.  More... | |
| Addr | blkAlign (Addr addr) const | 
| Align an address to the block size.  More... | |
| int | extractBlkOffset (Addr addr) const | 
| Calculate the block offset of an address.  More... | |
| virtual Addr | extractTag (const Addr addr) const | 
| Generate the tag from the given address.  More... | |
|  Public Member Functions inherited from gem5::ClockedObject | |
| ClockedObject (const ClockedObjectParams &p) | |
| void | serialize (CheckpointOut &cp) const override | 
| Serialize an object.  More... | |
| void | unserialize (CheckpointIn &cp) override | 
| Unserialize an object.  More... | |
|  Public Member Functions inherited from gem5::SimObject | |
| const Params & | params () const | 
| SimObject (const Params &p) | |
| virtual | ~SimObject () | 
| virtual void | init () | 
| init() is called after all C++ SimObjects have been created and all ports are connected.  More... | |
| virtual void | loadState (CheckpointIn &cp) | 
| loadState() is called on each SimObject when restoring from a checkpoint.  More... | |
| virtual void | initState () | 
| initState() is called on each SimObject when not restoring from a checkpoint.  More... | |
| virtual void | regProbePoints () | 
| Register probe points for this object.  More... | |
| virtual void | regProbeListeners () | 
| Register probe listeners for this object.  More... | |
| ProbeManager * | getProbeManager () | 
| Get the probe manager for this object.  More... | |
| virtual Port & | getPort (const std::string &if_name, PortID idx=InvalidPortID) | 
| Get a port with a given name and index.  More... | |
| virtual void | startup () | 
| startup() is the final initialization call before simulation.  More... | |
| DrainState | drain () override | 
| Provide a default implementation of the drain interface for objects that don't need draining.  More... | |
| virtual void | memWriteback () | 
| Write back dirty buffers to memory using functional writes.  More... | |
| virtual void | memInvalidate () | 
| Invalidate the contents of memory buffers.  More... | |
| void | serialize (CheckpointOut &cp) const override | 
| Serialize an object.  More... | |
| void | unserialize (CheckpointIn &cp) override | 
| Unserialize an object.  More... | |
|  Public Member Functions inherited from gem5::EventManager | |
| EventQueue * | eventQueue () const | 
| void | schedule (Event &event, Tick when) | 
| void | deschedule (Event &event) | 
| void | reschedule (Event &event, Tick when, bool always=false) | 
| void | schedule (Event *event, Tick when) | 
| void | deschedule (Event *event) | 
| void | reschedule (Event *event, Tick when, bool always=false) | 
| void | wakeupEventQueue (Tick when=(Tick) -1) | 
| This function is not needed by the usual gem5 event loop but may be necessary in derived EventQueues which host gem5 on other schedulers.  More... | |
| void | setCurTick (Tick newVal) | 
| EventManager (EventManager &em) | |
| Event manger manages events in the event queue.  More... | |
| EventManager (EventManager *em) | |
| EventManager (EventQueue *eq) | |
|  Public Member Functions inherited from gem5::Serializable | |
| Serializable () | |
| virtual | ~Serializable () | 
| void | serializeSection (CheckpointOut &cp, const char *name) const | 
| Serialize an object into a new section.  More... | |
| void | serializeSection (CheckpointOut &cp, const std::string &name) const | 
| void | unserializeSection (CheckpointIn &cp, const char *name) | 
| Unserialize an a child object.  More... | |
| void | unserializeSection (CheckpointIn &cp, const std::string &name) | 
|  Public Member Functions inherited from gem5::Drainable | |
| DrainState | drainState () const | 
| Return the current drain state of an object.  More... | |
| virtual void | notifyFork () | 
| Notify a child process of a fork.  More... | |
|  Public Member Functions inherited from gem5::statistics::Group | |
| Group (Group *parent, const char *name=nullptr) | |
| Construct a new statistics group.  More... | |
| virtual | ~Group () | 
| virtual void | regStats () | 
| Callback to set stat parameters.  More... | |
| virtual void | resetStats () | 
| Callback to reset stats.  More... | |
| virtual void | preDumpStats () | 
| Callback before stats are dumped.  More... | |
| void | addStat (statistics::Info *info) | 
| Register a stat with this group.  More... | |
| const std::map< std::string, Group * > & | getStatGroups () const | 
| Get all child groups associated with this object.  More... | |
| const std::vector< Info * > & | getStats () const | 
| Get all stats associated with this object.  More... | |
| void | addStatGroup (const char *name, Group *block) | 
| Add a stat block as a child of this block.  More... | |
| const Info * | resolveStat (std::string name) const | 
| Resolve a stat by its name within this group.  More... | |
| void | mergeStatGroup (Group *block) | 
| Merge the contents (stats & children) of a block to this block.  More... | |
| Group ()=delete | |
| Group (const Group &)=delete | |
| Group & | operator= (const Group &)=delete | 
|  Public Member Functions inherited from gem5::Named | |
| Named (const std::string &name_) | |
| virtual | ~Named ()=default | 
| virtual std::string | name () const | 
|  Public Member Functions inherited from gem5::Clocked | |
| void | updateClockPeriod () | 
| Update the tick to the current tick.  More... | |
| Tick | clockEdge (Cycles cycles=Cycles(0)) const | 
| Determine the tick when a cycle begins, by default the current one, but the argument also enables the caller to determine a future cycle.  More... | |
| Cycles | curCycle () const | 
| Determine the current cycle, corresponding to a tick aligned to a clock edge.  More... | |
| Tick | nextCycle () const | 
| Based on the clock of the object, determine the start tick of the first cycle that is at least one cycle in the future.  More... | |
| uint64_t | frequency () const | 
| Tick | clockPeriod () const | 
| double | voltage () const | 
| Cycles | ticksToCycles (Tick t) const | 
| Tick | cyclesToTicks (Cycles c) const | 
| Protected Attributes | |
| unsigned | allocAssoc | 
| The allocatable associativity of the cache (alloc mask).  More... | |
| std::vector< CacheBlk > | blks | 
| The cache blocks.  More... | |
| const bool | sequentialAccess | 
| Whether tags and data are accessed sequentially.  More... | |
| replacement_policy::Base * | replacementPolicy | 
| Replacement policy.  More... | |
|  Protected Attributes inherited from gem5::BaseTags | |
| const unsigned | blkSize | 
| The block size of the cache.  More... | |
| const Addr | blkMask | 
| Mask out all bits that aren't part of the block offset.  More... | |
| const unsigned | size | 
| The size of the cache.  More... | |
| const Cycles | lookupLatency | 
| The tag lookup latency of the cache.  More... | |
| System * | system | 
| System we are currently operating in.  More... | |
| BaseIndexingPolicy * | indexingPolicy | 
| Indexing policy.  More... | |
| const unsigned | warmupBound | 
| The number of tags that need to be touched to meet the warmup percentage.  More... | |
| bool | warmedUp | 
| Marked true when the cache is warmed up.  More... | |
| const unsigned | numBlocks | 
| the number of blocks in the cache  More... | |
| std::unique_ptr< uint8_t[]> | dataBlks | 
| The data blocks, 1 per cache block.  More... | |
| gem5::BaseTags::BaseTagStats | stats | 
|  Protected Attributes inherited from gem5::SimObject | |
| const SimObjectParams & | _params | 
| Cached copy of the object parameters.  More... | |
|  Protected Attributes inherited from gem5::EventManager | |
| EventQueue * | eventq | 
| A pointer to this object's event queue.  More... | |
| Additional Inherited Members | |
|  Static Public Member Functions inherited from gem5::SimObject | |
| static void | serializeAll (const std::string &cpt_dir) | 
| Create a checkpoint by serializing all SimObjects in the system.  More... | |
| static SimObject * | find (const char *name) | 
| Find the SimObject with the given name and return a pointer to it.  More... | |
| static void | setSimObjectResolver (SimObjectResolver *resolver) | 
| There is a single object name resolver, and it is only set when simulation is restoring from checkpoints.  More... | |
| static SimObjectResolver * | getSimObjectResolver () | 
| There is a single object name resolver, and it is only set when simulation is restoring from checkpoints.  More... | |
|  Static Public Member Functions inherited from gem5::Serializable | |
| static const std::string & | currentSection () | 
| Gets the fully-qualified name of the active section.  More... | |
| static void | generateCheckpointOut (const std::string &cpt_dir, std::ofstream &outstream) | 
| Generate a checkpoint file so that the serialization can be routed to it.  More... | |
|  Public Attributes inherited from gem5::ClockedObject | |
| PowerState * | powerState | 
|  Protected Member Functions inherited from gem5::Drainable | |
| Drainable () | |
| virtual | ~Drainable () | 
| virtual void | drainResume () | 
| Resume execution after a successful drain.  More... | |
| void | signalDrainDone () const | 
| Signal that an object is drained.  More... | |
|  Protected Member Functions inherited from gem5::Clocked | |
| Clocked (ClockDomain &clk_domain) | |
| Create a clocked object and set the clock domain based on the parameters.  More... | |
| Clocked (Clocked &)=delete | |
| Clocked & | operator= (Clocked &)=delete | 
| virtual | ~Clocked () | 
| Virtual destructor due to inheritance.  More... | |
| void | resetClock () const | 
| Reset the object's clock using the current global tick value.  More... | |
| virtual void | clockPeriodUpdated () | 
| A hook subclasses can implement so they can do any extra work that's needed when the clock rate is changed.  More... | |
A basic cache tag store.
The BaseSetAssoc placement policy divides the cache into s sets of w cache lines (ways).
Definition at line 75 of file base_set_assoc.hh.
| typedef BaseSetAssocParams gem5::BaseSetAssoc::Params | 
Convenience typedef.
Definition at line 92 of file base_set_assoc.hh.
| gem5::BaseSetAssoc::BaseSetAssoc | ( | const Params & | p | ) | 
Construct and initialize this tag store.
Definition at line 55 of file base_set_assoc.cc.
References gem5::BaseTags::blkSize, fatal, fatal_if, gem5::isPowerOf2(), and gem5::MipsISA::p.
| 
 | inlinevirtual | 
Destructor.
Definition at line 102 of file base_set_assoc.hh.
| 
 | inlineoverridevirtual | 
Access block and update replacement data.
May not succeed, in which case nullptr is returned. This has all the implications of a cache access and should only be used as such. Returns the tag lookup latency as a side effect.
| pkt | The packet holding the address to find. | 
| lat | The latency of the tag lookup. | 
Implements gem5::BaseTags.
Definition at line 127 of file base_set_assoc.hh.
References allocAssoc, gem5::BaseTags::BaseTagStats::dataAccesses, gem5::BaseTags::findBlock(), gem5::Packet::getAddr(), gem5::CacheBlk::increaseRefCount(), gem5::Packet::isSecure(), gem5::BaseTags::lookupLatency, gem5::ReplaceableEntry::replacementData, replacementPolicy, sequentialAccess, gem5::BaseTags::stats, gem5::BaseTags::BaseTagStats::tagAccesses, and gem5::replacement_policy::Base::touch().
| 
 | inlineoverridevirtual | 
Find if any of the blocks satisfies a condition.
The visitor should be a std::function that takes a cache block reference as its parameter. The visitor will terminate the traversal early if the condition is satisfied.
| visitor | Visitor to call on each block. | 
Implements gem5::BaseTags.
Definition at line 242 of file base_set_assoc.hh.
References blks.
| 
 | inlineoverridevirtual | 
Find replacement victim based on address.
The list of evicted blocks only contains the victim.
| addr | Address to find a victim for. | 
| is_secure | True if the target memory space is secure. | 
| size | Size, in bits, of new block to allocate. | 
| evict_blks | Cache blocks to be evicted. | 
Implements gem5::BaseTags.
Definition at line 168 of file base_set_assoc.hh.
References gem5::X86ISA::addr, gem5::BaseIndexingPolicy::getPossibleEntries(), gem5::replacement_policy::Base::getVictim(), gem5::BaseTags::indexingPolicy, and replacementPolicy.
| 
 | inlineoverridevirtual | 
Visit each block in the tags and apply a visitor.
The visitor should be a std::function that takes a cache block reference as its parameter.
| visitor | Visitor to call on each block. | 
Implements gem5::BaseTags.
Definition at line 236 of file base_set_assoc.hh.
References blks.
| 
 | inlineoverridevirtual | 
Get the way allocation mask limit.
Reimplemented from gem5::BaseTags.
Definition at line 220 of file base_set_assoc.hh.
References allocAssoc.
Insert the new block into the cache and update replacement data.
| pkt | Packet holding the address to update | 
| blk | The block to update. | 
Reimplemented from gem5::BaseTags.
Definition at line 192 of file base_set_assoc.hh.
References gem5::BaseTags::insertBlock(), gem5::ReplaceableEntry::replacementData, replacementPolicy, gem5::replacement_policy::Base::reset(), gem5::BaseTags::stats, and gem5::BaseTags::BaseTagStats::tagsInUse.
| 
 | overridevirtual | 
This function updates the tags when a block is invalidated.
It also updates the replacement data.
| blk | The block to invalidate. | 
Reimplemented from gem5::BaseTags.
Definition at line 89 of file base_set_assoc.cc.
References gem5::replacement_policy::Base::invalidate(), gem5::BaseTags::invalidate(), gem5::ReplaceableEntry::replacementData, replacementPolicy, gem5::BaseTags::stats, and gem5::BaseTags::BaseTagStats::tagsInUse.
Move a block's metadata to another location decided by the replacement policy.
It behaves as a swap, however, since the destination block should be invalid, the result is a move.
| src_blk | The source block. | 
| dest_blk | The destination block. Must be invalid. | 
Reimplemented from gem5::BaseTags.
Definition at line 101 of file base_set_assoc.cc.
References gem5::replacement_policy::Base::invalidate(), gem5::BaseTags::moveBlock(), gem5::ReplaceableEntry::replacementData, replacementPolicy, and gem5::replacement_policy::Base::reset().
Regenerate the block address from the tag and indexing location.
| block | The block. | 
Implements gem5::BaseTags.
Definition at line 231 of file base_set_assoc.hh.
References gem5::TaggedEntry::getTag(), gem5::BaseTags::indexingPolicy, and gem5::BaseIndexingPolicy::regenerateAddr().
| 
 | inlineoverridevirtual | 
Limit the allocation for the cache ways.
| ways | The maximum number of ways available for replacement. | 
Reimplemented from gem5::BaseTags.
Definition at line 210 of file base_set_assoc.hh.
References allocAssoc, and fatal_if.
| 
 | overridevirtual | 
Initialize blocks as CacheBlk instances.
Implements gem5::BaseTags.
Definition at line 70 of file base_set_assoc.cc.
References blks, gem5::BaseTags::blkSize, gem5::CacheBlk::data, gem5::BaseTags::dataBlks, gem5::BaseTags::indexingPolicy, gem5::replacement_policy::Base::instantiateEntry(), gem5::BaseTags::numBlocks, gem5::ReplaceableEntry::replacementData, replacementPolicy, and gem5::BaseIndexingPolicy::setEntry().
| 
 | protected | 
The allocatable associativity of the cache (alloc mask).
Definition at line 79 of file base_set_assoc.hh.
Referenced by accessBlock(), getWayAllocationMax(), and setWayAllocationMax().
| 
 | protected | 
The cache blocks.
Definition at line 82 of file base_set_assoc.hh.
Referenced by anyBlk(), forEachBlk(), and tagsInit().
| 
 | protected | 
Replacement policy.
Definition at line 88 of file base_set_assoc.hh.
Referenced by accessBlock(), findVictim(), insertBlock(), invalidate(), moveBlock(), and tagsInit().
| 
 | protected | 
Whether tags and data are accessed sequentially.
Definition at line 85 of file base_set_assoc.hh.
Referenced by accessBlock().