geopm
3.1.1.dev272+gdfb40a8d
GEOPM - Global Extensible Open Power Manager
|
#include <IOGroup.hpp>
Public Types | |
enum | m_units_e { M_UNITS_NONE , M_UNITS_SECONDS , M_UNITS_HERTZ , M_UNITS_WATTS , M_UNITS_JOULES , M_UNITS_CELSIUS , M_UNITS_AMPERES , M_UNITS_VOLTS , M_NUM_UNITS } |
enum | m_signal_behavior_e { M_SIGNAL_BEHAVIOR_CONSTANT , M_SIGNAL_BEHAVIOR_MONOTONE , M_SIGNAL_BEHAVIOR_VARIABLE , M_SIGNAL_BEHAVIOR_LABEL , M_NUM_SIGNAL_BEHAVIOR } |
Description of the runtime behavior of a signal. More... | |
Public Member Functions | |
IOGroup ()=default | |
virtual | ~IOGroup ()=default |
virtual std::set< std::string > | signal_names (void) const =0 |
Returns the names of all signals provided by the IOGroup. More... | |
virtual std::set< std::string > | control_names (void) const =0 |
Returns the names of all controls provided by the IOGroup. More... | |
virtual bool | is_valid_signal (const std::string &signal_name) const =0 |
Test if signal_name refers to a signal supported by the group. More... | |
virtual bool | is_valid_control (const std::string &control_name) const =0 |
Test if control_name refers to a control supported by the group. More... | |
virtual int | signal_domain_type (const std::string &signal_name) const =0 |
Query the domain for a named signal. More... | |
virtual int | control_domain_type (const std::string &control_name) const =0 |
Query the domain for a named control. More... | |
virtual int | push_signal (const std::string &signal_name, int domain_type, int domain_idx)=0 |
Add a signal to the list of signals that is read by read_batch() and sampled by sample(). More... | |
virtual int | push_control (const std::string &control_name, int domain_type, int domain_idx)=0 |
Add a control to the list of controls that is written by write_batch() and configured with adjust(). More... | |
virtual void | read_batch (void)=0 |
Read all pushed signals from the platform so that the next call to sample() will reflect the updated data. More... | |
virtual void | write_batch (void)=0 |
Write all of the pushed controls so that values previously given to adjust() are written to the platform. More... | |
virtual double | sample (int sample_idx)=0 |
Retrieve signal value from data read by last call to read_batch() for a particular signal previously pushed with push_signal(). More... | |
virtual void | adjust (int control_idx, double setting)=0 |
Adjust a setting for a particular control that was previously pushed with push_control(). This adjustment will be written to the platform on the next call to write_batch(). More... | |
virtual double | read_signal (const std::string &signal_name, int domain_type, int domain_idx)=0 |
Read from platform and interpret into SI units a signal given its name and domain. Does not modify the values stored by calling read_batch(). More... | |
virtual void | write_control (const std::string &control_name, int domain_type, int domain_idx, double setting)=0 |
Interpret the setting and write setting to the platform. Does not modify the values stored by calling adjust(). More... | |
virtual void | save_control (void)=0 |
Save the state of all controls so that any subsequent changes made through the IOGroup can be undone with a call to the restore() method. More... | |
virtual void | restore_control (void)=0 |
Restore all controls to values recorded in previous call to the save() method. More... | |
virtual std::function< double(const std::vector< double > &)> | agg_function (const std::string &signal_name) const =0 |
Return a function that should be used when aggregating the given signal. More... | |
virtual std::function< std::string(double)> | format_function (const std::string &signal_name) const |
Returns a function that can be used to convert a signal of the given name into a printable string. May be one of the IOGroup::format_*() static methods, or another function. More... | |
virtual std::string | signal_description (const std::string &signal_name) const =0 |
Returns a description of the signal. This string can be used by tools to generate help text for users of the IOGroup. More... | |
virtual std::string | control_description (const std::string &control_name) const =0 |
Returns a description of the control. This string can be used by tools to generate help text for users of the IOGroup. More... | |
virtual int | signal_behavior (const std::string &signal_name) const =0 |
Returns a hint about how a signal will change as a function of time. More... | |
virtual void | save_control (const std::string &save_path)=0 |
virtual void | restore_control (const std::string &save_path)=0 |
virtual std::string | name (void) const =0 |
Get the IOGroup name. More... | |
Static Public Member Functions | |
static std::vector< std::string > | iogroup_names (void) |
static std::unique_ptr< IOGroup > | make_unique (const std::string &iogroup_name) |
static m_units_e | string_to_units (const std::string &str) |
Convert a string to the corresponding m_units_e value. More... | |
static std::string | units_to_string (int) |
Convert the m_units_e value to the corresponding string. More... | |
static m_signal_behavior_e | string_to_behavior (const std::string &str) |
Convert a string to the corresponding m_signal_behavior_e value. More... | |
Static Public Attributes | |
static const std::string | M_PLUGIN_PREFIX = "libgeopmiogroup_" |
Description of the runtime behavior of a signal.
|
default |
|
virtualdefault |
|
pure virtual |
Adjust a setting for a particular control that was previously pushed with push_control(). This adjustment will be written to the platform on the next call to write_batch().
[in] | control_idx | The index returned by previous call to push_control(). |
[in] | setting | Value of the control in SI units. |
Implemented in geopm::ServiceIOGroup, geopm::MSRIOGroup, geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::NVMLIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Return a function that should be used when aggregating the given signal.
[in] | signal_name | Name of the signal. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Returns a description of the control. This string can be used by tools to generate help text for users of the IOGroup.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Query the domain for a named control.
[in] | control_name | Name of the control to query. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Returns the names of all controls provided by the IOGroup.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
virtual |
Returns a function that can be used to convert a signal of the given name into a printable string. May be one of the IOGroup::format_*() static methods, or another function.
Reimplemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
static |
|
pure virtual |
Test if control_name refers to a control supported by the group.
[in] | control_name | Name of control to test. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Test if signal_name refers to a signal supported by the group.
[in] | signal_name | Name of signal to test. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
static |
|
pure virtual |
Get the IOGroup name.
By convention this name is given in all capital letters. This string provides a namespace for the IOGroup since all IOGroups loaded by PlatformIO must have distinct names. This unique namespace may be used in any context to distinguish IOGroups.
One important use case is that the IOGroup name prefixes all low level signal and control names in conjunction with "::". This name prefix may be used to distinguish between the high level signals and controls (i.e. aliases like CPU_FREQUENCY_MAX_CONTROL) that do not contain the IOGroup prefix, and the low level signals and controls that do (e.g. "MSR::PERF_CTL:FREQ").
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Add a control to the list of controls that is written by write_batch() and configured with adjust().
[in] | control_name | Name of the control requested. |
[in] | domain_type | One of the values from the PlatformTopo::m_domain_e enum described in PlatformTopo.hpp. |
[in] | domain_idx | The index of the domain within the set of domains of the same type on the platform. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Add a signal to the list of signals that is read by read_batch() and sampled by sample().
[in] | signal_name | Name of the signal requested. |
[in] | domain_type | One of the values from the PlatformTopo::m_domain_e enum described in PlatformTopo.hpp. |
[in] | domain_idx | The index of the domain within the set of domains of the same type on the platform. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Read all pushed signals from the platform so that the next call to sample() will reflect the updated data.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Read from platform and interpret into SI units a signal given its name and domain. Does not modify the values stored by calling read_batch().
[in] | signal_name | Name of the signal requested. |
[in] | domain_type | One of the values from the PlatformTopo::m_domain_e enum described in PlatformTopo.hpp. |
[in] | domain_idx | The index of the domain within the set of domains of the same type on the platform. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
|
pure virtual |
Restore all controls to values recorded in previous call to the save() method.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Retrieve signal value from data read by last call to read_batch() for a particular signal previously pushed with push_signal().
[in] | sample_idx | The index returned by previous call to push_signal(). |
Implemented in geopm::ServiceIOGroup, geopm::MSRIOGroup, geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::NVMLIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
|
pure virtual |
Save the state of all controls so that any subsequent changes made through the IOGroup can be undone with a call to the restore() method.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Returns a hint about how a signal will change as a function of time.
This can be used when generating reports to decide how to summarize a signal's value for the entire application run.
[in] | signal_name | Name of the signal. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Returns a description of the signal. This string can be used by tools to generate help text for users of the IOGroup.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Query the domain for a named signal.
[in] | signal_name | Name of the signal to query. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Returns the names of all signals provided by the IOGroup.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
static |
Convert a string to the corresponding m_signal_behavior_e value.
|
static |
Convert a string to the corresponding m_units_e value.
|
static |
Convert the m_units_e value to the corresponding string.
|
pure virtual |
Write all of the pushed controls so that values previously given to adjust() are written to the platform.
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
pure virtual |
Interpret the setting and write setting to the platform. Does not modify the values stored by calling adjust().
[in] | control_name | Name of the control requested. |
[in] | domain_type | One of the values from the PlatformTopo::m_domain_e enum described in PlatformTopo.hpp. |
[in] | domain_idx | The index of the domain within the set of domains of the same type on the platform. |
[in] | setting | Value in SI units of the setting for the control. |
Implemented in geopm::TimeIOGroup, geopm::SysfsIOGroup, geopm::SSTIOGroup, geopm::ServiceIOGroup, geopm::NVMLIOGroup, geopm::MSRIOGroup, geopm::LevelZeroIOGroup, geopm::DCGMIOGroup, geopm::CpuinfoIOGroup, geopm::ConstConfigIOGroup, and geopm::CNLIOGroup.
|
static |