gem5  v21.1.0.2
Public Member Functions | Private Attributes | List of all members
gem5::MSHRQueue Class Reference

A Class for maintaining a list of pending and allocated memory requests. More...

#include <mshr_queue.hh>

Inheritance diagram for gem5::MSHRQueue:
gem5::Queue< MSHR > gem5::Drainable gem5::Named

Public Member Functions

 MSHRQueue (const std::string &_label, int num_entries, int reserve, int demand_reserve, std::string cache_name)
 Create a queue with a given number of entries. More...
 
MSHRallocate (Addr blk_addr, unsigned blk_size, PacketPtr pkt, Tick when_ready, Counter order, bool alloc_on_fill)
 Allocates a new MSHR for the request and size. More...
 
void deallocate (MSHR *mshr) override
 Deallocate a MSHR and its targets. More...
 
void moveToFront (MSHR *mshr)
 Moves the MSHR to the front of the pending list if it is not in service. More...
 
void delay (MSHR *mshr, Tick delay_ticks)
 Adds a delay to the provided MSHR and moves MSHRs that will be ready earlier than this entry to the top of the list. More...
 
void markInService (MSHR *mshr, bool pending_modified_resp)
 Mark the given MSHR as in service. More...
 
void markPending (MSHR *mshr)
 Mark an in service entry as pending, used to resend a request. More...
 
bool forceDeallocateTarget (MSHR *mshr)
 Deallocate top target, possibly freeing the MSHR. More...
 
bool havePending () const
 Returns true if the pending list is not empty. More...
 
bool canPrefetch () const
 Returns true if sufficient mshrs for prefetch. More...
 
- Public Member Functions inherited from gem5::Queue< MSHR >
 Queue (const std::string &_label, int num_entries, int reserve, const std::string &name)
 Create a queue with a given number of entries. More...
 
bool isEmpty () const
 
bool isFull () const
 
int numInService () const
 
MSHRfindMatch (Addr blk_addr, bool is_secure, bool ignore_uncacheable=true) const
 Find the first entry that matches the provided address. More...
 
bool trySatisfyFunctional (PacketPtr pkt)
 
MSHRfindPending (const QueueEntry *entry) const
 Find any pending requests that overlap the given request of a different queue. More...
 
MSHRgetNext () const
 Returns the WriteQueueEntry at the head of the readyList. More...
 
Tick nextReadyTime () const
 
DrainState drain () override
 Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight. More...
 
- 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::Named
 Named (const std::string &name_)
 
virtual ~Named ()=default
 
virtual std::string name () const
 

Private Attributes

const int demandReserve
 The number of entries to reserve for future demand accesses. More...
 

Additional Inherited Members

- Protected Member Functions inherited from gem5::Queue< MSHR >
MSHR ::Iterator addToReadyList (MSHR *entry)
 
- 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 Attributes inherited from gem5::Queue< MSHR >
const std::string label
 Local label (for functional print requests) More...
 
const int numEntries
 The total number of entries in this queue. More...
 
const int numReserve
 The number of entries to hold as a temporary overflow space. More...
 
std::vector< MSHRentries
 Actual storage. More...
 
MSHR ::List allocatedList
 Holds pointers to all allocated entries. More...
 
MSHR ::List readyList
 Holds pointers to entries that haven't been sent downstream. More...
 
MSHR ::List freeList
 Holds non allocated entries. More...
 
int _numInService
 The number of entries that are in service. More...
 
int allocated
 The number of currently allocated entries. More...
 

Detailed Description

A Class for maintaining a list of pending and allocated memory requests.

Definition at line 61 of file mshr_queue.hh.

Constructor & Destructor Documentation

◆ MSHRQueue()

gem5::MSHRQueue::MSHRQueue ( const std::string &  _label,
int  num_entries,
int  reserve,
int  demand_reserve,
std::string  cache_name = "" 
)

Create a queue with a given number of entries.

Parameters
num_entrysThe number of entries in this queue.
reserveThe minimum number of entries needed to satisfy any access.
demand_reserveThe minimum number of entries needed to satisfy demand accesses.

Definition at line 55 of file mshr_queue.cc.

Member Function Documentation

◆ allocate()

MSHR * gem5::MSHRQueue::allocate ( Addr  blk_addr,
unsigned  blk_size,
PacketPtr  pkt,
Tick  when_ready,
Counter  order,
bool  alloc_on_fill 
)

Allocates a new MSHR for the request and size.

This places the request as the first target in the MSHR.

Parameters
blk_addrThe address of the block.
blk_sizeThe number of bytes to request.
pktThe original miss.
when_readyWhen should the MSHR be ready to act upon.
orderThe logical order of this MSHR
alloc_on_fillShould the cache allocate a block on fill
Returns
The a pointer to the MSHR allocated.
Precondition
There are free entries.

