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

# \_\_pmLocalPMDA(3)

change the table of DSO PMDAs for PM\_CONTEXT\_LOCAL contexts

## NAME

**\_\_pmLocalPMDA** - change the table of DSO PMDAs for PM\_CONTEXT\_LOCAL contexts

## C SYNOPSIS

**#include "pmapi.h"**\
 **#include "libpcp.h"**

**int \_\_pmLocalPMDA(int** *op***,** **int** *domain***,** **const char \****name***,** **const char \****init***);**

**cc ... -lpcp**

## CAVEAT

This documentation is intended for internal Performance Co-Pilot (PCP) developer use.

These interfaces are not part of the PCP APIs that are guaranteed to remain fixed across releases, and they may not work, or may provide different semantics at some point in the future.

## DESCRIPTION

PCP contexts of type **PM\_CONTEXT\_LOCAL** are used by clients that wish to fetch metrics directly from one or more PMDAs on the local host without involving [**pmcd**(1)](/pmcd/1.md). A PMDA that is to be used in this way must have been built as a Dynamic Shared Object (DSO).

Historically the table of PMDAs available for use with **PM\_CONTEXT\_LOCAL** was hardcoded to the following:

- \*

  The PMDA (or PMDAs) that export the operating system performance data and data about process activity.

- \*

  The **mmv** PMDA.

- \*

  The **sample** PMDA provided **$PCP\_LITE\_SAMPLE** or **$PMDA\_LOCAL\_SAMPLE** is set in the environment - used mostly for QA and testing.

The initial table of PMDAs available for use with **PM\_CONTEXT\_LOCAL** is now generated dynamically from all those PMDAs that have been installed as DSOs on the local host. The one exception is the \`\`pmcd'' PMDA which only operates correctly in the address space of a running [**pmcd**(1)](/pmcd/1.md) process and so is not available to an application using a **PM\_CONTEXT\_LOCAL** context.

**\_\_pmLocalPMDA** provides a number of services to amend the table of PMDAs available for use with **PM\_CONTEXT\_LOCAL**.

The *op* argument specifies the what should be done and takes one of the following values and actions:

- PM\_LOCAL\_ADD

  Append an entry to the table for the PMDA with a Performance Metrics Domain (PMD) of *domain*, the path to the DSO PMDA is given by *path* and the PMDA's initialization routine is *init*.

- PM\_LOCAL\_DEL

  Removes all entries in the table where the *domain* matches, or the *path* matches.  Setting the arguments *domain* to -1 or *path* to **NULL** to force matching on the *other* argument. The *init* argument is ignored.

- PM\_LOCAL\_CLEAR

  Remove all entries from the table.  All the other arguments are ignored in this case.

The *domain*, *name* and *init* arguments have similar syntax and semantics to the associated fields in the [**pmcd**(1)](/pmcd/1.md) configuration file. The one difference is the *path* argument which is used by **\_\_pmLocalPMDA** to find a likely looking DSO by searching in this order: **$PCP\_PMDAS\_DIR** /*path*, *path*, **$PCP\_PMDAS\_DIR** /*path* .*dso-suffix* and finally *path* .*dso-suffix* (*dso-suffix* is the local platform specific default file name suffix for a DSO, e.g. **so** for Linux, **dylib** for macOS, **dll** for Windows, etc.).

## RETURN VALUE

In most cases, **\_\_pmLocalPMDA** returns 0 to indicate success. If *op* is invalid, then the return value is **PM\_ERR\_CONV** else if there is no matching table entry found for a **PM\_LOCAL\_DEL** operation, PM\_ERR\_INDOM is returned.

## SEE ALSO

[**pmcd**(1)](/pmcd/1.md), [**PMAPI**(3)](/PMAPI/3.md), [**pmNewContext**(3)](/pmNewContext/3.md) and [**pmSpecLocalPMDA**(3)](/pmSpecLocalPMDA/3.md).
