gem5  v20.1.0.0
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
DistIface::RecvScheduler Class Reference

Class to encapsulate information about data packets received. More...

Inheritance diagram for DistIface::RecvScheduler:
Serializable

Classes

struct  Desc
 Received packet descriptor. More...
 

Public Member Functions

 RecvScheduler (EventManager *em)
 Scheduler for the incoming data packets. More...
 
void init (Event *recv_done, Tick link_delay)
 Initialize network link parameters. More...
 
EthPacketPtr popPacket ()
 Fetch the next packet that is to be received by the simulated network link. More...
 
void pushPacket (EthPacketPtr new_packet, Tick send_tick, Tick send_delay)
 Push a newly arrived packet into the desc queue. More...
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
void resumeRecvTicks ()
 Adjust receive ticks for pending packets when restoring from a checkpoint. More...
 
- Public Member Functions inherited from 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)
 

Private Member Functions

Tick calcReceiveTick (Tick send_tick, Tick send_delay, Tick prev_recv_tick)
 Calculate the tick to schedule the next receive done event. More...
 

Private Attributes

std::queue< DescdescQueue
 The queue to store the receive descriptors. More...
 
Tick prevRecvTick
 The tick when the most recent receive event was processed. More...
 
EventrecvDone
 The receive done event for the simulated Ethernet link. More...
 
Tick linkDelay
 The link delay in ticks for the simulated Ethernet link. More...
 
EventManagereventManager
 The event manager associated with the simulated Ethernet link. More...
 
bool ckptRestore
 Flag to set if receive ticks for pending packets need to be recalculated due to changed link latencies at a resume. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 Serializes all the SimObjects. More...
 
static void unserializeGlobals (CheckpointIn &cp)
 

Detailed Description

Class to encapsulate information about data packets received.

Note
The main purpose of the class to take care of scheduling receive done events for the simulated network link and store incoming packets until they can be received by the simulated network link.

Definition at line 331 of file dist_iface.hh.

Constructor & Destructor Documentation

◆ RecvScheduler()

DistIface::RecvScheduler::RecvScheduler ( EventManager em)
inline

Scheduler for the incoming data packets.

Parameters
emThe event manager associated with the simulated Ethernet link.

Definition at line 416 of file dist_iface.hh.

Member Function Documentation

◆ calcReceiveTick()

Tick DistIface::RecvScheduler::calcReceiveTick ( Tick  send_tick,
Tick  send_delay,
Tick  prev_recv_tick 
)
private

Calculate the tick to schedule the next receive done event.

Parameters
send_tickThe tick the packet was sent.
send_delayThe simulated delay at the sender side.
prev_recv_tickTick when the last receive event was processed.
Note
This method tries to take into account possible receiver link contention and adjust receive tick for the incoming packets accordingly.

Definition at line 441 of file dist_iface.cc.

References curTick(), and panic_if.

◆ init()

void DistIface::RecvScheduler::init ( Event recv_done,
Tick  link_delay 
)

Initialize network link parameters.

Note
This method is called from the receiver thread (see recvThreadFunc()).

Definition at line 429 of file dist_iface.cc.

References curEventQueue().

Referenced by DistIface::recvThreadFunc().

◆ popPacket()

EthPacketPtr DistIface::RecvScheduler::popPacket ( )

Fetch the next packet that is to be received by the simulated network link.

Note
This method is called from the process() method of the receive done event associated with the network link.

Definition at line 532 of file dist_iface.cc.

References curTick().

Referenced by DistIface::packetIn().

◆ pushPacket()

void DistIface::RecvScheduler::pushPacket ( EthPacketPtr  new_packet,
Tick  send_tick,
Tick  send_delay 
)

Push a newly arrived packet into the desc queue.

Definition at line 494 of file dist_iface.cc.

References curEventQueue(), DPRINTF, EventQueue::lock(), panic_if, and EventQueue::unlock().

Referenced by DistIface::recvThreadFunc().

◆ resumeRecvTicks()

void DistIface::RecvScheduler::resumeRecvTicks ( )

Adjust receive ticks for pending packets when restoring from a checkpoint.

Note
Link speed and delay parameters may change at resume.

Definition at line 461 of file dist_iface.cc.

References curTick(), ArmISA::d, and ArmISA::v.

Referenced by DistIface::drainResume().

◆ serialize()

void DistIface::RecvScheduler::serialize ( CheckpointOut cp) const
overridevirtual

Serialize an object.

Output an object's state into the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 568 of file dist_iface.cc.

References csprintf(), ArmISA::i, and SERIALIZE_SCALAR.

◆ unserialize()

void DistIface::RecvScheduler::unserialize ( CheckpointIn cp)
overridevirtual

Unserialize an object.

Read an object's state from the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 584 of file dist_iface.cc.

References csprintf(), ArmISA::i, UNSERIALIZE_SCALAR, and Serializable::unserializeSection().

Member Data Documentation

◆ ckptRestore

bool DistIface::RecvScheduler::ckptRestore
private

Flag to set if receive ticks for pending packets need to be recalculated due to changed link latencies at a resume.

Definition at line 407 of file dist_iface.hh.

◆ descQueue

std::queue<Desc> DistIface::RecvScheduler::descQueue
private

The queue to store the receive descriptors.

Definition at line 357 of file dist_iface.hh.

◆ eventManager

EventManager* DistIface::RecvScheduler::eventManager
private

The event manager associated with the simulated Ethernet link.

Note
It is used to access the event queue for scheduling receive done events for the link.

Definition at line 386 of file dist_iface.hh.

◆ linkDelay

Tick DistIface::RecvScheduler::linkDelay
private

The link delay in ticks for the simulated Ethernet link.

Note
This value is used for calculating the receive ticks for incoming data packets.

Definition at line 379 of file dist_iface.hh.

◆ prevRecvTick

Tick DistIface::RecvScheduler::prevRecvTick
private

The tick when the most recent receive event was processed.

Note
This information is necessary to simulate possible receiver link contention when calculating the receive tick for the next incoming data packet (see the calcReceiveTick() method)

Definition at line 365 of file dist_iface.hh.

◆ recvDone

Event* DistIface::RecvScheduler::recvDone
private

The receive done event for the simulated Ethernet link.

Note
This object is constructed by the simulated network link. We schedule this object for each incoming data packet.

Definition at line 372 of file dist_iface.hh.


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

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