pmns(5) — Linux manual page

NAME | SYNOPSIS | DESCRIPTION | DISTRIBUTED PMNS | PROCESSING FRAMEWORK | SYNTAX | EXAMPLE | SEE ALSO | COLOPHON

PMNS(5)                    File Formats Manual                    PMNS(5)

NAME         top

       PMNS - the performance metrics name space

SYNOPSIS         top

       $PCP_VAR_DIR/pmns

DESCRIPTION         top

       When using the Performance Metrics Programming Interface (PMAPI)
       of the Performance Co-Pilot (PCP), performance metrics are
       identified by an external name in a hierarchic Performance Metrics
       Name Space (PMNS), and an internal identifier, the Performance
       Metric Identifier (PMID).

       A PMNS specifies the association between a metric's name and its
       PMID.

       A PMNS is defined on one or more ASCII source files.

       Loading of a PMNS is done by calling pmLoadNameSpace(3) or
       pmLoadASCIINameSpace(3).

       As of Version 3.10.3 of PCP, by default duplicate names for the
       same PMID are allowed in the PMNS, although
       pmLoadASCIINameSpace(3) provides an alternative interface with
       user-defined control over the processing of duplicate names in the
       PMNS.  The external format for a PMNS conforms to the syntax and
       semantics described in the following sections.

       There is one default PMNS in the files below $PCP_VAR_DIR/pmns,
       although users and application developers are free to create and
       use alternate PMNS's.  For an example of this, see the PCP
       Tutorial in $PCP_DEMOS_DIR/Tutorial.

       Although an application can call pmLoadNameSpace(3), normally this
       is only done directly for the -n command line option where an
       explicit root PMNS file is specified.  Since PCP version 2 uses a
       distributed PMNS (see below), an application can extract PMNS
       information from a host's PMCD or an archive.  If the PMNS source
       is a version 1 archive (see PCPIntro(1)), however, then the local
       PMNS will be loaded using the path specified by the environment
       variable PMNS_DEFAULT.

DISTRIBUTED PMNS         top

       In PCP version 1, the PMNS functions in the API all operated on a
       PMNS loaded locally from a file. Since PCP version 2, however,
       PMNS functions may get the PMNS information remotely from a PMCD
       or directly from the meta data of an archive.

PROCESSING FRAMEWORK         top

       The PMNS specification is initially passed through pmcpp(1).  This
       means the following facilities may be used in the specification

       +  C-style comments

       +  #include directives

       +  #define directives and macro substitution

       +  conditional processing via #ifdef ...  #endif, etc.

       When pmcpp(1) is executed, the ``standard'' include directories
       are the current directory and $PCP_VAR_DIR/pmns.

       The preprocessing with pmcpp(1) may be omitted in some cases where
       the PMNS is known to not contain any C-style comments,
       preprocessor directives or macros.  Refer to the descriptions of
       pmLoadASCIINameSpace(3) and pmLoadNameSpace(3) for details.

SYNTAX         top

       The general syntax for a non-leaf node in the PMNS is as follows

       pathname {
               name      [pmid]
               ...
       }

       Where pathname is the full pathname from the root of the PMNS to
       this non-leaf node, with each component in the pathname separated
       by a ``.''.  The root node for the PMNS must have the special name
       ``root'', but the common prefix ``root.'' must be omitted from all
       pathnames.  Each component in the pathname is drawn from the
       ASCII(7) character set, beginning with an alphabetic character,
       and followed by zero or more characters drawn from the
       alphabetics, the digits and the underscore ``_'') character.  For
       alphabetic characters in a pathname component, upper and lower
       case are distinguished.

       Non-leaf nodes in the PMNS may be defined in any order.

       The descendent nodes are defined by the set of names, relative to
       the pathname of their parent non-leaf node.  For the descendent
       nodes, leaf nodes have a pmid specification, non-leaf nodes do
       not.  The syntax for the pmid specification has been chosen to
       help manage the allocation of PMIDs across disjoint and autonomous
       domains of administration and implementation.  Each pmid consists
       of 3 integer parts, separated by colons, e.g. 14:27:11.  This
       hierarchic numbering scheme is intended to mirror the
       implementation hierarchy of performance metric domain, metrics
       cluster (data structure or operational similarity) and individual
       metric.  In practice, the two leading components are likely to be
       macros in the PMNS specification source, and pmcpp(1) will convert
       the macros to integers.  These macros for the initial components
       of the pmid are likely to be defined either in a standard include
       file, e.g. $PCP_VAR_DIR/pmns/stdpmid, or in the current source
       file.

       To support dynamic metrics, where the existence of a metric is
       known to a PMDA, but not visible in the PMNS, a variant syntax for
       the pmid is supported, namely a domain number followed by
       asterisks for the other components of the pmid, e.g. 14:*:*.  The
       corresponding metric name forms the root of a subtree of dynamic
       metric names defined in the corresponding PMDA as identified by
       the domain number.

       The current allocation of the high-order (PMD or domain) component
       of PMIDs is as follows.
           ┌─────────┬────────────────────────────────────────────┐
           │  Range  │                 Allocation                 │
           ├─────────┼────────────────────────────────────────────┤
           │       0 │ reserved                                   │
           ├─────────┼────────────────────────────────────────────┤
           │   1-384 │ production PMDAs from PCP packages         │
           ├─────────┼────────────────────────────────────────────┤
           │ 385-510 │ end-user PMDAs (allocate from high to low) │
           ├─────────┼────────────────────────────────────────────┤
           │     511 │ reserved for dynamic PMNS entries          │
           └─────────┴────────────────────────────────────────────┘

