/dev/kev

libsysconfcpus

LD_PRELOAD library to override number of CPUs reported by sysconf()

Description
libsysconfcpus is an $LD_PRELOAD library that intercepts calls to sysconf(), and adjusts the responses for _SC_NPROCESSORS_CONF and _SC_NPROCESSORS_ONLN, which are used to determine the number of processors available (either configured or online) at runtime in a system. Unfortunately, some closed- source software assumes that all of these processors may be used for computation, which is an assumption that is frequently not true on multiuser and HPC systems. Thus, libsysconfcpus provides a simple, non-intrusive way of adjusting the behaviour of such software (when it is dynamically linked).

In addition, libsysconfcpus is a small, simple example of how to use $LD_PRELOAD to do function call interception on glibc and POSIX systems. It is hoped that it is useful not only inherently, but also for learning about $LD_PRELOAD, and as a template or skeleton LD_PRELOAD library. Its from-scratch development was used to illustrate LD_PRELOAD usage in the "Fun with LD_PRELOAD" presentation by the author at linux.conf.au 2009 in Hobart.

Downloads

Installation
Standard autoconf process: ./configure && make && make install

Usage
    sysconfcpus [options] <program> [args...]

Valid options are:

    -v, --version   Display the sysconfcpus version
    -h, --help      Display this help
    -d, --debug     Display debug info

    -n, --num <n>   Number of processors (both conf and onln)
    -c, --conf <n>  Number of processors (conf(igured))
    -o, --onln <n>  Number of processors (online)

Examples
$ test-sysconfcpus
sysconf(_SC_NPROCESSORS_CONF) = 2
sysconf(_SC_NPROCESSORS_ONLN) = 2
$ sysconfcpus -n 8 test-sysconfcpus
sysconf(_SC_NPROCESSORS_CONF) = 8
sysconf(_SC_NPROCESSORS_ONLN) = 8
$ sysconfcpus -c 8 -o 6 test-sysconfcpus
sysconf(_SC_NPROCESSORS_CONF) = 8
sysconf(_SC_NPROCESSORS_ONLN) = 6
$



Last updated: Friday, 20 February, 2009.
Copyright © 1994-2012, Kevin Pulo, kev at pulo dot com dot au
Public key fingerprint: 94A4 D2B6 85E6 A46A 5330 74F3 199C 4F85 563D C85F