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

# pmLoadDerivedConfig(3)

load derived metric definitions from files

## NAME

**pmLoadDerivedConfig** - load derived metric definitions from files

## C SYNOPSIS

**#include \<pcp/pmapi.h\>**

**int pmLoadDerivedConfig(char \****path***);**

**cc ... -lpcp**

## DESCRIPTION

Derived metrics may be used to extend the available metrics with new (derived) metrics using simple arithmetic expressions. The definitions of these metrics can be persisted and loaded programmatically by monitor tools using **pmLoadDerivedConfig**.

The *path* parameter defines a colon separated list of files and/or directories (the syntax is the same as for the **$PATH** variable for [**sh**(1)](/sh/1.md)), from which derived metric specifications are to be sourced. The *path* components are expanded into a list of files as follows: if a component is a file, then that file is added to the list, else if a component is a directory then recursive descent is used to enumerate all files below that directory and these are added to the list. Each file in the resulting list is parsed in order, and according to the derived metrics syntax described below.

Each line of the file(s) identified by *path* is either a control line beginning with **#control** (see [**pmSetDerivedControl**(3)](/pmSetDerivedControl/3.md) for details) or comment line (otherwise with a \`\`#'' in the first position of the line) or the declaration of a derived performance metric, specified as:

- \*

  the name of the derived metric, using the same \`\`dot notation'' syntax that is used for PCP performance metrics, see [**PCPIntro**(1)](/PCPIntro/1.md) and [**PMNS**(5)](/PMNS/5.md).

- \*

  an equals sign (\`\`='')

- \*

  a valid expression for a derived metric, as described in [**pmRegisterDerived**(3)](/pmRegisterDerived/3.md).

For each line containing a derived metric definition, [**pmRegisterDerived**(3)](/pmRegisterDerived/3.md) is called to register the new derived metric.

Once a derived metric has been declared, it may be assigned additional attributes with a line of the form:

- \*

  the name of the derived metric,

- \*

  a left parenthesis, an *attribute* *type* and a right parenthesis,

- \*

  an equals sign (\`\`=''),

- \*

  an *attribute* *value*.

Currently, *attribute* *type* may be either **oneline** or **helptext** to designate the \`\`one line'' or expanded help text to be associated with the derived metric, see [**pmLookupText**(3)](/pmLookupText/3.md).

The *attribute* *value* may be either arbitrary text following the \`\`='' and ending at the end of the line, else a string enclosed in either single quotes (') or double quotes (").  In the latter case, the *attribute* *value* may span multiple lines, and a simple escape mechanism is supported, namely for any character \`\`x'', \`\`\\x'' is replaced by \`\`x'' (this allows quotes to be escaped within a string, for example), and there is a special case when the \`\`\\'' comes at the end of the line in which case the following newline is not included in the *attribute* *value*.

Outside of *attribute* *values*, white space is ignored in the lines, and blank lines are ignored altogether.

Because **pmLoadDerivedConfig** may process many files, each of which may contain many derived metric specifications, it is not possible to provide a specific error status on return. Hence the result from **pmLoadDerivedConfig** will be the number of derived metrics successfully loaded from files on the given *path*. Catastrophic errors such as not being able to open one of the files on the given *path* will cause an immediate return with a negative return value that can be passed to [**pmErrStr**(3)](/pmErrStr/3.md) to obtain the associated error message.

When errors are encountered in the derived metric specifications diagnostic messages are generated by [**pmRegisterDerived**(3)](/pmRegisterDerived/3.md) and displayed via [**pmprintf**(3)](/pmprintf/3.md).

[**pmUnregisterDerived**(3)](/pmUnregisterDerived/3.md) may be used to undefine a derived metric by name, which removes all instances of the derived metric in all contexts, irrespective of how the derived metric was defined.

## EXAMPLE

```
# sample derived metric definitions
bad_in_pkts = network.interface.in.errors + network.interface.in.drops
# note the following would need to be on a single line ...
disk.dev.read_pct = 100 * delta(disk.dev.read) /
            (delta(disk.dev.read) + delta(disk.dev.write))
disk.dev.read_pct(oneline) = percentage of disk reads
disk.dev.read_pct(helptext) = '\
Percentage of disk reads compared to the total number of
disk reads and disk writes.'
# the operand metric (some.metric.bar) may not be defined
#control novalue=1
foo = some.metric.bar * hinv.ncpu
```

## SEE ALSO

[**PCPIntro**(1)](/PCPIntro/1.md), [**sh**(1)](/sh/1.md), [**PMAPI**(3)](/PMAPI/3.md), [**pmLookupText**(3)](/pmLookupText/3.md), [**pmRegisterDerived**(3)](/pmRegisterDerived/3.md), [**pmSetDerivedControl**(3)](/pmSetDerivedControl/3.md), [**pmUnregisterDerived**(3)](/pmUnregisterDerived/3.md), [**pmprintf**(3)](/pmprintf/3.md) and [**PMNS**(5)](/PMNS/5.md).
