Product SiteDocumentation Site

2.2.2. DSO PMDA

Each PMDA is required to implement a function that handles each of the request types. By implementing these functions as library functions, a PMDA can be implemented as a dynamically shared object (DSO) and attached by PMCD at run time with a platform-specific call, such as dlopen; see the dlopen(3) man page. This eliminates the need for an IPC layer (typically a pipe) between each PMDA and PMCD, because each request becomes a function call rather than a message exchange. The required library functions are detailed in Section 2.5, “PMDA Interface”.
A PMDA that interacts with PMCD in this fashion must abide by a formal initialization protocol so that PMCD can discover the location of the library functions that are subsequently called with function pointers. When a DSO PMDA is installed, the PMCD configuration file, ${PCP_PMCDCONF_PATH}, is updated to reflect the domain and name of the PMDA, the location of the shared object, and the name of the initialization function. The initialization sequence is discussed in Section 2.6, “Initializing a PMDA”.
As superuser, install the simple PMDA as a DSO, as shown in Example 2.1, “Simple PMDA as a DSO”, and observe the changes in the PMCD configuration file. The output may differ slightly depending on the operating system you are using, any other PMDAs you have installed or any PMCD access controls you have in place.

Example 2.1. Simple PMDA as a DSO

              cat ${PCP_PMCDCONF_PATH}
# Performance Metrics Domain Specifications
# This file is automatically generated during the build
# Name  Id      IPC     IPC Params      File/Cmd
root    1       pipe    binary          /var/lib/pcp/pmdas/root/pmdaroot
pmcd    2       dso     pmcd_init       ${PCP_PMDAS_DIR}/pmcd/
proc    3       pipe    binary          ${PCP_PMDAS_DIR}/linux/ -d 3
linux   60      dso     linux_init      ${PCP_PMDAS_DIR}/linux/
mmv     70      dso     mmv_init        /var/lib/pcp/pmdas/mmv/
simple  254     dso     simple_init     ${PCP_PMDAS_DIR}/simple/
As can be seen from the contents of ${PCP_PMCDCONF_PATH}, the DSO version of the simple PMDA is in a library named and has an initialization function called simple_init. The domain of the simple PMDA is 254, as shown in the column headed Id.


For some platforms the DSO file name will not be On Mac OS X it is pmda_simple.dylib and on Windows it is pmda_simple.dll.