static int cmd_host_cpu_info(struct vmm_chardev *cdev) { int rc; u32 c, khz; unsigned long hwid; char name[25]; vmm_cprintf(cdev, "%-25s: %s\n", "CPU Type", CONFIG_CPU); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Present Count", vmm_num_present_cpus()); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Possible Count", vmm_num_possible_cpus()); vmm_cprintf(cdev, "%-25s: %u\n", "CPU Online Count", vmm_num_online_cpus()); vmm_cprintf(cdev, "\n"); for_each_online_cpu(c) { rc = vmm_smp_map_hwid(c, &hwid); if (rc) return rc; vmm_sprintf(name, "CPU%d Hardware ID", c); vmm_cprintf(cdev, "%-25s: 0x%lx\n", name, hwid); vmm_sprintf(name, "CPU%d Estimated Speed", c); khz = vmm_delay_estimate_cpu_khz(c); vmm_cprintf(cdev, "%-25s: %d.%03d MHz\n", name, udiv32(khz, 1000), umod32(khz, 1000)); } vmm_cprintf(cdev, "\n"); arch_cpu_print_info(cdev); return VMM_OK; }
static int cmd_host_cpu_stats(struct vmm_chardev *cdev) { int rc; char str[16]; u32 c, p, khz, util; unsigned long hwid; vmm_cprintf(cdev, "----------------------------------------" "----------------------------------------\n"); vmm_cprintf(cdev, " %4s %14s %15s %13s %12s %16s\n", "CPU#", "HWID", "Speed (MHz)", "Util. (%)", "IRQs (%)", "Active VCPUs"); vmm_cprintf(cdev, "----------------------------------------" "----------------------------------------\n"); for_each_online_cpu(c) { vmm_cprintf(cdev, " %4d", c); rc = vmm_smp_map_hwid(c, &hwid); if (rc) return rc; vmm_snprintf(str, sizeof(str), "0x%lx", hwid); vmm_cprintf(cdev, " %14s", str); khz = vmm_delay_estimate_cpu_khz(c); vmm_cprintf(cdev, " %11d.%03d", udiv32(khz, 1000), umod32(khz, 1000)); util = udiv64(vmm_scheduler_idle_time(c) * 1000, vmm_scheduler_get_sample_period(c)); util = (util > 1000) ? 1000 : util; util = 1000 - util; vmm_cprintf(cdev, " %11d.%01d", udiv32(util, 10), umod32(util, 10)); util = udiv64(vmm_scheduler_irq_time(c) * 1000, vmm_scheduler_get_sample_period(c)); util = (util > 1000) ? 1000 : util; vmm_cprintf(cdev, " %10d.%01d", udiv32(util, 10), umod32(util, 10)); util = 1; for (p = VMM_VCPU_MIN_PRIORITY; p <= VMM_VCPU_MAX_PRIORITY; p++) { util += vmm_scheduler_ready_count(c, p); } vmm_cprintf(cdev, " %15d ", util); vmm_cprintf(cdev, "\n"); } vmm_cprintf(cdev, "----------------------------------------" "----------------------------------------\n"); return VMM_OK; }
static void cmd_host_cpu_info(struct vmm_chardev *cdev) { u32 c, khz; char name[25]; vmm_cprintf(cdev, "%-25s: %s\n", "CPU Type", CONFIG_CPU); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Present Count", vmm_num_present_cpus()); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Possible Count", vmm_num_possible_cpus()); vmm_cprintf(cdev, "%-25s: %u\n", "CPU Online Count", vmm_num_online_cpus()); for_each_online_cpu(c) { khz = vmm_delay_estimate_cpu_khz(c); vmm_sprintf(name, "CPU%d Speed", c); vmm_cprintf(cdev, "%-25s: %d.%d MHz (Estimated)\n", name, udiv32(khz, 1000), umod32(khz, 1000)); } arch_cpu_print_info(cdev); }
static void cmd_host_cpu_stats(struct vmm_chardev *cdev) { u32 c, p, khz, util; vmm_cprintf(cdev, "----------------------------------------" "-------------------------\n"); vmm_cprintf(cdev, " %4s %15s %13s %12s %16s\n", "CPU#", "Speed (MHz)", "Util. (%)", "IRQs (%)", "Active VCPUs"); vmm_cprintf(cdev, "----------------------------------------" "-------------------------\n"); for_each_online_cpu(c) { vmm_cprintf(cdev, " %4d", c); khz = vmm_delay_estimate_cpu_khz(c); vmm_cprintf(cdev, " %11d.%03d", udiv32(khz, 1000), umod32(khz, 1000)); util = udiv64(vmm_scheduler_idle_time(c) * 1000, vmm_scheduler_get_sample_period(c)); util = (util > 1000) ? 1000 : util; util = 1000 - util; vmm_cprintf(cdev, " %11d.%01d", udiv32(util, 10), umod32(util, 10)); util = udiv64(vmm_scheduler_irq_time(c) * 1000, vmm_scheduler_get_sample_period(c)); util = (util > 1000) ? 1000 : util; vmm_cprintf(cdev, " %10d.%01d", udiv32(util, 10), umod32(util, 10)); util = 1; for (p = VMM_VCPU_MIN_PRIORITY; p <= VMM_VCPU_MAX_PRIORITY; p++) { util += vmm_scheduler_ready_count(c, p); } vmm_cprintf(cdev, " %15d ", util); vmm_cprintf(cdev, "\n"); } vmm_cprintf(cdev, "----------------------------------------" "-------------------------\n"); }