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*60350Storek static char sccsid[] = "@(#)getloadavg.c 6.7 (Berkeley) 05/25/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 2738184Smckusick getloadavg(loadavg, nelem) 2838184Smckusick double loadavg[]; 2938184Smckusick int nelem; 3038184Smckusick { 3152663Smckusick struct loadavg loadinfo; 32*60350Storek int i, mib[2]; 33*60350Storek 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