gem5 v24.0.0.0
Loading...
Searching...
No Matches
gem5::DistIface Class Referenceabstract

The interface class to talk to peer gem5 processes. More...

#include <dist_iface.hh>

Inheritance diagram for gem5::DistIface:
gem5::Drainable gem5::Serializable gem5::TCPIface

Classes

class  RecvScheduler
 Class to encapsulate information about data packets received. More...
 
class  Sync
 This class implements global sync operations among gem5 peer processes. More...
 
class  SyncEvent
 The global event to schedule periodic dist sync. More...
 
class  SyncNode
 
class  SyncSwitch
 

Public Types

typedef DistHeaderPkt::Header Header
 

Public Member Functions

 DistIface (unsigned dist_rank, unsigned dist_size, Tick sync_start, Tick sync_repeat, EventManager *em, bool use_pseudo_op, bool is_switch, int num_nodes)
 ctor
 
virtual ~DistIface ()
 
void packetOut (EthPacketPtr pkt, Tick send_delay)
 Send out an Ethernet packet.
 
EthPacketPtr packetIn ()
 Fetch the packet scheduled to be received next by the simulated network link.
 
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.
 
void drainResume () override
 Resume execution after a successful drain.
 
void init (const Event *e, Tick link_delay)
 
void startup ()
 
void serialize (CheckpointOut &cp) const override
 Serialize an object.
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object.
 
- Public Member Functions inherited from gem5::Drainable
DrainState drainState () const
 Return the current drain state of an object.
 
virtual void notifyFork ()
 Notify a child process of a fork.
 
- 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.
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object.
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 

Static Public Member Functions

static bool readyToExit (Tick delay)
 Initiate the exit from the simulation.
 
static bool readyToCkpt (Tick delay, Tick period)
 Initiate taking a checkpoint.
 
static uint64_t rankParam ()
 Getter for the dist rank param.
 
static uint64_t sizeParam ()
 Getter for the dist size param.
 
static void toggleSync (ThreadContext *tc)
 Trigger the primary to start/stop synchronization.
 
- Static Public Member Functions inherited from gem5::Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section.
 
static void generateCheckpointOut (const std::string &cpt_dir, std::ofstream &outstream)
 Generate a checkpoint file so that the serialization can be routed to it.
 

Protected Types

typedef DistHeaderPkt::MsgType MsgType
 
typedef DistHeaderPkt::ReqType ReqType
 

Protected Attributes

unsigned rank
 The rank of this process among the gem5 peers.
 
unsigned size
 The number of gem5 processes comprising this dist simulation.
 
unsigned distIfaceId
 Unique id for the dist link.
 
bool isPrimary
 

Static Protected Attributes

