gem5 v24.0.0.0
|
Interface for objects that might require draining before checkpointing. More...
#include <drain.hh>
Public Member Functions | |
DrainState | drainState () const |
Return the current drain state of an object. | |
virtual void | notifyFork () |
Notify a child process of a fork. | |
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. | |
virtual void | drainResume () |
Resume execution after a successful drain. | |
void | signalDrainDone () const |
Signal that an object is drained. | |
Private Member Functions | |
DrainState | dmDrain () |
DrainManager interface to request a drain operation. | |
void | dmDrainResume () |
DrainManager interface to request a resume operation. | |
Private Attributes | |
DrainManager & | _drainManager |
Convenience reference to the drain manager. | |
DrainState | _drainState |
Current drain state of the object. | |
Friends | |
class | DrainManager |
This class coordinates draining of a System. | |
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):
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.
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.
Check if any object still needs draining (DrainManager::tryDrain()), if so repeat the process above.
Serialize objects, switch CPU model, or change timing model.
|
protected |
Definition at line 197 of file drain.cc.
References _drainManager, and gem5::DrainManager::registerDrainable().
|
protectedvirtual |
Definition at line 204 of file drain.cc.
References _drainManager, and gem5::DrainManager::unregisterDrainable().
|
private |
DrainManager interface to request a drain operation.
Definition at line 210 of file drain.cc.
References _drainState, drain(), gem5::Drained, and gem5::Draining.
|
private |
DrainManager interface to request a resume operation.
Definition at line 221 of file drain.cc.
References _drainState, gem5::Drained, drainResume(), panic_if, gem5::Resuming, and gem5::Running.
|
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.
|
private |
Convenience reference to the drain manager.
Definition at line 353 of file drain.hh.
Referenced by Drainable(), signalDrainDone(), and ~Drainable().
|
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 360 of file drain.hh.
Referenced by dmDrain(), dmDrainResume(), drainState(), and signalDrainDone().