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

# pmnsmerge(1)

merge multiple versions of a Performance Co-Pilot PMNS

## NAME

**pmnsmerge** - merge multiple versions of a Performance Co-Pilot PMNS

## SYNOPSIS

**$PCP\_BINADM\_DIR/pmnsmerge** \[**-adfxv**\] \[**-D** *debug*\] *infile* \[...\] *outfile*

## DESCRIPTION

**pmnsmerge** merges multiple instances of a Performance Metrics Name Space (PMNS), as used by the components of the Performance Co-Pilot (PCP).

Each *infile* argument names a file that includes the root of a PMNS, of the form

```
root {
    /* arbitrary stuff */
}
```

The order in which the *infile* files are processed is determined by the presence or absence of embedded control lines of the form

`#define _DATESTAMP `*YYYYMMDD*

Files without a control line are processed first and in the order they appear on the command line. The other files are then processed in order of ascending `_DATESTAMP`.

The **-a** option suppresses the argument re-ordering and processes all files in the order they appear on the command line.

The merging proceeds by matching names in PMNS, only those **new** names in each PMNS are considered, and these are added after any existing metrics with the longest possible matching prefix in their names. For example, merging these two input PMNS

```
root {                    root {
                              surprise  1:1:3
    mine       1:1:1          mine      1:1:1
    foo                       foo
                              yawn
    yours      1:1:2
}                         }
foo {                     foo {
    fumble     1:2:1
                              mumble    1:2:3
    stumble    1:2:2          stumble   1:2:2
}                         }
                          yawn {
                              sleepy    1:3:1
                          }
```

Produces the resulting PMNS in *out*.

```
root {
    mine      1:1:1
    foo
    yours     1:1:2
    surprise  1:1:3
    yawn
}
foo {
    fumble    1:2:1
    stumble   1:2:2
    mumble    1:2:3
}
yawn {
    sleepy    1:3:1
}
```

To avoid accidental over-writing of PMNS files, *outfile* is expected to not exist when **pmnsmerge** starts. The **-f** option allows an existing *outfile* to be unlinked (if possible) and truncated before writing starts.

Normally duplicate names for the same Performance Metric Identifier (PMID) in a PMNS are allowed. The **-d** option is the default option and is included for backwards compatibility. The **-x** option reverses the default and **pmnsmerge** will report an error and exit with a non-zero status if a duplicate name is found for a PMID in any of the *input* PMNS files or in the merged *output* PMNS.

The **-v** option produces one line of diagnostic output as each *infile* is processed.

Once all of the merging has been completed, **pmnsmerge** will attempt to load the resultant namespace using [**pmLoadASCIINameSpace**(3)](/pmLoadASCIINameSpace/3.md) - if this fails for any reason, *outfile* will still be created, but **pmnsmerge** will report the problem and exit with non-zero status.

Using **pmnsmerge** with a single *input* argument allows that PMNS file to be checked. In addition to syntactic checking, specifying **-x** will also enable a check for duplicate names for all PMIDs.

## OPTIONS

The available command line options are:

- **-a**

  Process files in command line order.

- **-d**, **--dupok**

  Allow duplicate metric names per PMID. This is the default.

- **-f**, **--force**

  Overwrite output file if it already exists.

- **-v**, **--verbose**

  Verbose input processing.

- **-x**, **--nodups**

  Do not allow duplicate metric names per PMID.

- **-?**, **--help**

  Display usage message and exit.

## CAVEATS

Once the writing of the new *outfile* file has begun, the signals SIGINT, SIGHUP and SIGTERM will be ignored to protect the integrity of the new file.

## PCP ENVIRONMENT

Environment variables with the prefix **PCP\_** are used to parameterize the file and directory names used by PCP. On each installation, the file */etc/pcp.conf* contains the local values for these variables. The **$PCP\_CONF** variable may be used to specify an alternative configuration file, as described in [**pcp.conf**(5)](/pcp.conf/5.md).

## DEBUGGING OPTIONS

The **-D** or **--debug** option enables the output of additional diagnostics on *stderr* to help triage problems, although the information is sometimes cryptic and primarily intended to provide guidance for developers rather than for end-users. *debug* is a comma separated list of debugging options; use [**pmdbg**(1)](/pmdbg/1.md) with the **-l** option to obtain a list of the available debugging options and their meaning.

## SEE ALSO

[**pmnsadd**(1)](/pmnsadd/1.md), [**pmnsdel**(1)](/pmnsdel/1.md), [**pmLoadASCIINameSpace**(3)](/pmLoadASCIINameSpace/3.md), [**pcp.conf**(5)](/pcp.conf/5.md), [**pcp.env**(5)](/pcp.env/5.md) and [**PMNS**(5)](/PMNS/5.md).
