geopm
3.1.1.dev296+g5916b956
GEOPM - Global Extensible Open Power Manager
|
#include <PowerBalancerAgent.hpp>
Classes | |
class | LeafRole |
class | MeasureRuntimeStep |
class | ReduceLimitStep |
class | Role |
class | RootRole |
class | SendDownLimitStep |
class | Step |
class | TreeRole |
Public Member Functions | |
PowerBalancerAgent (PlatformIO &platform_io, const PlatformTopo &platform_topo, std::shared_ptr< SampleAggregator > sample_agg, std::vector< std::shared_ptr< PowerBalancer > > power_balancer, double min_power, double max_power, std::shared_ptr< Waiter > waiter) | |
PowerBalancerAgent () | |
virtual | ~PowerBalancerAgent ()=default |
void | init (int level, const std::vector< int > &fan_in, bool is_level_root) override |
Set the level where this Agent is active and push signals/controls for that level. More... | |
void | validate_policy (std::vector< double > &policy) const override |
Called by Controller to validate incoming policy values and configure defaults requested in incoming policy. Policy sender can request default value with 'NaN' at the desired offset in the policy vector. Returned policy should not contain 'NaN's and be consumeable by descend and adjust_platform. More... | |
void | split_policy (const std::vector< double > &in_policy, std::vector< std::vector< double > > &out_policy) override |
Called by Controller to split policy for children at next level down the tree. More... | |
bool | do_send_policy (void) const override |
Called by Controller to determine if new policy values should be sent down the tree to the Agent's children. More... | |
void | aggregate_sample (const std::vector< std::vector< double > > &in_sample, std::vector< double > &out_sample) override |
Aggregate samples from children for the next level up the tree. More... | |
bool | do_send_sample (void) const override |
void | adjust_platform (const std::vector< double > &in_policy) override |
Adjust the platform settings based the policy from above. More... | |
bool | do_write_batch (void) const override |
Called by the Controller to decide whether to call write_batch() to update platform controls. More... | |
void | sample_platform (std::vector< double > &out_sample) override |
Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree. More... | |
void | wait (void) override |
Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop. More... | |
std::vector< std::pair< std::string, std::string > > | report_header (void) const override |
Custom fields that will be added to the report header when this agent is used. More... | |
std::vector< std::pair< std::string, std::string > > | report_host (void) const override |
Custom fields for the host section of the report. More... | |
std::map< uint64_t, std::vector< std::pair< std::string, std::string > > > | report_region (void) const override |
Custom fields for each region in the report. More... | |
std::vector< std::string > | trace_names (void) const override |
Column headers to be added to the trace. More... | |
std::vector< std::function< std::string(double)> > | trace_formats (void) const override |
Returns format string for each column added to the trace. More... | |
void | trace_values (std::vector< double > &values) override |
Called by Controller to get latest values to be added to the trace. More... | |
void | enforce_policy (const std::vector< double > &policy) const override |
Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller. More... | |
Public Member Functions inherited from geopm::Agent | |
Agent ()=default | |
virtual | ~Agent ()=default |
Static Public Member Functions | |
static std::string | plugin_name (void) |
static std::unique_ptr< Agent > | make_plugin (void) |
static std::vector< std::string > | policy_names (void) |
static std::vector< std::string > | sample_names (void) |
static std::string | format_step_count (double step) |
Static Public Member Functions inherited from geopm::Agent | |
static std::vector< std::string > | agent_names (void) |
static std::unique_ptr< Agent > | make_unique (const std::string &agent_name) |
static int | num_policy (const std::map< std::string, std::string > &dictionary) |
Used to look up the number of values in the policy vector sent down the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More... | |
static int | num_policy (const std::string &agent_name) |
Used to look up the number of values in the policy vector sent down the tree for a specific Agent. More... | |
static int | num_sample (const std::map< std::string, std::string > &dictionary) |
Used to look up the number of values in the sample vector sent up the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More... | |
static int | num_sample (const std::string &agent_name) |
Used to look up the number of values in the sample vector sent up the tree for a specific Agent. More... | |
static std::vector< std::string > | policy_names (const std::map< std::string, std::string > &dictionary) |
Used to look up the names of values in the policy vector sent down the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More... | |
static std::vector< std::string > | policy_names (const std::string &agent_name) |
Used to look up the names of values in the policy vector sent down the tree for a specific Agent. More... | |
static std::vector< std::string > | sample_names (const std::map< std::string, std::string > &dictionary) |
Used to look up the names of values in the sample vector sent up the tree for a specific Agent. This should be called with the dictionary returned by agent_factory().dictionary(agent_name) for the Agent of interest. More... | |
static std::vector< std::string > | sample_names (const std::string &agent_name) |
Used to look up the names of values in the sample vector sent up the tree for a specific Agent. More... | |
static std::map< std::string, std::string > | make_dictionary (const std::vector< std::string > &policy_names, const std::vector< std::string > &sample_names) |
Used to create a correctly-formatted dictionary for an Agent at the time the Agent is registered with the factory. Concrete Agent classes may provide policy_names() and sample_names() methods to provide the vectors to be passed to this method. More... | |
static void | aggregate_sample (const std::vector< std::vector< double > > &in_sample, const std::vector< std::function< double(const std::vector< double > &)> > &agg_func, std::vector< double > &out_sample) |
Generically aggregate a vector of samples given a vector of aggregation functions. This helper method applies a different aggregation function to each sample element while aggregating across child samples. More... | |
Protected Attributes | |
PlatformIO & | m_platform_io |
const PlatformTopo & | m_platform_topo |
std::shared_ptr< SampleAggregator > | m_sample_agg |
std::shared_ptr< Role > | m_role |
std::vector< std::shared_ptr< PowerBalancer > > | m_power_balancer |
double | m_power_tdp |
bool | m_do_send_sample |
bool | m_do_send_policy |
bool | m_do_write_batch |
const double | M_MIN_PKG_POWER_SETTING |
const double | M_MAX_PKG_POWER_SETTING |
const double | M_TIME_WINDOW |
std::shared_ptr< Waiter > | m_waiter |
Static Protected Attributes | |
static constexpr double | M_WAIT_SEC = 0.005 |
Additional Inherited Members | |
Static Public Attributes inherited from geopm::Agent | |
static const std::string | M_PLUGIN_PREFIX = "libgeopmagent_" |
Enumerator | |
---|---|
M_POLICY_CPU_POWER_LIMIT | The power cap enforced on average over all nodes running the application. This has value 0.0 except in two cases. In the first case this is the M_SEND_DOWN_LIMIT step at the beginning of the application run. This value will also be non-zero in the case where the resource manager has requested a new budget for the application, and thus, the algorithm must be restarted at step M_SEND_DOWN_LIMIT. |
M_POLICY_STEP_COUNT | Step that the root is providing a policy for. The parent has received a sample matching this step in the last walk up the tree, except in the case where the root Agent has recently been updated with a new policy; in this case the step will be M_SEND_DOWN_LIMIT and the policy indexed by M_POLICY_POWER_CAP will have a non-zero value. |
M_POLICY_MAX_EPOCH_RUNTIME | The largest runtime reported by any leaf agent since the last redistribution of power. This will have value 0.0 until all leaf agents have reported a runtime to the root agent. |
M_POLICY_POWER_SLACK | This value is updated in step M_STEP_ADJUST_LIMIT to the amount that each leaf agent should increase their power limit by calling: power_cap(current_limit + slack) by before starting the algorithm over again at step M_STEP_MEASURE_RUNTIME. For all other steps this value is 0.0. |
M_NUM_POLICY | Number of steps in each iteration of the balancing algorithm. |
geopm::PowerBalancerAgent::PowerBalancerAgent | ( | PlatformIO & | platform_io, |
const PlatformTopo & | platform_topo, | ||
std::shared_ptr< SampleAggregator > | sample_agg, | ||
std::vector< std::shared_ptr< PowerBalancer > > | power_balancer, | ||
double | min_power, | ||
double | max_power, | ||
std::shared_ptr< Waiter > | waiter | ||
) |
geopm::PowerBalancerAgent::PowerBalancerAgent | ( | ) |
|
virtualdefault |
|
overridevirtual |
Adjust the platform settings based the policy from above.
[in] | policy | Settings for each control in the policy. |
Implements geopm::Agent.
|
overridevirtual |
Aggregate samples from children for the next level up the tree.
[in] | in_sample | Vector of sample vectors, one from each child. |
[out] | out_sample | Aggregated sample values to be sent up to the parent. |
Implements geopm::Agent.
|
overridevirtual |
Called by Controller to determine if new policy values should be sent down the tree to the Agent's children.
Implements geopm::Agent.
|
overridevirtual |
Implements geopm::Agent.
|
overridevirtual |
Called by the Controller to decide whether to call write_batch() to update platform controls.
Implements geopm::Agent.
|
overridevirtual |
Enforce the policy one time with PlatformIO::write_control(). Called to enforce static policies in the absence of a Controller.
Implements geopm::Agent.
|
static |
|
overridevirtual |
Set the level where this Agent is active and push signals/controls for that level.
[in] | level | Level of the tree where this agent is active. Note that only agents at level zero execute sample_platform() and adjust_platform(). |
[in] | fan_in | Vector over level giving the the number of Agents that report to each root Agent operating at the level. |
[in] | is_level_root | True if the agent plays the role of root of the level. Only root agents for a level execute ascend() and descend(). |
Implements geopm::Agent.
|
static |
|
static |
|
static |
|
overridevirtual |
Custom fields that will be added to the report header when this agent is used.
Implements geopm::Agent.
|
overridevirtual |
Custom fields for the host section of the report.
Implements geopm::Agent.
|
overridevirtual |
Custom fields for each region in the report.
Implements geopm::Agent.
|
static |
|
overridevirtual |
Read signals from the platform and interpret/aggregate these signals to create a sample which can be sent up the tree.
[out] | sample | Vector of agent specific sample values to be sent up the tree. |
Implements geopm::Agent.
|
overridevirtual |
Called by Controller to split policy for children at next level down the tree.
[in] | in_policy | Policy values from the parent. |
[out] | out_policy | Vector of policies to be sent to each child. |
Implements geopm::Agent.
|
overridevirtual |
Returns format string for each column added to the trace.
Reimplemented from geopm::Agent.
|
overridevirtual |
Column headers to be added to the trace.
Implements geopm::Agent.
|
overridevirtual |
Called by Controller to get latest values to be added to the trace.
Implements geopm::Agent.
|
overridevirtual |
Called by Controller to validate incoming policy values and configure defaults requested in incoming policy. Policy sender can request default value with 'NaN' at the desired offset in the policy vector. Returned policy should not contain 'NaN's and be consumeable by descend and adjust_platform.
[in,out] | policy | Policy replace NaN's with defaults. If a value of policy is not NaN but the value is not supported by the Agent the method will throw a geopm::Exception with error code GEOPM_ERROR_INVALID. |
Implements geopm::Agent.
|
overridevirtual |
Called by Controller to wait for sample period to elapse. This controls the cadence of the Controller main loop.
Implements geopm::Agent.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
staticconstexprprotected |
|
protected |