void showvmm(void) { int i, n; if (!vmm_fetched) return; for (i = 0; i < vmm_ncpus; ++i) { struct kinfo_cputime d; uint64_t cp_total = 0; n = X_START + CPU_LABEL_W; #define D(idx, field) \ (vmm_cur[idx].field - vmm_prev[idx].field) / (u_int)naptime DRAW_ROW(n, CPU_START + i, 6, "%*u", D(i, v_timer)); DRAW_ROW(n, CPU_START + i, 8, "%*u", D(i, v_ipi)); DRAW_ROW(n, CPU_START + i, 8, "%*u", D(i, v_intr)); #undef D #define CPUD(dif, idx, field) \ do { \ dif.cp_##field = vmm_cptime_cur[idx].cp_##field - \ vmm_cptime_prev[idx].cp_##field; \ cp_total += dif.cp_##field; \ } while (0) #define CPUV(dif, field) \ (dif.cp_##field * 100.0) / cp_total CPUD(d, i, user); CPUD(d, i, idle); CPUD(d, i, intr); CPUD(d, i, nice); CPUD(d, i, sys); if (cp_total == 0) cp_total = 1; DRAW_ROW(n, CPU_START + i, 7, "%*.1f", CPUV(d, user)); DRAW_ROW(n, CPU_START + i, 7, "%*.1f", CPUV(d, nice)); DRAW_ROW(n, CPU_START + i, 7, "%*.1f", CPUV(d, sys)); DRAW_ROW(n, CPU_START + i, 7, "%*.1f", CPUV(d, intr)); DRAW_ROW(n, CPU_START + i, 7, "%*.1f", CPUV(d, idle)); #undef CPUV #undef CPUD #define CPUC(idx, field) vmm_cptime_cur[idx].cp_##field #if 0 n = X_START + CPU_LABEL_W; DRAW_ROW(n, CPU_STARTX + i, 15, "%-*s", CPUC(i, msg)); DRAW_ROW(n, CPU_STARTX + i, 35, "%-*s", address_to_symbol((void *)(intptr_t)CPUC(i, stallpc), &symctx)); #endif #undef CPUC } }
void showvmm(void) { int i, n; if (!vmm_fetched) return; for (i = 0; i < vmm_ncpus; ++i) { struct kinfo_cputime d; uint64_t cp_total = 0; n = X_START + CPU_LABEL_W; #define D(idx, field) \ (vmm_cur[idx].field - vmm_prev[idx].field) / (u_int)naptime DRAW_ROW(n, CPU_START + i, 6, "%*u", D(i, v_timer)); DRAW_ROW(n, CPU_START + i, 8, "%*u", D(i, v_ipi)); DRAW_ROW(n, CPU_START + i, 8, "%*u", D(i, v_intr)); #define CPUD(dif, idx, field) \ do { \ dif.cp_##field = vmm_cptime_cur[idx].cp_##field - \ vmm_cptime_prev[idx].cp_##field; \ cp_total += dif.cp_##field; \ } while (0) #define CPUV(dif, field) \ (dif.cp_##field * 100.0) / cp_total CPUD(d, i, user); CPUD(d, i, idle); CPUD(d, i, intr); CPUD(d, i, nice); CPUD(d, i, sys); if (cp_total == 0) cp_total = 1; DRAW_ROW(n, CPU_START + i, 6, "%*.1f", CPUV(d, user)); DRAW_ROW(n, CPU_START + i, 6, "%*.1f", CPUV(d, nice)); DRAW_ROW(n, CPU_START + i, 6, "%*.1f", CPUV(d, sys)); DRAW_ROW(n, CPU_START + i, 6, "%*.1f", CPUV(d, intr)); DRAW_ROW(n, CPU_START + i, 6, "%*.1f", CPUV(d, idle)); /* * Display token collision count and the last-colliding * token name. */ if (D(i, v_token_colls) > 9999999) DRAW_ROW(n, CPU_START + i, 8, "%*u", 9999999); else DRAW_ROW(n, CPU_START + i, 8, "%*u", D(i, v_token_colls)); if (D(i, v_token_colls) == 0) { DRAW_ROW2(n, CPU_START + i, 8, "%*.*s", ""); } else { DRAW_ROW2(n, CPU_START + i, 8, "%*.*s", vmm_cur[i].v_token_name); } #undef D #undef CPUV #undef CPUD #define CPUC(idx, field) vmm_cptime_cur[idx].cp_##field #if 0 n = X_START + CPU_LABEL_W; DRAW_ROW(n, CPU_STARTX + i, 15, "%-*s", CPUC(i, msg)); DRAW_ROW(n, CPU_STARTX + i, 35, "%-*s", address_to_symbol((void *)(intptr_t)CPUC(i, stallpc), &symctx)); #endif #undef CPUC } }