gem5  v20.1.0.0
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
Drainable Class Referenceabstract

Interface for objects that might require draining before checkpointing. More...

#include <drain.hh>

Inheritance diagram for Drainable:
ArchTimer BasePixelPump::PixelEvent BaseXBar::Layer< SrcType, DstType > CopyEngine::CopyEngineChannel DistIface DmaCallback DmaPort DmaReadFifo BaseXBar::Layer< RequestPort, ResponsePort > BaseXBar::Layer< ResponsePort, RequestPort > PacketQueue Queue< Entry > Queue< MSHR > Queue< WriteQueueEntry > SimObject

Public Member Functions

DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Protected Member Functions

 Drainable ()
 
virtual ~Drainable ()
 
virtual DrainState drain ()=0
 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...
 
virtual void drainResume ()
 Resume execution after a successful drain. More...
 
void signalDrainDone () const
 Signal that an object is drained. More...
 

Private Member Functions

DrainState dmDrain ()
 DrainManager interface to request a drain operation. More...
 
void dmDrainResume ()
 DrainManager interface to request a resume operation. More...
 

Private Attributes

DrainManager_drainManager
 Convenience reference to the drain manager. More...
 
DrainState _drainState
 Current drain state of the object. More...
 

Friends

class DrainManager
 This class coordinates draining of a System. More...
 

Detailed Description

Interface for objects that might require draining before checkpointing.

An object's internal state needs to be drained when creating a checkpoint, switching between CPU models, or switching between timing models. Once the internal state has been drained from all objects in the simulator, the objects are serialized to disc or the configuration change takes place. The process works as follows (see simulate.py for details):

  1. DrainManager::tryDrain() calls Drainable::drain() for every object in the system. Draining has completed if all of them return true. Otherwise, the drain manager keeps track of the objects that requested draining and waits for them to signal that they are done draining using the signalDrainDone() method.

  2. Continue simulation. When an object has finished draining its internal state, it calls DrainManager::signalDrainDone() on the manager. The drain manager keeps track of the objects that haven't drained yet, simulation stops when the set of non-drained objects becomes empty.

  3. Check if any object still needs draining (DrainManager::tryDrain()), if so repeat the process above.

  4. Serialize objects, switch CPU model, or change timing model.

  5. Call DrainManager::resume(), which in turn calls Drainable::drainResume() for all objects, and then continue the simulation.

Definition at line 230 of file drain.hh.

Constructor & Destructor Documentation

◆ Drainable()

Drainable::Drainable ( )
protected

Definition at line 194 of file drain.cc.

References _drainManager, and DrainManager::registerDrainable().

◆ ~Drainable()

Drainable::~Drainable ( )
protectedvirtual

Definition at line 201 of file drain.cc.

References _drainManager, and DrainManager::unregisterDrainable().

Member Function Documentation

◆ dmDrain()

DrainState Drainable::dmDrain ( )
private

DrainManager interface to request a drain operation.

Definition at line 207 of file drain.cc.

References _drainState, drain(), Drained, and Draining.

◆ dmDrainResume()

void Drainable::dmDrainResume ( )
private

DrainManager interface to request a resume operation.

Definition at line 218 of file drain.cc.

References _drainState, Drained, drainResume(), panic_if, Resuming, and Running.

Friends And Related Function Documentation

◆ DrainManager

friend class DrainManager
friend

This class coordinates draining of a System.

When draining the simulator, we need to make sure that all Drainable objects within the system have ended up in the drained state before declaring the operation to be successful. This class keeps track of how many objects are still in the process of draining. Once it determines that all objects have drained their state, it exits the simulation loop.

Note
A System might not be completely drained even though the DrainManager has caused the simulation loop to exit. Draining needs to be restarted until all Drainable objects declare that they don't need further simulation to be completely drained. See Drainable for more information.

Definition at line 248 of file drain.hh.

Member Data Documentation

◆ _drainManager

DrainManager& Drainable::_drainManager
private

Convenience reference to the drain manager.

Definition at line 349 of file drain.hh.

Referenced by Drainable(), signalDrainDone(), and ~Drainable().

◆ _drainState

DrainState Drainable::_drainState
mutableprivate

Current drain state of the object.

Needs to be mutable since objects need to be able to signal that they have transitioned into a Drained state even if the calling method is const.

Definition at line 356 of file drain.hh.

Referenced by dmDrain(), dmDrainResume(), drainState(), and signalDrainDone().


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