Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  TIMING (3)


benchmp, benchmp_getstate, benchmp_interval, start, stop, get_n, set_n, gettime, settime, get_enough, t_overhead, l_overhead - the lmbench timing subsystem




typedef u_long  iter_t;

typedef (*bench_f)(iter_t iterations, void* cookie);

typedef (*support_f)(iter_t iterations, void* cookie);

void    benchmp(support_f initialize, bench_f benchmark, support_f cleanup, int enough, int parallel, int warmup, int repetitions, void* cookie);

void* benchmp_getstate();

iter_t benchmp_interval(void* state);

void    start(struct timeval *begin);

uint64  stop(struct timeval *begin, struct timeval *end);

uint64  get_n();

void    set_n(uint64 n);

uint64  gettime();

void    settime(uint64 u);

uint64  get_enough(uint64 enough);

uint64  t_overhead();

double  l_overhead();


The single most important element of a good benchmarking system is the quality and reliability of its measurement system. lmbench’s timing subsystem manages the experimental timing process to produce accurate results in the least possible time. lmbench includes methods for measuring and eliminating several factors that influence the accuracy of timing measurements, such as the resolution of the system clock.

lmbench gets accurate results by considering clock resolution, auto-sizing the duration of each benchmark, and conducting multiple experiments.
void benchmp(initialize, benchmark, cleanup, enough, parallel, warmup, repetitions, cookie)
  measures the performance of benchmark repeatedly and reports the median result. benchmp creates parallel sub-processes which run benchmark in parallel. This allows lmbench to measure the system’s ability to scale as the number of client processes increases. Each sub-process executes initialize before starting the benchmarking cycle. It will call benchmark several times in order to collect repetitions results. After all the benchmark results have been collected, cleanup is called to cleanup any resources which may have been allocated by initialize or benchmark . cookie is a void pointer to a hunk of memory that can be used to store any parameters or state that is needed by the benchmark.
void benchmp_getstate()
  returns a void pointer to the lmbench-internal state used during benchmarking. The state is not to be used or accessed directly by clients, but rather would be passed into benchmp_interval.
iter_t benchmp_interval(void* state)
  returns the number of times the benchmark should execute its benchmark loop during this timing interval. This is used only for weird benchmarks which cannot implement the benchmark body in a function which can return, such as the page fault handler. Please see lat_sig.c for sample usage.
void start(struct timeval *begin)
  starts a timing interval. If begin is non-null, save the start time in begin .
uint64 stop(struct timeval *begin, struct timeval *end)
  stops a timing interval, returning the number of elapsed micro-seconds.
uint64 get_n()
  returns the number of times loop_body was executed during the timing interval.
void set_n(uint64 n)
  sets the number of times loop_body was executed during the timing interval.
uint64 gettime()
  returns the number of micro-seconds in the timing interval.
void settime(uint64 u)
  sets the number of micro-seconds in the timing interval.
uint64 get_enough(uint64 enough)
  return the time in micro-seconds needed to accurately measure a timing interval.
uint64 t_overhead()
  return the time in micro-seconds needed to measure time.
double l_overhead()
  return the time in micro-seconds needed to do a simple loop.


There are three environment variables that can be used to modify the lmbench timing subsystem: ENOUGH, TIMING_O, and LOOP_O. The environment variables can be used to directly set the results of get_enough , t_overhead , and l_overhead . When running a large number of benchmarks, or repeating the same benchmark many times, this can save time by eliminating the necessity of recalculating these values for each run.


Development of lmbench is continuing.


lmbench(8), lmbench(3), reporting(3), results(3).


Carl Staelin and Larry McVoy

Comments, suggestions, and bug reports are always welcome.

Search for    or go to Top of page |  Section 3 |  Main Index

(c)1998 Larry McVoy LMBENCH TIMING (3) $Date:$

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.