144571Smarc /*-
2*61111Sbostic * Copyright (c) 1989, 1993
3*61111Sbostic * The Regents of the University of California. All rights reserved.
438184Smckusick *
544571Smarc * %sccs.include.redist.c%
638184Smckusick */
738184Smckusick
838184Smckusick #if defined(LIBC_SCCS) && !defined(lint)
9*61111Sbostic static char sccsid[] = "@(#)getloadavg.c 8.1 (Berkeley) 06/04/93";
1044571Smarc #endif /* LIBC_SCCS and not lint */
1138184Smckusick
1259390Sbostic #include <sys/param.h>
1359369Sbostic #include <sys/time.h>
1459369Sbostic #include <sys/resource.h>
1558899Smckusick #include <sys/sysctl.h>
1658899Smckusick #include <vm/vm_param.h>
1738184Smckusick
1859369Sbostic #include <stdlib.h>
1938184Smckusick
2038184Smckusick /*
2159369Sbostic * getloadavg() -- Get system load averages.
2238184Smckusick *
2359369Sbostic * Put `nelem' samples into `loadavg' array.
2459369Sbostic * Return number of samples retrieved, or -1 on error.
2538184Smckusick */
2659369Sbostic int
getloadavg(loadavg,nelem)2738184Smckusick getloadavg(loadavg, nelem)
2838184Smckusick double loadavg[];
2938184Smckusick int nelem;
3038184Smckusick {
3152663Smckusick struct loadavg loadinfo;
3260350Storek int i, mib[2];
3360350Storek size_t size;
3438184Smckusick
3558899Smckusick mib[0] = CTL_VM;
3658899Smckusick mib[1] = VM_LOADAVG;
3759369Sbostic size = sizeof(loadinfo);
3859369Sbostic if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0)
3959369Sbostic return (-1);
4059369Sbostic
4152663Smckusick nelem = MIN(nelem, sizeof(loadinfo.ldavg) / sizeof(fixpt_t));
4238184Smckusick for (i = 0; i < nelem; i++)
4352663Smckusick loadavg[i] = (double) loadinfo.ldavg[i] / loadinfo.fscale;
4438184Smckusick return (nelem);
4538184Smckusick }
46