EXAMPLE         top

       #define KERNEL 1
       #define FOO 387
       root {
           network
           cpu
           dynamic     FOO:*:*
       }

       #define NETWORK 26
       network {
           intrate     KERNEL:NETWORK:1
           packetrate
       }

       network.packetrate {
           in          KERNEL:NETWORK:35
           out         KERNEL:NETWORK:36
       }

       #define CPU 10
       cpu {
           syscallrate KERNEL:CPU:10
           util
       }

       #define USER 20
       #define SYSTEM 21
       #define IDLE 22

       cpu.util {
           user        KERNEL:CPU:USER
           sys         KERNEL:CPU:SYSTEM
           idle        KERNEL:CPU:IDLE
       }

SEE ALSO         top

       PCPIntro(1), pmcd(1), pmcpp(1), PCPIntro(3), PMAPI(3),
       pmErrStr(3), pmGetConfig(3), pmLoadASCIINameSpace(3),
       pmLoadNameSpace(3), pcp.conf(5) and pcp.env(5).

COLOPHON         top

       This page is part of the PCP (Performance Co-Pilot) project.
       Information about the project can be found at 
       ⟨http://www.pcp.io/⟩.  If you have a bug report for this manual
       page, send it to pcp@groups.io.  This page was obtained from the
       project's upstream Git repository
       ⟨https://github.com/performancecopilot/pcp.git⟩ on 2025-02-02.
       (At that time, the date of the most recent commit that was found
       in the repository was 2025-01-30.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there is
       a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

Performance Co-Pilot               PCP                            PMNS(5)

Pages that refer to this page: chkhelp(1)collectl2pcp(1)dbpmda(1)genpmda(1)newhelp(1)pcp(1)pcp2arrow(1)pcp2elasticsearch(1)pcp2graphite(1)pcp2influxdb(1)pcp2json(1)pcp2openmetrics(1)pcp2spark(1)pcp2template(1)pcp2xlsx(1)pcp2xml(1)pcp2zabbix(1)pcp-dstat(1)pcpintro(1)pmcd(1)pmchart(1)pmclient(1)pmcpp(1)pmdabcc(1)pmdanetcheck(1)pmdaoverhead(1)pmgenmap(1)pmie(1)pminfo(1)pmlc(1)pmlogcheck(1)pmlogdump(1)pmlogextract(1)pmlogger(1)pmlogrewrite(1)pmlogsummary(1)pmnsadd(1)pmnscomp(1)pmnsdel(1)pmnsmerge(1)pmprobe(1)pmrep(1)pmstat(1)pmstore(1)pmval(1)sheet2pcp(1)pcpintro(3)pmaddderived(3)pmaddderivedtext(3)pmapi(3)pmda(3)pmgetchildren(3)pmgetchildrenstatus(3)pmgetderivedcontrol(3)pmgetpmnslocation(3)pmloadasciinamespace(3)pmloadderivedconfig(3)pmloadnamespace(3)pmnameall(3)pmnameid(3)pmregisterderived(3)pmtrimnamespace(3)pmunloadnamespace(3)pmwebapi(3)