dynamic HZ
This commit is contained in:
parent
eae27c899a
commit
991000dd70
@ -9,16 +9,25 @@
|
|||||||
int getloadavg(double *loadavg, int nelem)
|
int getloadavg(double *loadavg, int nelem)
|
||||||
{
|
{
|
||||||
struct loadinfo loadinfo;
|
struct loadinfo loadinfo;
|
||||||
|
static u32_t system_hz = 0;
|
||||||
int h, p, unfilled_ticks;
|
int h, p, unfilled_ticks;
|
||||||
#define PERIODS 3
|
#define PERIODS 3
|
||||||
int minutes[3] = { 1, 5, 15 };
|
int minutes[3] = { 1, 5, 15 };
|
||||||
size_t loadsize;
|
size_t loadsize;
|
||||||
ssize_t l;
|
ssize_t l;
|
||||||
|
|
||||||
if(nelem < 1) {
|
if(nelem < 1) {
|
||||||
errno = ENOSPC;
|
errno = ENOSPC;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(system_hz == 0) {
|
||||||
|
if((getsysinfo_up(PM_PROC_NR, SIU_SYSTEMHZ,
|
||||||
|
sizeof(system_hz), &system_hz)) < 0) {
|
||||||
|
system_hz = DEFAULT_HZ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loadsize = sizeof(loadinfo);
|
loadsize = sizeof(loadinfo);
|
||||||
if((l=getsysinfo_up(PM_PROC_NR, SIU_LOADINFO, loadsize, &loadinfo)) < 0)
|
if((l=getsysinfo_up(PM_PROC_NR, SIU_LOADINFO, loadsize, &loadinfo)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
@ -28,7 +37,7 @@ int getloadavg(double *loadavg, int nelem)
|
|||||||
nelem = PERIODS;
|
nelem = PERIODS;
|
||||||
|
|
||||||
/* How many ticks are missing from the newest-filled slot? */
|
/* How many ticks are missing from the newest-filled slot? */
|
||||||
#define TICKSPERSLOT (_LOAD_UNIT_SECS * sys_hz())
|
#define TICKSPERSLOT (_LOAD_UNIT_SECS * system_hz)
|
||||||
unfilled_ticks = TICKSPERSLOT - (loadinfo.last_clock % TICKSPERSLOT);
|
unfilled_ticks = TICKSPERSLOT - (loadinfo.last_clock % TICKSPERSLOT);
|
||||||
|
|
||||||
for(p = 0; p < nelem; p++) {
|
for(p = 0; p < nelem; p++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user