Skip to content

Commit 69db56e

Browse files
authored
Merge pull request #16 from pwrapi/cooling_controls
Cooling controls
2 parents 325e683 + 69ce5ac commit 69db56e

4 files changed

Lines changed: 141 additions & 21 deletions

File tree

Common.tex

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,12 @@ \section{Group Functions}\label{sec:Group}
198198
Groups can only contain objects from a single \texttt{PWR_cntxt}.
199199
Group operations that involve multiple groups must be performed with groups from the same context.
200200

201+
Some groups may be created automatically by an implementation for the convenience of the user. Examples of such groups include
202+
a group of nodes assigned to a job or a group of objects being cooled by a CDU object. An implementation may choose to provide
203+
a group (or groups) to represent which CDUs overlap so that failures in a single CDU can be compensated for by other existing CDUs.
204+
Having such redundancy groups provides opportunities for users to determine if CDU failures can be compensated for by adjusting
205+
existing CDU capacity or if they require other actions to ameliorate.
206+
201207
%int PWR_GrpCreate( PWR_Cntxt context, PWR_Grp* group );
202208
\begin{prototype}{GrpCreate}
203209
\longdescription{The \texttt{PWR_GrpCreate} function is used to create a new group which will be associated with and unique to the users context.}
@@ -865,6 +871,12 @@ \section{Big List of Attributes}\label{sec:BLOA}
865871
\aThrottledIdDesc
866872
\aThrottledCountIdDesc
867873
\aGovDesc
874+
\aWaterFlowDesc
875+
\aDewPointDesc
876+
\aHumidityDesc
877+
\aPumpSpeedDesc
878+
\aPressureDiffDesc
879+
\aValvePositionDesc
868880
\end{attributetable}
869881

870882
%==============================================================================%
@@ -897,6 +909,14 @@ \section{Big List of Metadata}\label{sec:BLOM}
897909
\mVendorInfoLen
898910
\mVendorInfo
899911
\mMeasureMethod
912+
\mLiquidResCap
913+
\mLiquidType
914+
\mLiquidMaxPumpFlow
915+
\mLiquidMinPumpFlow
916+
\mLiquidRecommendedPumpFlow
917+
\mLiquidMaxTemp
918+
\mLiquidMinTemp
919+
\mLiquidMaxPressure
900920
\end{attributetable}
901921

902922
%%%\begin{center}

PowerAPI_Community.tex

Lines changed: 106 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -413,60 +413,77 @@
413413

