gem5  v20.1.0.0
Public Member Functions | Private Attributes | List of all members
MSHRQueue Class Reference

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

#include <mshr_queue.hh>

Inheritance diagram for MSHRQueue:
Queue< MSHR > Drainable

Public Member Functions

 MSHRQueue (const std::string &_label, int num_entries, int reserve, int demand_reserve)
 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 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 Queue< MSHR >
 Queue (const std::string &_label, int num_entries, int reserve)
 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
 
void deallocate (MSHR *entry)
 Removes the given entry from the queue. More...
 
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 Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Private Attributes

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

Additional Inherited Members

- Protected Member Functions inherited from Queue< MSHR >
MSHR ::Iterator addToReadyList (MSHR *entry)
 
- Protected Member Functions inherited from 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 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 58 of file mshr_queue.hh.

Constructor & Destructor Documentation

◆ MSHRQueue()

MSHRQueue::MSHRQueue ( const std::string &  _label,
int  num_entries,
int  reserve,
int  demand_reserve 
)

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 51 of file mshr_queue.cc.

Member Function Documentation

◆ allocate()

MSHR * 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 58 of file mshr_queue.cc.

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

Referenced by BaseCache::allocateMissBuffer().

◆ canPrefetch()

bool MSHRQueue::canPrefetch ( ) const
inline

Returns true if sufficient mshrs for prefetch.

Returns
True if sufficient mshrs for prefetch.

Definition at line 150 of file mshr_queue.hh.

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

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

◆ delay()

void 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 85 of file mshr_queue.cc.

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

Referenced by BaseCache::sendMSHRQueuePacket().

◆ forceDeallocateTarget()

bool MSHRQueue::forceDeallocateTarget ( MSHR mshr)

Deallocate top target, possibly freeing the MSHR.

Returns
if MSHR queue is no longer full

Definition at line 117 of file mshr_queue.cc.

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

Referenced by Cache::sendMSHRQueuePacket().

◆ havePending()

bool MSHRQueue::havePending ( ) const
inline

Returns true if the pending list is not empty.

Returns
True if there are outstanding requests.

Definition at line 141 of file mshr_queue.hh.

References Queue< MSHR >::readyList.

◆ markInService()

void 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 96 of file mshr_queue.cc.

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

Referenced by BaseCache::markInService().

◆ markPending()

void 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 104 of file mshr_queue.cc.

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

Referenced by BaseCache::recvTimingResp().

◆ moveToFront()

void 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 75 of file mshr_queue.cc.

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

Member Data Documentation

◆ demandReserve

const int MSHRQueue::demandReserve
private

The number of entries to reserve for future demand accesses.

Prevent prefetcher from taking all mshr entries

Definition at line 66 of file mshr_queue.hh.

Referenced by canPrefetch().


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

Generated on Wed Sep 30 2020 14:02:28 for gem5 by doxygen 1.8.17