blob: af9bb741892df58e23c6a177d592469ab5db8110 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2019 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_CLL_LoadRegulator_Definitions
//
// Purpose:
// This module contains data type definitions for EPTF LoadRegulator
//
// Module Parameters:
// tsp_EPTF_LoadRegulator_loggingComponentMask - *charstring* - component-type mask for logging, default value: "EPTF_LoadRegulator"
//
// Module depends on:
// <EPTF_CLL_Common_Definitions>
// <EPTF_CLL_Logging_Definitions>
// <EPTF_CLL_Variable_Definitions>
//
// Current Owner:
// Gabor Tatarka (egbotat)
//
// Last Review Date:
// -
//
// Detailed Comments:
// -
///////////////////////////////////////////////////////////
module EPTF_CLL_LoadRegulator_Definitions
{
import from EPTF_CLL_DataSource_Definitions all;
//=========================================================================
// Imports
//=======================================================================
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
modulepar charstring tsp_EPTF_LoadRegulator_loggingComponentMask := "EPTF_LoadRegulator";
//=========================================================================
// Data Types
//=========================================================================
/////////////////////////////////////////////////////////////////////////
// Type: ft_EPTF_LoadRegulator_calculateNextCps
//
// Purpose:
// Function type for calculating next CPS based on the CPU or network load to reach and the old CPS
//
// Parameters:
// loadToReach - *in* *float* - the target load level to reach
// oldCps - *in* *float* - previous CPS value
//
// Return Value:
// *float* - new CPS value
//
// Detailed Comments:
// -
/////////////////////////////////////////////////////////////////////////
type function ft_EPTF_LoadRegulator_calculateNextCps(in float loadToReach, in float oldCps)
runs on self return float;
/////////////////////////////////////////////////////////////////////////
// Type: ft_EPTF_LoadRegulator_getSUTLoad
//
// Purpose:
// Function type for getting the SUT load
//
// Return Value:
// *float* - SUT load value
//
// Detailed Comments:
// -
/////////////////////////////////////////////////////////////////////////
type function ft_EPTF_LoadRegulator_getSUTLoad() runs on self return float;
/////////////////////////////////////////////////////////////////////////
// Type: ft_EPTF_LoadRegulator_postCalculateCPS
//
// Purpose:
// Function type for post-CPS-calculation
//
// Detailed Comments:
// This function should not modify any variables of component EPTF_LoadRegulator_CT
/////////////////////////////////////////////////////////////////////////
type function ft_EPTF_LoadRegulator_postCalculateCPS()
runs on self;
/////////////////////////////////////////////////////////////////////////
// Type: EPTF_LoadRegulator_updateCallback_FT
//
// Purpose:
// Function type to call at variable update
//
/////////////////////////////////////////////////////////////////////////
type function EPTF_LoadRegulator_updateCallback_FT() runs on self;
/////////////////////////////////////////////////////////////////////////
// Type: EPTF_LoadRegulator_context
//
// Purpose:
// Type for storing data used by the behavior altstep activated as default
//
// Elements:
// vl_prevLoad - *float* - previous load
// vl_currLoad - *float* - current load (smoothed measured load)
// vl_measuredLoad - *float* - measured load
// vl_diffLoad - *float* - difference between vl_prevLoad and vl_currLoad
// vl_loadToReach - *float* - load to reach
// vl_loadToReachDiff - *float* - difference between vl_loadToReach and vl_currLoad
//
// Detailed Comments:
// -
/////////////////////////////////////////////////////////////////////////
type record EPTF_LoadRegulator_context {
float vl_prevLoad,
float vl_currLoad,
float vl_measuredLoad,
float vl_diffLoad,
float vl_loadToReach,
float vl_loadToReachDiff
}
/////////////////////////////////////////////////////////////////////////
// Component: EPTF_LoadRegulator_CT
//
// Purpose:
// Component type for EPTF_LoadRegulator
//
// Elements:
// v_EPTF_LoadRegulator_enabled - *boolean* - Regulator is enabled/disabled
// v_EPTF_LoadRegulator_initialized - *boolean* - Regulator is initialized
// v_EPTF_LoadRegulator_loadIsStable - *boolean* - is tha load stable
// v_EPTF_LoadRegulator_currentLoad - *float* - what is the current load
// v_EPTF_LoadRegulator_loadToReach - *float* - load to reach
// v_EPTF_LoadRegulator_cpsToReach - *float* - cps to reach
// EPTF_FloatList vc_loadRegMeasWindow - <EPTF_FloatList> - measurement list
// vc_measWinIdx - *integer* - index in vc_loadRegMeasWindow
// vc_loadRegStableWindow - <EPTF_FloatList> - v_EPTF_LoadRegulator_loadIsStable is calculated from here
// vc_stableWinIdx - *integer* - index in vc_loadRegStableWindow
// v_EPTF_LoadRegulator_altstep - *default* - altstep
// v_EPTF_LoadRegulator_ctx - <EPTF_LoadRegulator_context> - context data about the load
// vc_EPTF_calculateNextCps - <ft_EPTF_LoadRegulator_calculateNextCps> - calculateNextCps function pointer
// vc_EPTF_getSutLoad - <ft_EPTF_LoadRegulator_getSUTLoad> - getSUTLoad function pointer
// v_EPTF_postCalcCPS - <ft_EPTF_LoadRegulator_postCalculateCPS> - postCalculateCPS function pointer
//
// v_EPTF_loadRegulator_measWinSize - *integer* - measure Window size
// v_EPTF_loadRegulator_updateTimeout - *float* - length of time between 2 update period
// v_EPTF_loadRegulator_LoadVarianceThreshold - *float* - load variance threshold (percentage)
// v_EPTF_loadregulator_cpsDelta - *float* - the max value that the CPS value will be changed with
// v_EPTF_loadRegulator_errorTolerance - *float* - the precision of the target load (percentage)
// v_EPTF_loadRegulator_smoothingFactor - *float* - a smoothing is applied on the
// measured load values to avoid spikes (0.0:extreme smoothing and 1,0:no smoothing)
//
// v_EPTF_loadRegulator_execCtrlVar_totalValueIdx - *integer* - index for ExecCtrl Variable totalValue
// v_EPTF_loadRegulator_execCtrlVar_targetLoadIdx - *integer* - index for ExecCtrl Variable targetLoad
// v_EPTF_loadRegulator_execCtrlVar_currentLoadIdx - *integer* - index for ExecCtrl Variable currentLoad
// v_EPTF_loadRegulator_execCtrlVar_statusIdx - *integer* - index for ExecCtrl Variable status
//
// T_EPTF_loadReg - *timer* - timeout in v_EPTF_loadRegulator_updateTimeout - at timeout start update data
// v_EPTF_loadRegulator_originalCPS - *float* - what was the original CPS before regulating, when disabling, set this value back
//
// v_LoadRegulator_loggingMaskId - *integer* - logging mask id
//
// Detailed Comments:
// v_EPTF_LoadRegulator_ctx must not be accessed from user defined code.
/////////////////////////////////////////////////////////////////////////
type component EPTF_LoadRegulator_CT extends EPTF_Var_CT, EPTF_Logging_CT, EPTF_DataSourceClient_CT
{
private var boolean v_EPTF_LoadRegulator_initialized := false;
/*
private var boolean v_EPTF_LoadRegulator_enabled := true;
private var boolean v_EPTF_LoadRegulator_loadIsStable := false;
private var float v_EPTF_LoadRegulator_currentLoad := 0.0;
private var float v_EPTF_LoadRegulator_loadToReach := 0.0;
private var float v_EPTF_LoadRegulator_cpsToReach := 0.0;
*/
private var integer v_LoadRegulator_enabledVarIdx;
private var integer v_LoadRegulator_cpsToReachVarIdx;
private var integer v_LoadRegulator_loadToReachVarIdx;
private var integer v_LoadRegulator_currentLoadVarIdx;
private var integer v_LoadRegulator_loadIsStableVarIdx;
private var EPTF_FloatList vc_loadRegMeasWindow := {};
private var integer vc_measWinIdx := 0;
private var EPTF_FloatList vc_loadRegStableWindow := {};
private var integer vc_stableWinIdx := 0;
private var default v_EPTF_LoadRegulator_altstep;
private var EPTF_LoadRegulator_context v_EPTF_LoadRegulator_ctx :=
c_EPTF_LoadRegulator_context_init;
private var ft_EPTF_LoadRegulator_calculateNextCps vc_EPTF_calculateNextCps := null;
private var ft_EPTF_LoadRegulator_getSUTLoad vc_EPTF_getSutLoad := null;
private var ft_EPTF_LoadRegulator_postCalculateCPS v_EPTF_postCalcCPS := null;
private var integer v_EPTF_loadRegulator_measWinSize;
private var float v_EPTF_loadRegulator_updateTimeout; // 2 secs
private var float v_EPTF_loadRegulator_LoadVarianceThreshold; // in %
private var float v_EPTF_loadregulator_cpsDelta;
private var float v_EPTF_loadRegulator_errorTolerance; // in %
private var float v_EPTF_loadRegulator_smoothingFactor; // should be between 0.0:extreme smoothing and 1,0:no smoothing
private var integer v_EPTF_loadRegulator_execCtrlVar_totalValueIdx := -1; // index of the totalValue (nextCPS) variable in execCtrl that should be adjusted
private var integer v_EPTF_loadRegulator_execCtrlVar_targetLoadIdx := -1 // index of the targetLoad (loadToReach) variable in execCtrl that should be adjusted
private var integer v_EPTF_loadRegulator_execCtrlVar_currentLoadIdx := -1 // index of the currentLoad (loadToReach) variable in execCtrl that should be adjusted
private var integer v_EPTF_loadRegulator_execCtrlVar_statusIdx := -1; // index of the status variable in execCtrl that should be adjusted when status changes
private timer T_EPTF_loadReg;
// for f_EPTF_LoadRegulator_calculateNextCps_limitMax:
private var float v_EPTF_loadRegulator_originalCPS := -1.0; // the CPS before the regulation started (restored when regulation stops)
// logging
private var integer v_LoadRegulator_loggingMaskId := c_EPTF_Logging_invalidMaskId;
private var EPTF_LoadRegulator_updateCallback_FT v_LoadRegulator_updateCallback := null;
}
const charstring c_LoadRegulator_sourceId := "LoadRegulator"
const charstring c_LoadRegulator_enabledVarName := "EPTF_LoadRegulator.Regulator.enable.";
const charstring c_LoadRegulator_totalValueVarName := "EPTF_LoadRegulator.Regulator.totalValue.";
const charstring c_LoadRegulator_targetLoadVarName := "EPTF_LoadRegulator.Regulator.targetLoad.";
const charstring c_LoadRegulator_currentLoadVarName := "EPTF_LoadRegulator.Regulator.currentLoad.";
const charstring c_LoadRegulator_loadIsStableVarName := ".LoadRegulator_loadIsStable";
///////////////////////////////////////////////////////////////////////////////
// Constant: c_EPTF_LoadRegulator_dataElement_Help
//
// Purpose:
// This data element returns the help information about
// all dataElements supported.
// ValueType: charstring
//
// Parameters:
// - <c_EPTF_DataSource_paramNameHelpFormat> - the format of the output
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_EPTF_LoadRegulator_dataElement_help := c_EPTF_DataSource_dataElement_Help
const EPTF_DataSource_Help_DataElement c_EPTF_LoadRegulator_Help_dataElement_help := c_EPTF_DataSource_Help_dataElement_genericHelp;
///////////////////////////////////////////////////////////////////////////////
// Constant: c_LoadRegulator_dataElement_enabled
//
// Purpose:
// This dataElement returns the variable name where the "enabled" attribute
// of the LoadRegulator is stored.
// ValueType: boolean
//
// Parameters:
// The element does not have parameters.
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_LoadRegulator_dataElement_enabled := "Enabled";
const EPTF_DataSource_Help_DataElement c_LoadRegulator_Help_dataElement_enabled := {
name := c_LoadRegulator_dataElement_enabled,
valueType := boolType,
description := "This dataElement returns the variable name where the 'enabled' attribute of the LoadRegulator is stored."
}
///////////////////////////////////////////////////////////////////////////////
// Constant: c_LoadRegulator_dataElement_cpsToReach
//
// Purpose:
// This dataElement returns the variable name where the "cpsToReach" attribute
// of the LoadRegulator is stored.
// ValueType: float
//
// Parameters:
// The element does not have parameters.
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_LoadRegulator_dataElement_cpsToReach := "CpsToReach";
const EPTF_DataSource_Help_DataElement c_LoadRegulator_Help_dataElement_cpsToReach := {
name := c_LoadRegulator_dataElement_cpsToReach,
valueType := floatType,
description := "This dataElement returns the variable name where the 'cpsToReach' attribute of the LoadRegulator is stored."
}
///////////////////////////////////////////////////////////////////////////////
// Constant: c_LoadRegulator_dataElement_loadToReach
//
// Purpose:
// This dataElement returns the variable name where the "loadToReach" attribute
// of the LoadRegulator is stored.
// ValueType: float
//
// Parameters:
// The element does not have parameters.
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_LoadRegulator_dataElement_loadToReach := "LoadToReach";
const EPTF_DataSource_Help_DataElement c_LoadRegulator_Help_dataElement_loadToReach := {
name := c_LoadRegulator_dataElement_loadToReach,
valueType := floatType,
description := "This dataElement returns the variable name where the 'loadToReach' attribute of the LoadRegulator is stored."
}
///////////////////////////////////////////////////////////////////////////////
// Constant: c_LoadRegulator_dataElement_currentLoad
//
// Purpose:
// This dataElement returns the variable name where the "currentLoad" attribute
// of the LoadRegulator is stored.
// ValueType: float
//
// Parameters:
// The element does not have parameters.
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_LoadRegulator_dataElement_currentLoad := "CurrentLoad";
const EPTF_DataSource_Help_DataElement c_LoadRegulator_Help_dataElement_currentLoad := {
name := c_LoadRegulator_dataElement_currentLoad,
valueType := floatType,
description := "This dataElement returns the variable name where the 'currentLoad' attribute of the LoadRegulator is stored."
}
///////////////////////////////////////////////////////////////////////////////
// Constant: c_LoadRegulator_dataElement_loadIsStable
//
// Purpose:
// This dataElement returns the variable name where the "loadIsStable" attribute
// of the LoadRegulator is stored.
// ValueType: boolean
//
// Parameters:
// The element does not have parameters.
//
///////////////////////////////////////////////////////////////////////////////
const charstring c_LoadRegulator_dataElement_loadIsStable := "LoadIsStable";
const EPTF_DataSource_Help_DataElement c_LoadRegulator_Help_dataElement_loadIsStable := {
name := c_LoadRegulator_dataElement_loadIsStable,
valueType := boolType,
description := "This dataElement returns the variable name where the 'loadIsStable' attribute of the LoadRegulator is stored."
}
/////////////////////////////////////////////////////////////////////////
// Constant: c_EPTF_LoadRegulator_context_init
//
// Purpose:
// Constant used to initialize variables of type EPTF_LoadRegulator_context.
//
// Detailed Comments:
// -
/////////////////////////////////////////////////////////////////////////
const EPTF_LoadRegulator_context c_EPTF_LoadRegulator_context_init := {
vl_prevLoad := 0.0,
vl_currLoad := 0.0,
vl_measuredLoad := 0.0,
vl_diffLoad := 0.0,
vl_loadToReach := 0.0,
vl_loadToReachDiff := 0.0
}
///////////////////////////////////////////////////////////
// Constant: c_EPTF_LoadRegulator_loggingEventClasses
//
// Purpose:
// list of logging event class names used on the LoadRegulator
//
// Detailed Comments:
// <EPTF_Logging_EventClassPrefixList> { "Warning", "Debug" }
///////////////////////////////////////////////////////////
const EPTF_Logging_EventClassPrefixList c_EPTF_LoadRegulator_loggingEventClasses := { "Warning", "Debug" };
///////////////////////////////////////////////////////////
// Constant: c_EPTF_LoadRegulator_loggingClassIdx_Warning
//
// Purpose:
// logging class index for Error
//
// Detailed Comments:
// *0*
///////////////////////////////////////////////////////////
const integer c_EPTF_LoadRegulator_loggingClassIdx_Warning := 0;
///////////////////////////////////////////////////////////
// Constant: c_EPTF_LoadRegulator_loggingClassIdx_Debug
//
// Purpose:
// logging class index for Error
//
// Detailed Comments:
// *1*
///////////////////////////////////////////////////////////
const integer c_EPTF_LoadRegulator_loggingClassIdx_Debug := 1;
// the datasource help database for LoadRegulator
const EPTF_DataSource_Help_DataElementChildren c_EPTF_LoadRegulator_help := {
{
dataElement := c_EPTF_LoadRegulator_Help_dataElement_help
},
{
dataElement := c_LoadRegulator_Help_dataElement_enabled
},
{
dataElement := c_LoadRegulator_Help_dataElement_cpsToReach
},
{
dataElement := c_LoadRegulator_Help_dataElement_loadToReach
},
{
dataElement := c_LoadRegulator_Help_dataElement_currentLoad
},
{
dataElement := c_LoadRegulator_Help_dataElement_loadIsStable
}
}
} // module