Definition at line 63 of file mshr_queue.cc.

References gem5::Queue< MSHR >::addToReadyList(), gem5::MSHR::allocate(), gem5::Queue< MSHR >::allocated, gem5::Queue< MSHR >::allocatedList, gem5::MSHR::allocIter, DPRINTF, gem5::Queue< MSHR >::freeList, gem5::MSHR::getNumTargets(), gem5::Queue< MSHR >::numEntries, and gem5::MSHR::readyIter.

Referenced by gem5::BaseCache::allocateMissBuffer().

◆ canPrefetch()

bool gem5::MSHRQueue::canPrefetch ( ) const
inline

Returns true if sufficient mshrs for prefetch.

Returns
True if sufficient mshrs for prefetch.

Definition at line 158 of file mshr_queue.hh.

References gem5::Queue< MSHR >::allocated, demandReserve, gem5::Queue< MSHR >::numEntries, and gem5::Queue< MSHR >::numReserve.

Referenced by gem5::BaseCache::getNextQueueEntry(), gem5::BaseCache::nextQueueReadyTime(), and gem5::BaseCache::recvTimingResp().

◆ deallocate()

void gem5::MSHRQueue::deallocate ( MSHR mshr)
overridevirtual

◆ delay()

void gem5::MSHRQueue::delay ( MSHR mshr,
Tick  delay_ticks 
)

Adds a delay to the provided MSHR and moves MSHRs that will be ready earlier than this entry to the top of the list.

Parameters
mshrthat needs to be delayed
delay_ticksticks of the desired delay

Definition at line 104 of file mshr_queue.cc.

References gem5::MSHR::delay(), gem5::MSHR::readyIter, and gem5::Queue< MSHR >::readyList.

Referenced by gem5::BaseCache::sendMSHRQueuePacket().

◆ forceDeallocateTarget()

bool gem5::MSHRQueue::forceDeallocateTarget ( MSHR mshr)

Deallocate top target, possibly freeing the MSHR.

Returns
if MSHR queue is no longer full

Definition at line 136 of file mshr_queue.cc.

References deallocate(), gem5::MSHR::hasTargets(), gem5::Queue< MSHR >::isFull(), gem5::MSHR::popTarget(), and gem5::MSHR::promoteDeferredTargets().

Referenced by gem5::Cache::sendMSHRQueuePacket().

◆ havePending()

bool gem5::MSHRQueue::havePending ( ) const
inline

Returns true if the pending list is not empty.

Returns
True if there are outstanding requests.

Definition at line 149 of file mshr_queue.hh.

References gem5::Queue< MSHR >::readyList.

◆ markInService()

void gem5::MSHRQueue::markInService ( MSHR mshr,
bool  pending_modified_resp 
)

Mark the given MSHR as in service.

This removes the MSHR from the readyList or deallocates the MSHR if it does not expect a response.

Parameters
mshrThe MSHR to mark in service.
pending_modified_respWhether we expect a modified response from another cache

Definition at line 115 of file mshr_queue.cc.

References gem5::Queue< MSHR >::_numInService, gem5::MSHR::markInService(), gem5::MSHR::readyIter, and gem5::Queue< MSHR >::readyList.

Referenced by gem5::BaseCache::markInService().

◆ markPending()

void gem5::MSHRQueue::markPending ( MSHR mshr)

Mark an in service entry as pending, used to resend a request.

Parameters
mshrThe MSHR to resend.

@ todo might want to add rerequests to front of pending list for performance.

Definition at line 123 of file mshr_queue.cc.

References gem5::Queue< MSHR >::_numInService, gem5::Queue< MSHR >::addToReadyList(), gem5::QueueEntry::inService, and gem5::MSHR::readyIter.

Referenced by gem5::BaseCache::recvTimingResp().

◆ moveToFront()

void gem5::MSHRQueue::moveToFront ( MSHR mshr)

Moves the MSHR to the front of the pending list if it is not in service.

Parameters
mshrThe entry to move.

Definition at line 94 of file mshr_queue.cc.

References gem5::QueueEntry::inService, gem5::MSHR::readyIter, and gem5::Queue< MSHR >::readyList.

Member Data Documentation

◆ demandReserve

const int gem5::MSHRQueue::demandReserve
private

The number of entries to reserve for future demand accesses.

Prevent prefetcher from taking all mshr entries

Definition at line 69 of file mshr_queue.hh.

Referenced by canPrefetch().


The documentation for this class was generated from the following files:

Generated on Tue Sep 21 2021 12:27:48 for gem5 by doxygen 1.8.17