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