diff --git a/fs/proc/root.c b/fs/proc/root.c index 6725b6de9f..070cdb460e 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -15,8 +15,25 @@ static int proc_show_version(struct proc_entry *UNUSED(entry), struct proc_data } static int proc_show_stat(struct proc_entry *UNUSED(entry), struct proc_data *buf) { + int ncpus = get_cpu_count(); struct cpu_usage usage = get_cpu_usage(); - proc_printf(buf, "cpu %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64"\n", usage.user_ticks, usage.nice_ticks, usage.system_ticks, usage.idle_ticks); + struct uptime_info uptime_info = get_uptime(); + unsigned uptime = uptime_info.uptime_ticks; + + uint64_t one_cpu_user_ticks = usage.user_ticks / ncpus; + uint64_t one_cpu_system_ticks = usage.system_ticks / ncpus; + uint64_t one_cpu_idle_ticks = usage.idle_ticks / ncpus; + uint64_t one_cpu_nice_ticks = usage.nice_ticks / ncpus; + + proc_printf(buf, "cpu %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64" 0 0 0 0\n", usage.user_ticks, usage.nice_ticks, usage.system_ticks, usage.idle_ticks); + for (int i = 0; i < ncpus; i++) { + proc_printf(buf, "cpu%d %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64" 0 0 0 0\n", i, one_cpu_user_ticks, one_cpu_nice_ticks, one_cpu_system_ticks, one_cpu_idle_ticks); + } + proc_printf(buf, "ctxt 0\n"); + proc_printf(buf, "btime %u\n", uptime); + proc_printf(buf, "processes %d\n", alive_task_count); + proc_printf(buf, "procs_running %d\n", alive_task_count - blocked_task_count); + proc_printf(buf, "procs_blocked %d\n", blocked_task_count); return 0; }