* Copyright (c) 1993 The Regents of the University of California.
* %sccs.include.redist.c%
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)kvm_getloadavg.c 5.1 (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
#include <sys/resource.h>
static struct nlist nl
[] = {
* kvm_getloadavg() -- Get system load averages, from live or dead kernels.
* Put `nelem' samples into `loadavg' array.
* Return number of samples retrieved, or -1 on error.
kvm_getloadavg(kd
, loadavg
, nelem
)
return (getloadavg(loadavg
, nelem
));
if (kvm_nlist(kd
, nl
) != 0) {
for (p
= nl
; p
->n_type
!= 0; ++p
);
_kvm_err(kd
, kd
->program
,
"%s: no such symbol", p
->n_name
);
#define KREAD(kd, addr, obj) \
(kvm_read(kd, addr, (char *)(obj), sizeof(*obj)) != sizeof(*obj))
if (KREAD(kd
, nl
[X_AVERUNNABLE
].n_value
, &loadinfo
)) {
_kvm_err(kd
, kd
->program
, "can't read averunnable");
* Old kernels have fscale separately; if not found assume
if (!KREAD(kd
, nl
[X_FSCALE
].n_value
, &fscale
))
loadinfo
.fscale
= fscale
;
nelem
= MIN(nelem
, sizeof(loadinfo
.ldavg
) / sizeof(fixpt_t
));
for (i
= 0; i
< nelem
; i
++)
loadavg
[i
] = (double) loadinfo
.ldavg
[i
] / loadinfo
.fscale
;