static unsigned distIfaceNum = 0
 Number of DistIface objects (i.e.
 

Private Member Functions

virtual void sendPacket (const Header &header, const EthPacketPtr &packet)=0
 Send out a data packet to the remote end.
 
virtual void sendCmd (const Header &header)=0
 Send out a control command to the remote end.
 
virtual bool recvHeader (Header &header)=0
 Receive a header (i.e.
 
virtual void recvPacket (const Header &header, EthPacketPtr &packet)=0
 Receive a packet from the remote end.
 
virtual void initTransport ()=0
 Init hook for the underlaying transport.
 
void spawnRecvThread (const Event *recv_done, Tick link_delay)
 spawn the receiver thread.
 
void recvThreadFunc (Event *recv_done, Tick link_delay)
 The function executed by a receiver thread.
 

Private Attributes

Tick syncStart
 Tick to schedule the first dist sync event.
 
Tick syncRepeat
 Frequency of dist sync events in ticks.
 
std::thread * recvThread
 Receiver thread pointer.
 
RecvScheduler recvScheduler
 Meta information about data packets received.
 
bool syncStartOnPseudoOp
 Use pseudoOp to start synchronization.
 

Static Private Attributes

static unsigned recvThreadsNum = 0
 Number of receiver threads (in this gem5 process)
 
static Syncsync = nullptr
 The singleton Sync object to perform dist synchronisation.
 
static SyncEventsyncEvent = nullptr
 The singleton SyncEvent object to schedule periodic dist sync.
 
static DistIfaceprimary = nullptr
 The very first DistIface object created becomes the primary interface.
 
static Systemsys = nullptr
 System pointer used to wakeup sleeping threads when stopping sync.
 
static bool isSwitch = false
 Is this node a switch?
 

Additional Inherited Members

- Protected Member Functions inherited from gem5::Drainable
 Drainable ()
 
virtual ~Drainable ()
 
void signalDrainDone () const
 Signal that an object is drained.
 

Detailed Description

The interface class to talk to peer gem5 processes.

Definition at line 101 of file dist_iface.hh.

Member Typedef Documentation

◆ Header

Definition at line 104 of file dist_iface.hh.

◆ MsgType

Definition at line 107 of file dist_iface.hh.

◆ ReqType

Definition at line 108 of file dist_iface.hh.

Constructor & Destructor Documentation

◆ DistIface()

gem5::DistIface::DistIface ( unsigned dist_rank,
unsigned dist_size,
Tick sync_start,
Tick sync_repeat,
EventManager * em,
bool use_pseudo_op,
bool is_switch,
int num_nodes )

ctor

Parameters
dist_rankRank of this gem5 process within the dist run
sync_startStart tick for dist synchronisation
sync_repeatFrequency for dist synchronisation
emThe event manager associated with the simulated Ethernet link

Definition at line 605 of file dist_iface.cc.

References distIfaceId, distIfaceNum, DPRINTF, isPrimary, isSwitch, primary, sync, and syncEvent.

◆ ~DistIface()

gem5::DistIface::~DistIface ( )
virtual

Definition at line 634 of file dist_iface.cc.

References distIfaceNum, primary, recvThread, sync, and syncEvent.

Member Function Documentation

◆ drain()

DrainState gem5::DistIface::drain ( )
overridevirtual

Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are partially executed or are partially in flight.

Draining is mostly used before forking and creating a check point.

This function notifies an object that it needs to drain its state.

If the object does not need further simulation to drain internal buffers, it returns DrainState::Drained and automatically switches to the Drained state. If the object needs more simulation, it returns DrainState::Draining and automatically enters the Draining state. Other return values are invalid.

Note
An object that has entered the Drained state can be disturbed by other objects in the system and consequently stop being drained. These perturbations are not visible in the drain state. The simulator therefore repeats the draining process until all objects return DrainState::Drained on the first call to drain().
Returns
DrainState::Drained if the object is drained at this point in time, DrainState::Draining if it needs further simulation.

Implements gem5::Drainable.

Definition at line 730 of file dist_iface.cc.

References DPRINTF, gem5::Drained, gem5::DistIface::SyncEvent::draining(), primary, and syncEvent.

◆ drainResume()

void gem5::DistIface::drainResume ( )
overridevirtual

Resume execution after a successful drain.

Reimplemented from gem5::Drainable.

Definition at line 740 of file dist_iface.cc.

References DPRINTF, gem5::DistIface::SyncEvent::draining(), primary, recvScheduler, gem5::DistIface::RecvScheduler::resumeRecvTicks(), and syncEvent.

◆ init()

void gem5::DistIface::init ( const Event * e,
Tick link_delay )

◆ initTransport()

virtual void gem5::DistIface::initTransport ( )
privatepure virtual

Init hook for the underlaying transport.

Implemented in gem5::TCPIface.

Referenced by init().

◆ packetIn()

EthPacketPtr gem5::DistIface::packetIn ( )
inline

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

Note
This method is called within the process() method of the link receive done event. It also schedules the next receive event if the receive queue is not empty.

Definition at line 600 of file dist_iface.hh.

References gem5::DistIface::RecvScheduler::popPacket(), and recvScheduler.

Referenced by gem5::DistEtherLink::RxLink::rxDone().

◆ packetOut()

void gem5::DistIface::packetOut ( EthPacketPtr pkt,
Tick send_delay )

Send out an Ethernet packet.

Parameters
pktThe Ethernet packet to send.
send_delayThe delay in ticks for the send completion event.

Definition at line 650 of file dist_iface.cc.

References gem5::curTick(), DPRINTF, header, gem5::DistHeaderPkt::Header::msgType, and sendPacket().

Referenced by gem5::DistEtherLink::TxLink::transmit().

◆ rankParam()

uint64_t gem5::DistIface::rankParam ( )
static

Getter for the dist rank param.

Definition at line 916 of file dist_iface.cc.

References primary, rank, gem5::X86ISA::val, and warn.

Referenced by gem5::pseudo_inst::initParam().

◆ readyToCkpt()

bool gem5::DistIface::readyToCkpt ( Tick delay,
Tick period )
static

Initiate taking a checkpoint.

Parameters
delayDelay param from the m5 checkpoint command. If Delay is zero then a collaborative checkpoint is requested (i.e. all nodes have to call this method before the checkpoint can be taken). If Delay is not zero then a checkpoint is requested asap (and it will happen at the next sync tick).
Returns
False if we are in dist mode (i.e. exit can happen only at sync), True otherwise.

Definition at line 823 of file dist_iface.cc.

References DPRINTF, inform, primary, gem5::DistIface::Sync::requestCkpt(), and sync.

Referenced by gem5::pseudo_inst::m5checkpoint().

◆ readyToExit()

bool gem5::DistIface::readyToExit ( Tick delay)
static

Initiate the exit from the simulation.

Parameters
delayDelay param from the m5 exit command. If Delay is zero then a collaborative exit is requested (i.e. all nodes have to call this method before the distributed simulation can exit). If Delay is not zero then exit is requested asap (and it will happen at the next sync tick).
Returns
False if we are in distributed mode (i.e. exit can happen only at sync), True otherwise.

Definition at line 891 of file dist_iface.cc.

References DPRINTF, inform, primary, gem5::DistIface::Sync::requestExit(), gem5::BaseGlobalEvent::scheduled(), gem5::DistIface::SyncEvent::start(), sync, and syncEvent.

Referenced by gem5::exitImpl(), and gem5::pseudo_inst::m5exit().

◆ recvHeader()

virtual bool gem5::DistIface::recvHeader ( Header & header)
privatepure virtual

Receive a header (i.e.

meta info describing a data packet or a control command) from the remote end.

Parameters
headerThe meta info structure to store the incoming header.

Implemented in gem5::TCPIface.

Referenced by recvThreadFunc().

◆ recvPacket()

virtual void gem5::DistIface::recvPacket ( const Header & header,
EthPacketPtr & packet )
privatepure virtual

Receive a packet from the remote end.

Parameters
headerMeta info about the incoming packet (obtanied by a previous call to the recvHedaer() method).
Pointerto packet received.

Implemented in gem5::TCPIface.

Referenced by recvThreadFunc().

◆ recvThreadFunc()

◆ sendCmd()

virtual void gem5::DistIface::sendCmd ( const Header & header)
privatepure virtual

Send out a control command to the remote end.

Parameters
headerMeta info describing the command (e.g. sync request)

Implemented in gem5::TCPIface.

Referenced by gem5::DistIface::SyncNode::run(), and gem5::DistIface::SyncSwitch::run().

◆ sendPacket()

virtual void gem5::DistIface::sendPacket ( const Header & header,
const EthPacketPtr & packet )
privatepure virtual

Send out a data packet to the remote end.

Parameters
headerMeta info about the packet (which needs to be transferred to the destination alongside the packet).
packetPointer to the packet to send.

Implemented in gem5::TCPIface.

Referenced by packetOut().

◆ serialize()

void gem5::DistIface::serialize ( CheckpointOut & cp) const
overridevirtual

Serialize an object.

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

Parameters
cpCheckpoint state

Implements gem5::Serializable.

Definition at line 748 of file dist_iface.cc.

References distIfaceId, gem5::DistIface::Sync::drainComplete(), primary, rank, recvScheduler, SERIALIZE_SCALAR, gem5::Serializable::serializeSection(), and sync.

◆ sizeParam()

uint64_t gem5::DistIface::sizeParam ( )
static

Getter for the dist size param.

Definition at line 929 of file dist_iface.cc.

References primary, size, gem5::X86ISA::val, and warn.

Referenced by gem5::pseudo_inst::initParam().

◆ spawnRecvThread()

void gem5::DistIface::spawnRecvThread ( const Event * recv_done,
Tick link_delay )
private

spawn the receiver thread.

Parameters
recv_doneThe receive done event associated with the simulated Ethernet link.
link_delayThe link delay for the simulated Ethernet link.

Definition at line 718 of file dist_iface.cc.

References recvThread, recvThreadFunc(), and recvThreadsNum.

Referenced by init().

◆ startup()

void gem5::DistIface::startup ( )

◆ toggleSync()

◆ unserialize()

void gem5::DistIface::unserialize ( CheckpointIn & cp)
overridevirtual

Unserialize an object.

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

Parameters
cpCheckpoint state

Implements gem5::Serializable.

Definition at line 767 of file dist_iface.cc.

References distIfaceId, panic_if, primary, rank, recvScheduler, sync, UNSERIALIZE_SCALAR, and gem5::Serializable::unserializeSection().

Member Data Documentation

◆ distIfaceId

unsigned gem5::DistIface::distIfaceId
protected

Unique id for the dist link.

Definition at line 494 of file dist_iface.hh.

Referenced by DistIface(), gem5::TCPIface::establishConnection(), serialize(), and unserialize().

◆ distIfaceNum

unsigned gem5::DistIface::distIfaceNum = 0
staticprotected

Number of DistIface objects (i.e.

dist links in this gem5 process)

Definition at line 490 of file dist_iface.hh.

Referenced by DistIface(), gem5::TCPIface::establishConnection(), and ~DistIface().

◆ isPrimary

bool gem5::DistIface::isPrimary
protected

Definition at line 496 of file dist_iface.hh.

Referenced by DistIface(), and gem5::TCPIface::TCPIface().

◆ isSwitch

bool gem5::DistIface::isSwitch = false
staticprivate

Is this node a switch?

Definition at line 523 of file dist_iface.hh.

Referenced by DistIface(), gem5::DistIface::SyncEvent::process(), and startup().

◆ primary

DistIface * gem5::DistIface::primary = nullptr
staticprivate

The very first DistIface object created becomes the primary interface.

We need a primary interface to co-ordinate the global synchronisation.

Definition at line 515 of file dist_iface.hh.

Referenced by DistIface(), drain(), drainResume(), init(), gem5::DistIface::SyncEvent::process(), gem5::DistIface::RecvScheduler::pushPacket(), rankParam(), readyToCkpt(), readyToExit(), gem5::DistIface::SyncNode::run(), gem5::DistIface::SyncSwitch::run(), serialize(), sizeParam(), startup(), toggleSync(), unserialize(), and ~DistIface().

◆ rank

unsigned gem5::DistIface::rank
protected

The rank of this process among the gem5 peers.

Definition at line 482 of file dist_iface.hh.

Referenced by gem5::TCPIface::establishConnection(), init(), rankParam(), serialize(), and unserialize().

◆ recvScheduler

RecvScheduler gem5::DistIface::recvScheduler
private

Meta information about data packets received.

Definition at line 472 of file dist_iface.hh.

Referenced by drainResume(), packetIn(), recvThreadFunc(), serialize(), and unserialize().

◆ recvThread

std::thread* gem5::DistIface::recvThread
private

Receiver thread pointer.

Each DistIface object must have exactly one receiver thread.

Definition at line 468 of file dist_iface.hh.

Referenced by spawnRecvThread(), and ~DistIface().

◆ recvThreadsNum

unsigned gem5::DistIface::recvThreadsNum = 0
staticprivate

Number of receiver threads (in this gem5 process)

Definition at line 502 of file dist_iface.hh.

Referenced by gem5::DistIface::SyncNode::run(), and spawnRecvThread().

◆ size

unsigned gem5::DistIface::size
protected

The number of gem5 processes comprising this dist simulation.

Definition at line 486 of file dist_iface.hh.

Referenced by sizeParam(), and gem5::TCPIface::TCPIface().

◆ sync

DistIface::Sync * gem5::DistIface::sync = nullptr
staticprivate

◆ syncEvent

DistIface::SyncEvent * gem5::DistIface::syncEvent = nullptr
staticprivate

The singleton SyncEvent object to schedule periodic dist sync.

Definition at line 510 of file dist_iface.hh.

Referenced by DistIface(), drain(), drainResume(), gem5::DistIface::RecvScheduler::pushPacket(), readyToExit(), startup(), toggleSync(), and ~DistIface().

◆ syncRepeat

Tick gem5::DistIface::syncRepeat
private

Frequency of dist sync events in ticks.

Definition at line 463 of file dist_iface.hh.

Referenced by init().

◆ syncStart

Tick gem5::DistIface::syncStart
private

Tick to schedule the first dist sync event.

This is just as optimization : we do not need any dist sync event until the simulated NIC is brought up by the OS.

Definition at line 459 of file dist_iface.hh.

Referenced by init().

◆ syncStartOnPseudoOp

bool gem5::DistIface::syncStartOnPseudoOp
private

Use pseudoOp to start synchronization.

Definition at line 476 of file dist_iface.hh.

Referenced by startup().

◆ sys

System * gem5::DistIface::sys = nullptr
staticprivate

System pointer used to wakeup sleeping threads when stopping sync.

Definition at line 519 of file dist_iface.hh.

Referenced by gem5::DistIface::SyncEvent::process(), and toggleSync().


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

Generated on Tue Jun 18 2024 16:24:10 for gem5 by doxygen 1.11.0