gem5 [DEVELOP-FOR-25.1]
Loading...
Searching...
No Matches
gem5::DrainManager Class Reference

#include <drain.hh>

Public Member Functions

bool tryDrain ()
 Try to drain the system.
void resume ()
 Resume normal simulation in a Drained system.
void preCheckpointRestore ()
 Run state fixups before a checkpoint restore operation.
bool isDrained () const
 Check if the system is drained.
DrainState state () const
 Get the simulators global drain state.
void signalDrainDone ()
 Notify the DrainManager that a Drainable object has finished draining.
void registerDrainable (Drainable *obj)
void unregisterDrainable (Drainable *obj)

Static Public Member Functions

static DrainManagerinstance ()
 Get the singleton DrainManager instance.

Private Member Functions

 DrainManager ()
 DrainManager (DrainManager &)=delete
 ~DrainManager ()
bool allInState (DrainState state) const
 Helper function to check if all Drainable objects are in a specific state.
size_t drainableCount () const
 Thread-safe helper function to get the number of Drainable objects in a system.

Private Attributes

std::mutex globalLock
 Lock protecting the set of drainable objects.
std::vector< Drainable * > _allDrainable
 Set of all drainable objects.
std::atomic_uint _count
 Number of objects still draining.
DrainState _state
 Global simulator drain state.

Detailed Description

Definition at line 83 of file drain.hh.

Constructor & Destructor Documentation

◆ DrainManager() [1/2]

gem5::DrainManager::DrainManager ( )
private

Definition at line 51 of file drain.cc.

References _count, _state, and gem5::Running.

Referenced by DrainManager(), and instance().

◆ DrainManager() [2/2]

gem5::DrainManager::DrainManager ( DrainManager & )
privatedelete

References DrainManager().

◆ ~DrainManager()

gem5::DrainManager::~DrainManager ( )
private

Definition at line 57 of file drain.cc.

Member Function Documentation

◆ allInState()

bool gem5::DrainManager::allInState ( DrainState state) const
private

Helper function to check if all Drainable objects are in a specific state.

Definition at line 176 of file drain.cc.

References _allDrainable, and state().

Referenced by resume().

◆ drainableCount()

size_t gem5::DrainManager::drainableCount ( ) const
private

Thread-safe helper function to get the number of Drainable objects in a system.

Definition at line 187 of file drain.cc.

References _allDrainable, globalLock, and gem5::X86ISA::lock.

Referenced by preCheckpointRestore(), resume(), signalDrainDone(), and tryDrain().

◆ instance()

DrainManager & gem5::DrainManager::instance ( )
inlinestatic

Get the singleton DrainManager instance.

Singleton instance of the drain manager, constructed on first use

Definition at line 93 of file drain.hh.

References DrainManager().

Referenced by gem5::CxxConfigManager::drain(), gem5::CxxConfigManager::drainResume(), and gem5::init_drain().

◆ registerDrainable()

void gem5::DrainManager::registerDrainable ( Drainable * obj)

Definition at line 158 of file drain.cc.

References _allDrainable, globalLock, and gem5::X86ISA::lock.

◆ unregisterDrainable()

void gem5::DrainManager::unregisterDrainable ( Drainable * obj)

Definition at line 167 of file drain.cc.

References _allDrainable, globalLock, and gem5::X86ISA::lock.

Member Data Documentation

◆ _allDrainable

std::vector<Drainable *> gem5::DrainManager::_allDrainable
private

Set of all drainable objects.

Definition at line 191 of file drain.hh.

Referenced by allInState(), drainableCount(), preCheckpointRestore(), registerDrainable(), resume(), tryDrain(), and unregisterDrainable().

◆ _count

std::atomic_uint gem5::DrainManager::_count
private

Number of objects still draining.

This is flagged atomic since it can be manipulated by SimObjects living in different threads.

Definition at line 198 of file drain.hh.

Referenced by DrainManager(), resume(), signalDrainDone(), and tryDrain().

◆ _state

DrainState gem5::DrainManager::_state
private

Global simulator drain state.

Definition at line 201 of file drain.hh.

Referenced by DrainManager(), isDrained(), preCheckpointRestore(), resume(), state(), and tryDrain().

◆ globalLock

std::mutex gem5::DrainManager::globalLock
mutableprivate

Lock protecting the set of drainable objects.

Definition at line 188 of file drain.hh.

Referenced by drainableCount(), registerDrainable(), and unregisterDrainable().


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

Generated on Mon Oct 27 2025 04:13:09 for gem5 by doxygen 1.14.0