Man Linux: Main Page and Category List

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, const pmUnits *ounit)

       cc ... -lpcp

DESCRIPTION

       All performance metric values may be encoded in  a  pmAtomValue  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 multiply  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 values is
       determined by type, the value for which is typically 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 pmExtractValue(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.

SEE ALSO

       PMAPI(3), pmAtomStr(3), pmExtractValue(3), pmFetch(3), pmLookupDesc(3),
       pmPrintValue(3), pmTypeStr(3) and pmUnitsStr(3).

DIAGNOSTICS

       PM_ERR_CONV

              iunit   and   ounit   have  different  dimensionality,  or  have
              inappropriate type

       PM_ERR_UNIT

              Inappropriate iunit or ounit parameter