The Lightweight Distributed Metric Service (LDMS) is a low-overhead, low-latency framework for collecting metric data on a large distributed computer system. The framework includes
- a public API with a reference implementation,
- tools for collecting, aggregating, and transporting metric values,
- collectors for several common types of metrics.
The API provides a way for vendors to expose system information in a uniform manner without being required to provide source code for accessing the information (although we advise it be included) which might reveal proprietary methods or information.
Metric information can be updated by a kernel module which runs only when applications yield the processor and transported using RDMA, resulting in minimal jitter during collection. LDMS has been run on 10,000 cores collecting over 100,000 metric values per second with less than 0.2% overhead.
You may clone LDMS source (and its submodules) from the official Git repository:
git clone FIXME-NOT-CURRENT: git://hekili.ca.sandia.gov/git-ovis/repositories/LDMS.git
cd LDMS
git submodule update --init --recursive
In order to build LDMS from source, you must have
- a working C compiler,
- automake/autoconf (>=2.63)/libtool
- readline if you wish to build
ldmsctl
(which you probably do), and - papi if you wish to collect performance counter metrics.
LDMS comes with its own version of libevent, but will use the one supplied with your system if it is found. Otherwise, it will build libevent from source.
You may configure LDMS and the rest using
./autogen.sh
./packaging/configure-all.sh
The build tree will be in .build-all, not in the source directories.
Once configured, cd .build-all make make install
will build and install the binaries and header files in /opt/ovis. But note, the configure will fail unless there is already ovis-lib and libsos installed in /opt/ovis, so you may be better off building the rpms. Read packaging/build-all.sh and friends for the complete details.
As part of the configuration step, you may elect to compile support for different transports into LDMS:
- ldms_SOCK socket transport (local and/or remote),
- ldms_RDMA remote direct memory access transport (local and/or remote),
- ldms_MMAP memory map (local, inter-process only)
./bin/ldmsd
./bin/ldmsctl
load meminfo
init meminfo
start meminfo 500000
^D
./bin/ldms_ls
- Linux boxen.
- Mac OS X boxen.
- Your neighborhood Cray XE6.