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

# pmdiff(1)

compares archives and report significant differences

## NAME

**pmdiff** - compares archives and report significant differences

## SYNOPSIS

**pmdiff** \[**-dzV?**\] \[**-B** *starttime*\] \[**-E** *endtime*\] \[**-p** *precision*\] \[**-q** *thres*\] \[**-S** *starttime*\] \[**--skip-excluded**\] \[**--skip-missing**\] \[**-T** *endtime*\] \[**-x** *metric*\] \[**-X** *file*\] \[**-Z** *timezone*\] *archive1* \[*archive2*\]

## DESCRIPTION

**pmdiff** compares the average values for every metric in either one or two sets of archives, in a given time window, for changes that are likely to be of interest when searching for performance regressions.

The archive specifiers *archive1* and *archive2* may be comma-separated lists of names, each of which may be the base name of an archive or the name of a directory containing one or more archives. Each archive in the resulting set of archives must have been previously created using [**pmlogger**(1)](/pmlogger/1.md). The [**pmlogsummary**(1)](/pmlogsummary/1.md) utility is used to obtain the average values used for comparison.

There are two sorts of invocation of the tool: with either one or two sets of archives.

In the first case, the only sensible command line requires use of all four time window arguments.  These are specified using the same time window format described in [**PCPIntro**(1)](/PCPIntro/1.md), and are **-S**/**--start** and **-T**/**--finish** for the start and end times of the first time window of interest in the archive set, and **-B**/**--before** and **-E**/**--end** for the start and end times of the second time window of interest.

In the second case, with two sets of archives, the **-B**/**--before** and **-E**/**--end** options might be unnecessary.  This might be the case, for example, when comparing the same time window of two consecutive days (usually two separate sets of archives), or a time window on the same day of different weeks.

In either case, **pmdiff** produces a sorted summary of those metrics in the specified window whose values have deviated the most from a minimal threshold. The level of deviation is calculated by dividing the average value of each metric in both logs, and then calculating whether the ratio falls outside of a range considered normal. This ratio can be adjusted using the **-q**/**--threshold** option, and by default it is 2 (i.e. report all metrics with average values that have more than doubled in the two time windows or more than halved in the two time windows).

If the baseline value is zero and the comparison value is non-zero, the ratio is reported as \`\`\|+\|'' (infinitely large). If the comparison value is zero and the baseline value is non-zero, the ratio is reported as \`\`\|-\|'' (infinitely small).

Reported metrics are sorted in ascending ratio order.

Should any metrics be present in one window but missing from the other, a diagnostic will be displayed listing each missing metric and the archive set from which it was missing.

Metrics with counter semantics are converted to rates before being evaluated.

## OPTIONS

The available command line options are:

- **-d**, **--keep**

  Debug mode, keep intermediate files.

- **-B** *time*, **--begin**=*time*

  Start *time* for the second time window.

- **-E** *time*, **--end**=*time*

  End *time* for the second time window.

- **-p** *precision*, **--precision**=*precision*

  Print all floating point numbers with *precision* digits after the decimal place.

- **-q** *threshold*, **--threshold**=*threshold*

  Change the *threshold* for interesting metrics, see above for more details.

- **-S** *time*, **--start**=*time*

  Start *time* of the first time window.

- **-T** *time*, **--finish**=*time*

  End *time* of the first time window.

- **-V**, **--version**

  Display version number and exit.

- **-x** *metric*

  Compare each *metric* in each archive set in the time windows specified to a given [**egrep**(1)](/egrep/1.md) pattern, excluding those that match from the report output.

- **-X** *file*

  Allows a *file* to be specified which containing [**egrep**(1)](/egrep/1.md) patterns which are applied to the metric names to optionally exclude some from the report.

- **-z**, **--hostzone**

  Use the local timezone from the given archive set.

- **-Z** *timezone*, **--timezone**=*timezone*

  Changes the timezone in the archive labels to *timezone* in the format of the environment variable **TZ** as described in [**environ**(7)](/environ/7.md).

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

  Display usage message and exit.

- **--skip-excluded**

  Cull the list of names of metrics being excluded from the output.

- **--skip-missing**

  By default, **pmdiff** will report the names of any metrics that are in one archive set but not the other. This option suppresses that reporting.

## FILES

- *$PCP\_LOG\_DIR/pmlogger/\<hostname\>*

  Default directory for PCP archives containing performance metric values collected from the host *hostname*.

## 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).

## SEE ALSO

[**PCPIntro**(1)](/PCPIntro/1.md), [**pmlogger**(1)](/pmlogger/1.md), [**pmlogsummary**(1)](/pmlogsummary/1.md), [**egrep**(1)](/egrep/1.md), [**pcp.conf**(5)](/pcp.conf/5.md) and [**pcp.env**(5)](/pcp.env/5.md).
