---
name: "pmConvScale"
section: "3"
platform: "linux"
package: "pcp"
version: "7.2.2-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pmConvScale"
---

# pmConvScale(3)

rescale a performance metric value

## 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 */
    pmValueBlock *vbp;  /* pmValueBlock ptr */
} pmAtomValue;
```

The encoding of a performance metric's dimensionality and scale uses a *pmUnits* structure; see [**pmLookupDesc**(3)](/pmLookupDesc/3.md).

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, i.e. each of the fields *dimSpace*, *dimTime*, *dimCount* and *extraUnit* must have the same value in both *iunit* and *ounit*.

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)](/pmLookupDesc/3.md) for a particular performance metric.

**pmConvScale** is most useful when values returned via [**pmFetch**(3)](/pmFetch/3.md), (and possibly extracted using [**pmExtractValue**(3)](/pmExtractValue/3.md)) 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.

## DIAGNOSTICS

**PM\_ERR\_CONV**

-

  *iunit* and *ounit* have different dimensionality, or have inappropriate *type*

**PM\_ERR\_UNIT**

-

  Inappropriate *iunit* or *ounit* parameter

## SEE ALSO

[**PMAPI**(3)](/PMAPI/3.md), [**pmAtomStr**(3)](/pmAtomStr/3.md), [**pmExtractValue**(3)](/pmExtractValue/3.md), [**pmFetch**(3)](/pmFetch/3.md), [**pmLookupDesc**(3)](/pmLookupDesc/3.md), [**pmPrintValue**(3)](/pmPrintValue/3.md), [**pmTypeStr**(3)](/pmTypeStr/3.md) and [**pmUnitsStr**(3)](/pmUnitsStr/3.md).
