- remove dubious optimization in machine_get_load()
- updated bounds checks in machine_get_smpload()
This commit is contained in:
@@ -28,7 +28,6 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "shared/LL.h"
|
#include "shared/LL.h"
|
||||||
|
|
||||||
#define MAX_CPUS 8
|
|
||||||
|
|
||||||
static kstat_ctl_t *kc;
|
static kstat_ctl_t *kc;
|
||||||
|
|
||||||
@@ -138,7 +137,6 @@ int machine_get_fs(mounts_type fs[], int *cnt)
|
|||||||
int machine_get_load(load_type *curr_load)
|
int machine_get_load(load_type *curr_load)
|
||||||
{
|
{
|
||||||
static load_type last_load = { 0, 0, 0, 0, 0 };
|
static load_type last_load = { 0, 0, 0, 0, 0 };
|
||||||
static load_type last_ret_load;
|
|
||||||
load_type load;
|
load_type load;
|
||||||
kstat_t *k_space;
|
kstat_t *k_space;
|
||||||
struct cpu_stat cinfo;
|
struct cpu_stat cinfo;
|
||||||
@@ -173,20 +171,14 @@ int machine_get_load(load_type *curr_load)
|
|||||||
load.nice = cinfo.cpu_sysinfo.cpu[CPU_WAIT];
|
load.nice = cinfo.cpu_sysinfo.cpu[CPU_WAIT];
|
||||||
load.total = load.user + load.nice + load.system + load.idle;
|
load.total = load.user + load.nice + load.system + load.idle;
|
||||||
|
|
||||||
if (load.total != last_load.total)
|
curr_load->user = load.user - last_load.user;
|
||||||
{
|
curr_load->nice = load.nice - last_load.nice;
|
||||||
curr_load->user = load.user - last_load.user;
|
curr_load->system = load.system - last_load.system;
|
||||||
curr_load->nice = load.nice - last_load.nice;
|
curr_load->idle = load.idle - last_load.idle;
|
||||||
curr_load->system = load.system - last_load.system;
|
curr_load->total = load.total - last_load.total;
|
||||||
curr_load->idle = load.idle - last_load.idle;
|
|
||||||
curr_load->total = load.total - last_load.total;
|
// struct assingment is legal in C89
|
||||||
last_ret_load = *curr_load;
|
last_load = load;
|
||||||
last_load = load;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*curr_load = last_ret_load;
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
@@ -370,30 +362,31 @@ int machine_get_smpload(load_type *result, int *numcpus)
|
|||||||
{
|
{
|
||||||
static load_type last_load[MAX_CPUS];
|
static load_type last_load[MAX_CPUS];
|
||||||
load_type curr_load[MAX_CPUS];
|
load_type curr_load[MAX_CPUS];
|
||||||
|
int ncpu = 0;
|
||||||
|
int max_cpu, count;
|
||||||
|
|
||||||
kstat_t *k_space;
|
max_cpu = sysconf(_SC_NPROCESSORS_CONF);
|
||||||
int ncpu = 0, count;
|
for (count = 0; count < max_cpu; count++) {
|
||||||
char buffer[16];
|
kstat_t *k_space;
|
||||||
|
char buffer[16];
|
||||||
|
|
||||||
*numcpus = sysconf(_SC_NPROCESSORS_CONF);
|
|
||||||
for (count = 0; count < MAX_CPUS; count++)
|
|
||||||
{
|
|
||||||
sprintf(buffer, "cpu_stat%d", count);
|
sprintf(buffer, "cpu_stat%d", count);
|
||||||
|
|
||||||
k_space = kstat_lookup(kc, "cpu_stat", count, buffer);
|
k_space = kstat_lookup(kc, "cpu_stat", count, buffer);
|
||||||
|
|
||||||
if ((k_space != NULL) && (kstat_read(kc, k_space, NULL) != -1))
|
if ((k_space != NULL) && (kstat_read(kc, k_space, NULL) != -1))
|
||||||
{
|
{
|
||||||
struct cpu_stat cinfo;
|
struct cpu_stat cinfo;
|
||||||
|
|
||||||
k_space = kstat_lookup(kc, "cpu_stat", -1, buffer);
|
k_space = kstat_lookup(kc, "cpu_stat", -1, buffer);
|
||||||
kstat_read(kc,k_space,&cinfo);
|
kstat_read(kc, k_space, &cinfo);
|
||||||
|
|
||||||
curr_load[ncpu].idle = cinfo.cpu_sysinfo.cpu[CPU_IDLE];
|
curr_load[ncpu].idle = cinfo.cpu_sysinfo.cpu[CPU_IDLE];
|
||||||
curr_load[ncpu].user = cinfo.cpu_sysinfo.cpu[CPU_USER];
|
curr_load[ncpu].user = cinfo.cpu_sysinfo.cpu[CPU_USER];
|
||||||
curr_load[ncpu].system = cinfo.cpu_sysinfo.cpu[CPU_KERNEL];
|
curr_load[ncpu].system = cinfo.cpu_sysinfo.cpu[CPU_KERNEL];
|
||||||
curr_load[ncpu].nice = cinfo.cpu_sysinfo.cpu[CPU_WAIT];
|
curr_load[ncpu].nice = cinfo.cpu_sysinfo.cpu[CPU_WAIT];
|
||||||
//Hu? Why? curr_load[ncpu].nice = 0;
|
curr_load[ncpu].total = curr_load[ncpu].user + curr_load[ncpu].nice +
|
||||||
curr_load[ncpu].total = curr_load[ncpu].user + curr_load[ncpu].nice + curr_load[ncpu].system + curr_load[ncpu].idle;
|
curr_load[ncpu].system + curr_load[ncpu].idle;
|
||||||
|
|
||||||
result[ncpu].total = curr_load[ncpu].total - last_load[ncpu].total;
|
result[ncpu].total = curr_load[ncpu].total - last_load[ncpu].total;
|
||||||
result[ncpu].user = curr_load[ncpu].user - last_load[ncpu].user;
|
result[ncpu].user = curr_load[ncpu].user - last_load[ncpu].user;
|
||||||
@@ -401,15 +394,16 @@ int machine_get_smpload(load_type *result, int *numcpus)
|
|||||||
result[ncpu].system = curr_load[ncpu].system - last_load[ncpu].system;
|
result[ncpu].system = curr_load[ncpu].system - last_load[ncpu].system;
|
||||||
result[ncpu].idle = curr_load[ncpu].idle - last_load[ncpu].idle;
|
result[ncpu].idle = curr_load[ncpu].idle - last_load[ncpu].idle;
|
||||||
|
|
||||||
last_load[ncpu].total = curr_load[ncpu].total;
|
// struct assignment is legal in C89
|
||||||
last_load[ncpu].user = curr_load[ncpu].user;
|
last_load[ncpu] = curr_load[ncpu];
|
||||||
last_load[ncpu].nice = curr_load[ncpu].nice;
|
|
||||||
last_load[ncpu].system = curr_load[ncpu].system;
|
|
||||||
last_load[ncpu].idle = curr_load[ncpu].idle;
|
|
||||||
|
|
||||||
|
// restrict # CPUs to min(*numcpus, MAX_CPUS)
|
||||||
ncpu++;
|
ncpu++;
|
||||||
|
if ((ncpu >= *numcpus) || (ncpu >= MAX_CPUS))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*numcpus = ncpu;
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user