#include #include #include void print_chain(kstat_ctl_t *kc) { kstat_t *ksp; for (ksp = kc->kc_chain; ksp != NULL; ksp = ksp->ks_next) { printf("Module: %s Class: %s Name: %s\n", ksp->ks_module, ksp->ks_class, ksp->ks_name); } } ulong numberOfCPUs(kstat_ctl_t *kc) { ulong result=1; kstat_named_t *n_cpus; kstat_t *ksp_count; ksp_count = kstat_lookup(kc, "unix", 0, "system_misc"); if (ksp_count != NULL) { kstat_read(kc, ksp_count, NULL); n_cpus = kstat_data_lookup(ksp_count, "ncpus"); if (n_cpus != NULL) { result=n_cpus->value.ul; } } return(result); } int main(int argc, char*argv[]) { kstat_ctl_t *kc; kstat_t *ksp; int first=1; cpu_stat_t cpu_stat; ulong ncpus=1; ulong (*cpu_state)[CPU_STATES]; ulong (*cpu_state_prev)[CPU_STATES]; ulong i,j; kc = kstat_open(); print_chain(kc); ncpus=numberOfCPUs(kc); cpu_state = (ulong (*)[CPU_STATES]) calloc(ncpus, sizeof(*cpu_state)); cpu_state_prev = (ulong (*)[CPU_STATES]) calloc(ncpus, sizeof(*cpu_state_prev)); printf("Number of CPUs: %lu\n", ncpus); while(1) { for(i=0;i