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*59369Sbostic static char sccsid[] = "@(#)getloadavg.c 6.5 (Berkeley) 04/27/93"; 1044571Smarc #endif /* LIBC_SCCS and not lint */ 1138184Smckusick 1238184Smckusick #include <sys/types.h> 13*59369Sbostic #include <sys/time.h> 14*59369Sbostic #include <sys/resource.h> 1558899Smckusick #include <sys/sysctl.h> 1658899Smckusick #include <vm/vm_param.h> 1738184Smckusick 18*59369Sbostic #include <stdlib.h> 1938184Smckusick 2038184Smckusick /* 21*59369Sbostic * getloadavg() -- Get system load averages. 2238184Smckusick * 23*59369Sbostic * Put `nelem' samples into `loadavg' array. 24*59369Sbostic * Return number of samples retrieved, or -1 on error. 2538184Smckusick */ 26*59369Sbostic int 2738184Smckusick getloadavg(loadavg, nelem) 2838184Smckusick double loadavg[]; 2938184Smckusick int nelem; 3038184Smckusick { 3152663Smckusick struct loadavg loadinfo; 32*59369Sbostic int size, i, mib[2]; 3338184Smckusick 3458899Smckusick mib[0] = CTL_VM; 3558899Smckusick mib[1] = VM_LOADAVG; 36*59369Sbostic size = sizeof(loadinfo); 37*59369Sbostic if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0) 38*59369Sbostic return (-1); 39*59369Sbostic 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