414414
% The remainder of the macros are for text repeated across several tables.
415415
\newcommand{\aPstateDesc}{%
416-
\attribute{PstateDesc} { \aGS }{ \uint }{ The current P-state for the object specified (typically processors but for use with other component types when applicable). }%
416+
\attribute{Pstate} { \aGS }{ \uint }{ The current P-state for the object specified (typically processors but for use with other component types when applicable). }%
417417
}
418418
\newcommand{\aCstateDesc}{%
419-
\attribute{CstateDesc} { \aGS }{ \uint }{ The current C-state for the object specified (typically processors but for use with other component types when applicable). }%
419+
\attribute{Cstate} { \aGS }{ \uint }{ The current C-state for the object specified (typically processors but for use with other component types when applicable). }%
420420
}
421421
\newcommand{\aCstateLimitDesc}{%
422-
\attribute{CstateLimitDesc} {\aGS}{\uint}{The lowest C-state allowed for the object specified (typically processors but for use with other component types when applicable).}%
422+
\attribute{CstateLimit} {\aGS}{\uint}{The lowest C-state allowed for the object specified (typically processors but for use with other component types when applicable).}%
423423
}
424424
\newcommand{\aSstateDesc}{%
425-
\attribute{SstateDesc} {\aGS}{\uint}{The current S-state for the object specified (typically processors but for use with other component types when applicable).}%
425+
\attribute{Sstate} {\aGS}{\uint}{The current S-state for the object specified (typically processors but for use with other component types when applicable).}%
426426
}
427427
\newcommand{\aPowerDesc}{%
428-
\attribute{PowerDesc} {\aG }{\dbl }{Discrete power value in watts. The power value should be the value measured as close as possible to the time of the function call.}%
428+
\attribute{Power} {\aG }{\dbl }{Discrete power value in watts. The power value should be the value measured as close as possible to the time of the function call.}%
429429
}
430430
\newcommand{\aCurrentDesc}{%
431-
\attribute{CurrentDesc} {\aG }{\dbl }{Discrete current value in amps. The current value should be the value measured as close as possible to the time of the function call.}%
431+
\attribute{Current} {\aG }{\dbl }{Discrete current value in amps. The current value should be the value measured as close as possible to the time of the function call.}%
432432
}
433433
\newcommand{\aVoltageDesc}{%
434-
\attribute{VoltageDesc} {\aG }{\dbl }{Discrete voltage value in volts. The voltage value should be the value measured as close as possible to the time of the function call.}%
434+
\attribute{Voltage} {\aG }{\dbl }{Discrete voltage value in volts. The voltage value should be the value measured as close as possible to the time of the function call.}%
435435
}
436436
\newcommand{\aMaxPowerDesc}{%
437-
\attribute{MaxPowerDesc} {\aGS}{\dbl }{Maximum power limit (ceiling, upper bound) for the specified object (as in power cap) in watts.}%
437+
\attribute{MaxPower} {\aGS}{\dbl }{Maximum power limit (ceiling, upper bound) for the specified object (as in power cap) in watts.}%
438438
}
439439
\newcommand{\aMinPowerDesc}{%
440-
\attribute{MinPowerDesc} {\aGS}{\dbl }{Minimum power limit (floor, lower bound) for the specified object in watts.}%
440+
\attribute{MinPower} {\aGS}{\dbl }{Minimum power limit (floor, lower bound) for the specified object in watts.}%
441441
}
442442
\newcommand{\aFreqLimitMinDesc}{%
443-
\attribute{FreqLimitMinDesc} {\aGS}{\dbl }{Minimum operating frequency limit for the specified object in Hz (cycles per second).}%
443+
\attribute{FreqLimitMin} {\aGS}{\dbl }{Minimum operating frequency limit for the specified object in Hz (cycles per second).}%
444444
}
445445
\newcommand{\aFreqLimitMaxDesc}{%
446-
\attribute{FreqLimitMaxDesc} {\aGS}{\dbl }{Maximum operating frequency limit for the specified object in Hz (cycles per second).}%
446+
\attribute{FreqLimitMax} {\aGS}{\dbl }{Maximum operating frequency limit for the specified object in Hz (cycles per second).}%
447447
}
448448
\newcommand{\aFreqDesc}{%
449-
\attribute{FreqDesc} {\aGS}{\dbl }{The current operating frequency value for the specified object in Hz (cycles per second).}
449+
\attribute{Freq} {\aGS}{\dbl }{The current operating frequency value for the specified object in Hz (cycles per second).}
450450
}
451451
\newcommand{\aEnergyDesc}{%
452-
\attribute{EnergyDesc} {\aG }{\dbl }{The cumulative energy used by the specified object in joules. Note that two attribute get calls are typically required to obtain the energy consumed by the specified object. Subtracting the energy value obtained from the first call from the energy value obtained from the second call produces the energy used for the object from the timestamp of the first value through the timestamp of the second value.}%
452+
\attribute{Energy} {\aG }{\dbl }{The cumulative energy used by the specified object in joules. Note that two attribute get calls are typically required to obtain the energy consumed by the specified object. Subtracting the energy value obtained from the first call from the energy value obtained from the second call produces the energy used for the object from the timestamp of the first value through the timestamp of the second value.}%
453453
}
454454
\newcommand{\aTempDesc}{%
455-
\attribute{TempDesc} {\aG }{\dbl }{The current temperature value for the specified object in degrees Celsius.}%
455+
\attribute{Temp} {\aG }{\dbl }{The current temperature value for the specified object in degrees Celsius.}%
456456
}
457457
\newcommand{\aOSIdDesc}{%
458-
\attribute{OSIdDesc} {\aG }{\dbl }{The operating system ID that corresponds to the object. For example, a runtime system may need to figure out which Power API \texttt{PWR\_OBJ\_CORE} objects correspond to the cores that it is controlling. This attribute provides a linkage between Power API objects and operating system IDs.}%
458+
\attribute{OSId} {\aG }{\dbl }{The operating system ID that corresponds to the object. For example, a runtime system may need to figure out which Power API \texttt{PWR\_OBJ\_CORE} objects correspond to the cores that it is controlling. This attribute provides a linkage between Power API objects and operating system IDs.}%
459459
}
460460
\newcommand{\aThrottledIdDesc}{%
461-
\attribute{ThrottledIdDesc} {\aG }{\dbl }{The cumulative time in nanoseconds that the specified object's performance was purposefully slowed in order to meet some constraint, such as a power cap. }%
461+
\attribute{ThrottledId} {\aG }{\dbl }{The cumulative time in nanoseconds that the specified object's performance was purposefully slowed in order to meet some constraint, such as a power cap. }%
462462
}
463463
\newcommand{\aThrottledCountIdDesc}{%
464-
\attribute{ThrottledCountIdDesc}{\aG }{\dbl }{The cumulative count of the number of times that the specified object's performance was purposefully slowed in order to meet some constraint, such as a power cap.}%
464+
\attribute{ThrottledCountId}{\aG }{\dbl }{The cumulative count of the number of times that the specified object's performance was purposefully slowed in order to meet some constraint, such as a power cap.}%
465465
}
466466
\newcommand{\aGovDesc}{%
467-
\attribute{GovDesc} {\aG }{\dbl }{Power related governor capability exposed through the operating system interface.}
467+
\attribute{Gov} {\aG }{\dbl }{Power related governor capability exposed through the operating system interface.}
468+
}
469+
\newcommand{\aWaterFlowDesc}{%
470+
\attribute{WaterFlow} {\aG }{\dbl }{The current water flow rate in Litres per minute.}
471+
}
472+
\newcommand{\aDewPointDesc}{%
473+
\attribute{DewPoint} {\aG }{\dbl }{The dew point temperature in degrees Celsius.}
474+
}
475+
\newcommand{\aHumidityDesc}{%
476+
\attribute{Humidity} {\aG }{\dbl }{The current relative humidity in percentage.}
477+
}
478+
\newcommand{\aPumpSpeedDesc}{%
479+
\attribute{PumpSpeed} {\aGS }{\dbl }{The current speed of a pump expressed in percentage of maximum speed.}
480+
}
481+
\newcommand{\aPressureDiffDesc}{%
482+
\attribute{PressureDiff} {\aG }{\dbl }{The liquid pressure differential at the object expressed in kPa.}
483+
}
484+
\newcommand{\aValvePositionDesc}{%
485+
\attribute{Valve Position} {\aGS }{\dbl }{The current valve position of the associated liquid valve.}
468486
}
469-
470487
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
471488
%%% The big list of metadata
472489
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -563,9 +580,78 @@
563580
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
564581
%\texttt{PWR\_MD\_MEASURE\_METHOD} & Get & uint64_t & Denotes the measurement method: an actual measurement (returned value = 0) or a model based estimate (return value = 1). Other values $> 1$ may be used to denote multiple vendor specific models in the situation where multiple models may exist. \\
565582
\newcommand{\mMeasureMethod}{%
566-
\metadata{measure\_method} {\aG}{\ptrchar}{Denotes the measurement method: an actual measurement (returned value = 0) or a model based estimate (return value = 1). Other values $> 1$ may be used to denote multiple vendor specific models in the situation where multiple models may exist.}%
583+
\metadata{measure\_method} {\aG}{\uint}{Denotes the measurement method: an actual measurement (returned value = 0) or a model based estimate (return value = 1). Other values $> 1$ may be used to denote multiple vendor specific models in the situation where multiple models may exist.}%
584+
}
585+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
586+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
587+
%\texttt{PWR\_MD\_LIQUID\_RES\_CAP} & Get & uint64_t & The capacity of the liquid resevoir of the object.\\
588+
\newcommand{\mLiquidResCap}{%
589+
\metadata{liquid\_res\_cap} {\aG}{\uint}{Denotes the liquid resevoir capacity in Litres.}%
590+
}
591+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
592+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
593+
%\texttt{PWR\_MD\_LIQUID\_TYPE} & Get & char * & The type of liquid in the cooling infrastructure for the object.\\
594+
\newcommand{\mLiquidType}{%
595+
\metadata{liquid\_type} {\aG}{\ptrchar}{Information string describing the liquid cooling fluid type.}%
596+
}
597+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
598+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
599+
%\texttt{PWR\_MD\_LIQUID\_MAX\_PUMP\_FLOW} & Get & double & The maxmium flow rate of the pump closest to the object.\\
600+
\newcommand{\mLiquidMaxPumpFlow}{%
601+
\metadata{liquid\_max\_pump\_flow} {\aG}{\dbl}{Denotes the maximum flow rate in Litres.}%
602+
}
603+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
604+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
605+
%\texttt{PWR\_MD\_LIQUID\_MIN\_PUMP\_FLOW} & Get & double & The minimum flow rate of the pump closest to the object.\\
606+
\newcommand{\mLiquidMinPumpFlow}{%
607+
\metadata{liquid\_min\_pump\_flow} {\aG}{\dbl}{Denotes the minimum flow rate in Litres.}%
608+
}
609+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
610+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
611+
%\texttt{PWR\_MD\_LIQUID\_RECOMMENDED\_PUMP\_FLOW} & Get & double & The vendor recommended flow rate of the pump closest to the object.\\
612+
\newcommand{\mLiquidRecommendedPumpFlow}{%
613+
\metadata{liquid\_recommended\_pump\_flow} {\aG}{\dbl}{Denotes the recommended flow rate in Litres.}%
567614
}
568615
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
616+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
617+
%\texttt{PWR\_MD\_LIQUID\_MAX\_TEMP} & Get & double & The maxmium temperature of the cooling liquid.\\
618+
\newcommand{\mLiquidMaxTemp}{%
619+
\metadata{liquid\_max\_temp} {\aG}{\dbl}{Denotes the maximum temperature in degrees celcius.}%
620+
}
621+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
622+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
623+
%\texttt{PWR\_MD\_LIQUID\_MIN\_TEMP} & Get & double & The minimum temperature of the cooling liquid.\\
624+
\newcommand{\mLiquidMinTemp}{%
625+
\metadata{liquid\_min\_temp} {\aG}{\dbl}{Denotes the minimum temperature in degrees celcius.}%
626+
}
627+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
628+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
629+
%\texttt{PWR\_MD\_LIQUID\_MAX\_PRESSUE} & Get & double & The maxmium pressure in the cooling liquid line.\\
630+
\newcommand{\mLiquidMaxPressure}{%
631+
\metadata{liquid\_max\_pressure} {\aG}{\dbl}{Denotes the maximum pressue in kPa.}%
632+
}
633+
%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
634+
635+
636+
637+
638+
639+
640+
641+
642+
643+
644+
645+
% PWR_MD_LIQUID_RES_CAP,
646+
% PWR_MD_LIQUID_TYPE,
647+
% PWR_MD_LIQUID_MAX_PUMP_FLOW,
648+
% PWR_MD_LIQUID_MIN_PUMP_FLOW,
649+
% PWR_MD_LIQUID_RECOMMENED_PUMP_FLOW,
650+
% PWR_MD_LIQUID_MAX_TEMP,
651+
% PWR_MD_LIQUID_MIN_TEMP,
652+
% PWR_MD_LIQUID_MAX_PRESSURE,
653+
654+
569655

570656
% End Macro definitions
571657

TheoryOfOperation.tex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ \section{System Description}\label{sec:PowerAPIBaseSysDesc}
155155
It represents one of the main system divisions in a given compute facility and may be the highest level object in facilities that have only one platform.
156156
The Platform object is intended to conceptually represent the entire Platform.
157157
For example, if the Platform object has a power or energy measurement or control capability exposed through the Platform objects attributes the scope of these attributes should be platform wide.
158+
}
159+
\item{
160+
CDU - A Cooling Distribution Unit object represents cooling infrastructure that is part of a facility associated with a platform. The CDU object is intended to be used
161+
for liquid cooling controls and measurements. The CDU object is not strictly between the platform and cabinet objects in the object hierarchy. They can be placed wherever
162+
makes sense for a given cooling solution for a platform.
158163
}
159164
\item{
160165
Cabinet - Objects of type Cabinet are intended to represent the cabinets or racks that act as enclosures (or logical groupings) for the platform equipment.

TypeDefs.tex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ \subsubsection{PWR_ObjType}\label{type:ObjType}
131131
PWR_OBJ_MEM,
132132
PWR_OBJ_NIC,
133133
PWR_OBJ_HT,
134+
PWR_OBJ_CDU,
134135
PWR_NUM_OBJ_TYPES,
135136
/* */
136137
PWR_OBJ_INVALID = -1,
@@ -287,7 +288,15 @@ \subsubsection{PWR_MetaName}\label{type:MetaName}
287288
PWR_MD_VENDOR_INFO_LEN, /* uint64_t, max strlen of PWR_MD_VENDOR_INFO */
288289
PWR_MD_VENDOR_INFO, /* char *, C-style NULL-terminated ASCII string */
289290
PWR_MD_MEASURE_METHOD, /* uint64_t, 0/1 depending on real/model mesurement */
290-
PWR_NUM_META_NAMES,
291+
PWR_MD_LIQUID_RES_CAP, /* uint64_t */
292+
PWR_MD_LIQUID_TYPE, /* char *, C-style NULL-terminated ASCII string */
293+
PWR_MD_LIQUID_MAX_PUMP_FLOW, /* double */
294+
PWR_MD_LIQUID_MIN_PUMP_FLOW, /* double */
295+
PWR_MD_LIQUID_RECOMMENED_PUMP_FLOW, /* double */
296+
PWR_MD_LIQUID_MAX_TEMP, /* double, degrees Celcius */
297+
PWR_MD_LIQUID_MIN_TEMP, /* double, degrees Celcius */
298+
PWR_MD_LIQUID_MAX_PRESSURE, /* double, PSI */
299+
PWR_NUM_META_NAMES, /* uint64_t */
291300
/* */
292301
PWR_MD_INVALID = -1,
293302
PWR_MD_NOT_SPECIFIED = -2

0 commit comments

Comments
 (0)