NAME
pmConvScale - rescale a performance metric value
C SYNOPSIS
#include <pcp/pmapi.h>
int pmConvScale(int type, const pmAtomValue *ival, const
pmUnits *iunit, pmAtomValue *oval, pmUnits *ounit)
cc ... -lpcp
DESCRIPTION
All performance metric values may be encoded in a pmAtom
Value union, defined as follows;
typedef union {
__int32_t l; /* 32-bit signed */
__uint32_t ul; /* 32-bit unsigned */
__int64_t ll; /* 64-bit signed */
__uint64_t ull; /* 64-bit unsigned */
float f; /* 32-bit floating point */
double d; /* 64-bit floating point */
char *cp; /* char ptr */
void *vp; /* void ptr */
} pmAtomValue;
The encoding of a performance metric's dimensionality and
scale uses a pmUnits structure; see pmLookupDesc(3).
Given a performance metric value pointed to by ival multi
ply it by a scale factor and return the value in oval.
The scaling takes place from the units defined by iunit
into the units defined by ounit. Both input and output
units must have the same dimensionality.
The performance metric type for both input and output val
ues is determined by type, the value for which is typi
cally extracted from a pmDesc structure, following a call
to pmLookupDesc(3) for a particular performance metric.
pmConvScale is most useful when values returned via
pmFetch(3), (and possibly extracted using pmExtract
Value(3)) need to be normalized into some canonical scale
and units for the purposes of computation.
As a special case, if all components of the dimension are
zero, then this is treated as synonymous with a ``count''
dimension of one, and so the ``count'' scale components
determine the relative scaling. This accommodates the
case where performance metrics are dimensionless, without
special case handling on the part of the caller.
PMAPI(3), pmAtomStr(3), pmExtractValue(3), pmFetch(3),
pmLookupDesc(3), pmPrintValue(3), pmTypeStr(3) and pmU
nitsStr(3).
DIAGNOSTICS
PM_ERR_CONV
iunit and ounit have different dimensionality, or
have inappropriate type
PM_ERR_UNIT
Inappropriate iunit or ounit parameter
Man(1) output converted with
man2html