sg_get_cpu_stats, sg_get_cpu_stats_r, sg_get_cpu_stats_diff, sg_get_cpu_stats_diff_between, sg_get_cpu_percents, sg_get_cpu_percents_of, sg_get_cpu_percents_r, sg_free_cpu_stats — get cpu usage
#include <statgrab.h>
sg_cpu_percents *sg_get_cpu_percents( | entries) ; |
size_t *entries
;sg_cpu_percents *sg_get_cpu_percents_of( | cps, | |
entries) ; |
sg_cpu_percent_source cps
;size_t *entries
;sg_cpu_percents *sg_get_cpu_percents_r( | whereof, | |
entries) ; |
const sg_cpu_stats *whereof
;size_t *entries
;void sg_free_cpu_percents( | data) ; |
sg_cpu_percents *data
;sg_cpu_stats *sg_get_cpu_stats( | entries) ; |
size_t *entries
;sg_cpu_stats *sg_get_cpu_stats_diff( | entries) ; |
size_t *entries
;sg_cpu_stats *sg_get_cpu_stats_r( | entries) ; |
size_t *entries
;sg_cpu_stats *sg_get_cpu_stats_diff_between( | cpu_nowcpu_last, | |
entries) ; |
const sg_cpu_stats *cpu_now, const sg_cpu_stats *cpu_last
;size_t *entries
;sg_error sg_free_cpu_stats( | data) ; |
sg_cpu_stats *data
;
These are the categories of data delivered by the cpu stats module:
sg_get_cpu_stats
() and
sg_get_cpu_stats_r
() deliver native cpu
counters since the machine has been started,
sg_get_cpu_stats_diff
() and
sg_get_cpu_stats_diff_between
() deliver native
cpu counters between two sg_get_cpu_stats
()
calls and sg_get_cpu_percents_of
() and
sg_get_cpu_percents_r
() deliver correlated relative
cpu counters (where total is 100%).
Table 1. API Shortcut
function | returns | data owner |
---|---|---|
sg_get_cpu_stats | sg_cpu_stats * | libstatgrab (thread local) |
sg_get_cpu_stats_r | sg_cpu_stats * | caller |
sg_get_cpu_stats_diff | sg_cpu_stats * | libstatgrab (thread local) |
sg_get_cpu_stats_diff_between | sg_cpu_stats * | caller |
sg_get_cpu_percents_of | sg_cpu_percents * | libstatgrab (thread local) |
sg_get_cpu_percents_r | sg_cpu_percents * | caller |
The sg_cpu_stats buffer received from
sg_get_cpu_stats_r
() and the
sg_get_cpu_stats_diff_between
() as well as the
sg_cpu_percents buffer received from
sg_get_cpu_percents_r
() must be freed using
sg_free_cpu_stats
() or the
sg_free_cpu_percents
(), respectively, when not
needed any more. The caller is responsible for doing it.
The value stored (the "ticks") will vary between operating systems. For example Solaris has a total of 100 per second, while Linux has substantially more. Also, different operating systems store different information - you won't find nice cpu on Solaris for example.
Modern systems shall provide information about the clock tick
resolution by invoking sysconf(_SC_CLK_TCK)
.
There are two structures returned by the CPU statistics functions.
typedef struct { unsigned long long user; unsigned long long kernel; unsigned long long idle; unsigned long long iowait; unsigned long long swap; unsigned long long nice; unsigned long long total; unsigned long long context_switches; unsigned long long voluntary_context_switches; unsigned long long involuntary_context_switches; unsigned long long syscalls; unsigned long long interrupts; unsigned long long soft_interrupts; time_t systime; } sg_cpu_stats;
typedef struct { double user; double kernel; double idle; double iowait; double swap; double nice; time_t time_taken; } sg_cpu_percents;
user
kernel
idle
iowait
swap
nice
total
The different CPU states.
context_switches
voluntary_context_switches
involuntary_context_switches
syscalls
interrupts
soft_interrupts
The different program actions on CPU.
systime
time_taken
The time taken in seconds since the last call of the function, or the system time.