static void cpuidle_profile_show_result(void) { struct cpuidle_profile_info *info; unsigned int cpu, cluster; pr_info("==========================================================================\n"); pr_info("| Total profiling Time = %10lldus |\n", ktime_to_us(ktime_sub(profile_finish_time, profile_start_time))); pr_info("--------------------------------------------------------------------------\n"); pr_info("| | C1 entry | C1 residency | C2 entry(early) | C2 residency |\n"); pr_info("--------------------------------------------------------------------------\n"); for_each_possible_cpu(cpu) { info = &per_cpu(profile_info, cpu); pr_info("| cpu%u | %8u | %10llu(%3u%%) | %9u(%4u) | %10llu(%3u%%) |\n", cpu, info->entry_count[CPUIDLE_PROFILE_C1], info->residency[CPUIDLE_PROFILE_C1], calculate_percent(info, CPUIDLE_PROFILE_C1), info->entry_count[CPUIDLE_PROFILE_C2], info->early_wakeup_count[CPUIDLE_PROFILE_C2], info->residency[CPUIDLE_PROFILE_C2], calculate_percent(info, CPUIDLE_PROFILE_C2)); } pr_info("==========================================================================\n"); pr_info("| | Cluster power down | |\n"); pr_info("--------------------------------------------------------------------------\n"); for (cluster = 0; cluster < NUM_CLUSTER; cluster++) { info = &cpd_info[cluster]; pr_info("| %6s | %12llu(%3u%%) | |\n", cluster ? "LITTLE" : "BIG", info->residency[CPUIDLE_PROFILE_CPD], calculate_percent(info, CPUIDLE_PROFILE_CPD)); } pr_info("==========================================================================\n"); }
void get_stats (struct parameter_list *p, struct fs_usage *fsp) { struct parameter_list *p_list; struct fs_usage tmpfsp; int first = 1; if (p->group == NULL) { get_path_stats(p,fsp); } else { /* find all group members */ for (p_list = path_select_list; p_list; p_list=p_list->name_next) { #ifdef __CYGWIN__ if (strncmp(p_list->name, "/cygdrive/", 10) != 0) continue; #endif if (p_list->group && ! (strcmp(p_list->group, p->group))) { stat_path(p_list); get_fs_usage (p_list->best_match->me_mountdir, p_list->best_match->me_devname, &tmpfsp); get_path_stats(p_list, &tmpfsp); if (verbose >= 3) printf("Group %s: adding %llu blocks sized %llu, (%s) used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", p_list->group, tmpfsp.fsu_bavail, tmpfsp.fsu_blocksize, p_list->best_match->me_mountdir, p_list->dused_units, p_list->dfree_units, p_list->dtotal_units, mult); /* prevent counting the first FS of a group twice since its parameter_list entry * is used to carry the information of all file systems of the entire group */ if (! first) { p->total += p_list->total; p->available += p_list->available; p->available_to_root += p_list->available_to_root; p->used += p_list->used; p->dused_units += p_list->dused_units; p->dfree_units += p_list->dfree_units; p->dtotal_units += p_list->dtotal_units; p->inodes_total += p_list->inodes_total; p->inodes_free += p_list->inodes_free; } first = 0; } if (verbose >= 3) printf("Group %s now has: used_units=%g free_units=%g total_units=%g fsu_blocksize=%llu mult=%llu\n", p->group, tmpfsp.fsu_bavail, tmpfsp.fsu_blocksize, p->best_match->me_mountdir, p->dused_units, p->dfree_units, p->dtotal_units, mult); } /* modify devname and mountdir for output */ p->best_match->me_mountdir = p->best_match->me_devname = p->group; } /* finally calculate percentages for either plain FS or summed up group */ p->dused_pct = calculate_percent( p->used, p->used + p->available ); /* used + available can never be > uintmax */ p->dfree_pct = 100 - p->dused_pct; p->dused_inodes_percent = calculate_percent(p->inodes_total - p->inodes_free, p->inodes_total); p->dfree_inodes_percent = 100 - p->dused_inodes_percent; }
static void show_result(void) { int i, cpu; struct cpuidle_profile_info *info; pr_info("Profiling Time : %lluus\n", profile_time); for (i = 0; i < state_count; i++) { pr_info("[state%d]\n", i); pr_info("#cpu #entry #early #time #ratio\n"); for_each_possible_cpu(cpu) { info = &per_cpu(profile_info, cpu); pr_info("cpu%d %5u %5u %10lluus %3u%%\n", cpu, info->usage[i].entry_count, info->usage[i].early_wakeup_count, info->usage[i].time, calculate_percent(info->usage[i].time)); } pr_info("\n"); } }
int main (int argc, char **argv) { int result = STATE_UNKNOWN; int disk_result = STATE_UNKNOWN; char *output; char *details; char *perf; char *preamble; double inode_space_pct; uintmax_t total, available, available_to_root, used; double dfree_pct = -1, dused_pct = -1; double dused_units, dfree_units, dtotal_units; double dused_inodes_percent, dfree_inodes_percent; double warning_high_tide; double critical_high_tide; int temp_result; struct mount_entry *me; struct fs_usage fsp, tmpfsp; struct parameter_list *temp_list, *path; struct name_list *seen = NULL; preamble = strdup (" - free space:"); output = strdup (""); details = strdup (""); perf = strdup (""); stat_buf = malloc(sizeof *stat_buf); setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); mount_list = read_file_system_list (0); /* Parse extra opts if any */ argv = np_extra_opts (&argc, argv, progname); if (process_arguments (argc, argv) == ERROR) usage4 (_("Could not parse arguments")); /* If a list of paths has not been selected, find entire mount list and create list of paths */ if (path_selected == FALSE) { for (me = mount_list; me; me = me->me_next) { if (! (path = np_find_parameter(path_select_list, me->me_mountdir))) { path = np_add_parameter(&path_select_list, me->me_mountdir); } path->best_match = me; path->group = group; set_all_thresholds(path); } } np_set_best_match(path_select_list, mount_list, exact_match); /* Error if no match found for specified paths */ temp_list = path_select_list; while (temp_list) { if (! temp_list->best_match) { die (STATE_CRITICAL, _("DISK %s: %s not found\n"), _("CRITICAL"), temp_list->name); } temp_list = temp_list->name_next; } /* Process for every path in list */ for (path = path_select_list; path; path=path->name_next) { if (verbose >= 3 && path->freespace_percent->warning != NULL && path->freespace_percent->critical != NULL) printf("Thresholds(pct) for %s warn: %f crit %f\n",path->name, path->freespace_percent->warning->end, path->freespace_percent->critical->end); if (verbose >= 3 && path->group != NULL) printf("Group of %s: %s\n",path->name,path->group); /* reset disk result */ disk_result = STATE_UNKNOWN; me = path->best_match; /* Filters */ /* Remove filesystems already seen */ if (np_seen_name(seen, me->me_mountdir)) { continue; } else { if (path->group != NULL) { /* find all group members */ fsp.fsu_blocksize = 0; fsp.fsu_blocks = 0; fsp.fsu_bfree = 0; fsp.fsu_bavail = 0; fsp.fsu_files = 0; fsp.fsu_ffree = 0; for (temp_list = path_select_list; temp_list; temp_list=temp_list->name_next) { if (temp_list->group && ! (strcmp(temp_list->group, path->group))) { stat_path(path); get_fs_usage (temp_list->best_match->me_mountdir, temp_list->best_match->me_devname, &tmpfsp); /* possibly differing blocksizes if disks are grouped. Calculating average */ fsp.fsu_blocksize = (fsp.fsu_blocksize * fsp.fsu_blocks + tmpfsp.fsu_blocksize * tmpfsp.fsu_blocks) / \ (fsp.fsu_blocks + tmpfsp.fsu_blocks); /* Size of a block. */ fsp.fsu_blocks += tmpfsp.fsu_blocks; /* Total blocks. */ fsp.fsu_bfree += tmpfsp.fsu_bfree; /* Free blocks available to superuser. */ /* Gnulib workaround - see comment about it a few lines below */ fsp.fsu_bavail += (tmpfsp.fsu_bavail > tmpfsp.fsu_bfree ? 0 : tmpfsp.fsu_bavail); /* Free blocks available to non-superuser. */ fsp.fsu_files += tmpfsp.fsu_files; /* Total file nodes. */ fsp.fsu_ffree += tmpfsp.fsu_ffree; /* Free file nodes. */ if (verbose >= 3) printf("Group %s: add %llu blocks (%s) \n", path->group, tmpfsp.fsu_bavail, temp_list->name); /* printf("Group %s: add %u blocks (%s)\n", temp_list->name); *//* path->group, tmpfsp.fsu_bavail, temp_list->name); */ np_add_name(&seen, temp_list->best_match->me_mountdir); } } /* modify devname and mountdir for output */ me->me_mountdir = me->me_devname = path->group; } else np_add_name(&seen, me->me_mountdir); } if (path->group == NULL) { /* Skip remote filesystems if we're not interested in them */ if (me->me_remote && show_local_fs) { if (stat_remote_fs) stat_path(path); continue; /* Skip pseudo fs's if we haven't asked for all fs's */ } else if (me->me_dummy && !show_all_fs) { continue; /* Skip excluded fstypes */ } else if (fs_exclude_list && np_find_name (fs_exclude_list, me->me_type)) { continue; /* Skip excluded fs's */ } else if (dp_exclude_list && (np_find_name (dp_exclude_list, me->me_devname) || np_find_name (dp_exclude_list, me->me_mountdir))) { continue; } stat_path(path); get_fs_usage (me->me_mountdir, me->me_devname, &fsp); } if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) { total = fsp.fsu_blocks; /* 2007-12-08 - Workaround for Gnulib reporting insanely high available * space on BSD (the actual value should be negative but fsp.fsu_bavail * is unsigned) */ available = fsp.fsu_bavail > fsp.fsu_bfree ? 0 : fsp.fsu_bavail; available_to_root = fsp.fsu_bfree; used = total - available_to_root; if (verbose >= 3) printf ("For %s, total=%llu, available=%llu, available_to_root=%llu, used=%llu, fsp.fsu_files=%llu, fsp.fsu_ffree=%llu\n", me->me_mountdir, total, available, available_to_root, used, fsp.fsu_files, fsp.fsu_ffree); dused_pct = calculate_percent( used, used + available ); /* used + available can never be > uintmax */ dfree_pct = 100 - dused_pct; dused_units = used*fsp.fsu_blocksize/mult; dfree_units = available*fsp.fsu_blocksize/mult; dtotal_units = total*fsp.fsu_blocksize/mult; dused_inodes_percent = calculate_percent(fsp.fsu_files - fsp.fsu_ffree, fsp.fsu_files); dfree_inodes_percent = 100 - dused_inodes_percent; if (verbose >= 3) { printf ("For %s, used_pct=%g free_pct=%g used_units=%g free_units=%g total_units=%g used_inodes_pct=%g free_inodes_pct=%g fsp.fsu_blocksize=%llu mult=%llu\n", me->me_mountdir, dused_pct, dfree_pct, dused_units, dfree_units, dtotal_units, dused_inodes_percent, dfree_inodes_percent, fsp.fsu_blocksize, mult); } /* Threshold comparisons */ temp_result = get_status(dfree_units, path->freespace_units); if (verbose >=3) printf("Freespace_units result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); temp_result = get_status(dfree_pct, path->freespace_percent); if (verbose >=3) printf("Freespace%% result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); temp_result = get_status(dused_units, path->usedspace_units); if (verbose >=3) printf("Usedspace_units result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); temp_result = get_status(dused_pct, path->usedspace_percent); if (verbose >=3) printf("Usedspace_percent result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); temp_result = get_status(dused_inodes_percent, path->usedinodes_percent); if (verbose >=3) printf("Usedinodes_percent result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); temp_result = get_status(dfree_inodes_percent, path->freeinodes_percent); if (verbose >=3) printf("Freeinodes_percent result=%d\n", temp_result); disk_result = max_state( disk_result, temp_result ); result = max_state(result, disk_result); /* What a mess of units. The output shows free space, the perf data shows used space. Yikes! Hack here. Trying to get warn/crit levels from freespace_(units|percent) for perf data. Assumption that start=0. Roll on new syntax... */ /* *_high_tide must be reinitialized at each run */ warning_high_tide = UINT_MAX; critical_high_tide = UINT_MAX; if (path->freespace_units->warning != NULL) { warning_high_tide = dtotal_units - path->freespace_units->warning->end; } if (path->freespace_percent->warning != NULL) { warning_high_tide = abs( min( (double) warning_high_tide, (double) (1.0 - path->freespace_percent->warning->end/100)*dtotal_units )); } if (path->freespace_units->critical != NULL) { critical_high_tide = dtotal_units - path->freespace_units->critical->end; } if (path->freespace_percent->critical != NULL) { critical_high_tide = abs( min( (double) critical_high_tide, (double) (1.0 - path->freespace_percent->critical->end/100)*dtotal_units )); } /* Nb: *_high_tide are unset when == UINT_MAX */ asprintf (&perf, "%s %s", perf, perfdata ((!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, dused_units, units, (warning_high_tide != UINT_MAX ? TRUE : FALSE), warning_high_tide, (critical_high_tide != UINT_MAX ? TRUE : FALSE), critical_high_tide, TRUE, 0, TRUE, dtotal_units)); if (disk_result==STATE_OK && erronly && !verbose) continue; asprintf (&output, "%s %s %.0f %s (%.0f%%", output, (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, dfree_units, units, dfree_pct); if (dused_inodes_percent < 0) { asprintf(&output, "%s inode=-);", output); } else { asprintf(&output, "%s inode=%.0f%%);", output, dfree_inodes_percent ); } /* TODO: Need to do a similar debug line asprintf (&details, _("%s\n\ %.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), details, dfree_units, dtotal_units, units, dfree_pct, inode_space_pct, me->me_devname, me->me_type, me->me_mountdir, (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp); */ } } if (verbose >= 2) asprintf (&output, "%s%s", output, details); printf ("DISK %s%s%s|%s\n", state_text (result), (erronly && result==STATE_OK) ? "" : preamble, output, perf); return result; }
static void show_result(void) { int i, cpu; struct cpuidle_profile_info *info; pr_info("#######################################################################\n"); pr_info("Profiling Time : %lluus\n", profile_time); for (i = 0; i < state_count; i++) { pr_info("[state%d]\n", i); pr_info("#cpu #entry #early #time #ratio\n"); for_each_possible_cpu(cpu) { info = &per_cpu(profile_info, cpu); pr_info("cpu%d %5u %5u %10lluus %3u%%\n", cpu, info->usage[i].entry_count, info->usage[i].early_wakeup_count, info->usage[i].time, calculate_percent(info->usage[i].time)); } pr_info("\n"); } pr_info("[CPD] - Cluster Power Down\n"); pr_info("#cluster #entry #early #time #ratio\n"); for (i = 0; i < NUM_CLUSTER; i++) { pr_info("cluster%d %5u %5u %10lluus %3u%%\n", i, cpd_info[i].usage->entry_count, cpd_info[i].usage->early_wakeup_count, cpd_info[i].usage->time, calculate_percent(cpd_info[i].usage->time)); } pr_info("\n"); pr_info("[LPC] - Low Power mode with Clock down\n"); pr_info(" #entry #early #time #ratio\n"); pr_info("system %5u %5u %10lluus %3u%%\n", lpc_info.usage->entry_count, lpc_info.usage->early_wakeup_count, lpc_info.usage->time, calculate_percent(lpc_info.usage->time)); pr_info("\n"); pr_info("[LPM] - Low Power Mode\n"); pr_info("#mode #entry #early #time #ratio\n"); for (i = 0; i < NUM_SYS_POWERDOWN; i++) { pr_info("%-9s %5u %5u %10lluus %3u%%\n", get_sys_powerdown_str(i), lpm_info.usage[i].entry_count, lpm_info.usage[i].early_wakeup_count, lpm_info.usage[i].time, calculate_percent(lpm_info.usage[i].time)); } pr_info("\n"); pr_info("[LPA blockers]\n"); for (i = 0; i < MAX_NUM_BLOCKER; i++) pr_info("%-9s: %d\n", get_lpa_blocker_str(i), lpa_blocker[i]); pr_info("\n"); pr_info("#######################################################################\n"); }