Quickstart

This document will guide you to get up and running with running your computational jobs through the Node Resource Manager (NRM).

Install

Using Spack

Using Spack is recommended to install libnrm:

$ spack install libnrm

libnrm also includes two optional utilities for power/event measurement on a variety of leadership-class systems:

These can be installed as variants of libnrm:

$ spack install libnrm ^papi
$ spack install libnrm ^geopm mpi=False cflags="--with-geopm"

Build, install from source

The libnrm instrumentation library and power-measuring utilities can be downloaded from GitHub:

$ git clone https://github.com/anlsys/libnrm.git

Build and install:

$ cd libnrm
$ ./autogen.sh
$ ./configure; make; make install
Dependency Ubuntu packages
  • libzmq3-dev

  • libzmq5

  • libczmq4

  • libprotobuf-c

  • protobuf-c-compiler

  • libjansson-dev

  • libjansson4

  • libhwloc-dev

Setup: Launching the nrmd daemon

$ nrmd

NRM’s behavior and resource arbitration is controlled by the nrmd userspace daemon. It should be launched in the background.

The daemon logs its output to stdout by default and optionally accepts a .json config file as the first positional argument.

Usage: nrmd [options]

Allowed options:
--help, -h       : print this help message
--version, -V     : print program version
--verbose, -v     : increase verbosity
--quiet, -q      : no log output
--log-level, -l <int> : set log level (0-5)
--uri, -u <str>    : daemon socket uri to connect to
--rpc-port, -r <uint> : daemon rpc port to use
--pub-port, -p <uint> : daemon pub/sub port to use

nrmc Client utility

NRM features a nrmc command-line utility that largely mirrors the capabilities of the client object from the API.

Usage: nrmc [options]

Allowed options:
--help, -h             : print this help message
--version, -V          : print program version
--verbose, -v          : increase verbosity
--quiet, -q            : no log output
--log-level, -l <int>  : set log level (0-5)
--uri, -u <str>        : daemon socket uri to connect to
--rpc-port, -r  <uint> : daemon rpc port to use
--pub-port, -p  <uint> : daemon pub/sub port to use

Available Commands:
actuate
add-scope
add-slice
add-sensor
find-actuator
find-scope
find-slice
find-sensor
listen
list-actuators
list-scopes
list-slices
list-sensors
send-event
remove-scope
remove-slice
remove-sensor
run
exit

nrmc run

Run a command. Optionally inject an additional/replacement library via -d, e.g.:

$ nrmc run -d /path/to/libnrm-ompt.so ./my_omp_app

Included Replacement libraries

libnrm includes replacement libraries for MPI and openMP that have each been instrumented with libnrm. These will be installed in lib wherever libnrm was installed.

For example, supposing libnrm was configured via ./configure --prefix=$PWD/build, then to inject libnrm’s instrumented MPI:

mpiexec -n 16 nrmc run -d $PWD/build/lib/libnrm-pmpi.so ./my_mpi_app

nrmc listen

Print detected event instances.

Listen to all events:

$ nrmc listen

Listen to events acknowledged by the daemon:

$ nrmc listen daemon.events.raw