144571Smarc /*- 238184Smckusick * Copyright (c) 1989 The Regents of the University of California. 338184Smckusick * All rights reserved. 438184Smckusick * 544571Smarc * %sccs.include.redist.c% 638184Smckusick */ 738184Smckusick 838184Smckusick #if defined(LIBC_SCCS) && !defined(lint) 9*59390Sbostic static char sccsid[] = "@(#)getloadavg.c 6.6 (Berkeley) 04/27/93"; 1044571Smarc #endif /* LIBC_SCCS and not lint */ 1138184Smckusick 12*59390Sbostic #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 2738184Smckusick getloadavg(loadavg, nelem) 2838184Smckusick double loadavg[]; 2938184Smckusick int nelem; 3038184Smckusick { 3152663Smckusick struct loadavg loadinfo; 3259369Sbostic int size, i, mib[2]; 3338184Smckusick 3458899Smckusick mib[0] = CTL_VM; 3558899Smckusick mib[1] = VM_LOADAVG; 3659369Sbostic size = sizeof(loadinfo); 3759369Sbostic if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0) 3859369Sbostic return (-1); 3959369Sbostic 4052663Smckusick nelem = MIN(nelem, sizeof(loadinfo.ldavg) / sizeof(fixpt_t)); 4138184Smckusick for (i = 0; i < nelem; i++) 4252663Smckusick loadavg[i] = (double) loadinfo.ldavg[i] / loadinfo.fscale; 4338184Smckusick return (nelem); 4438184Smckusick } 45