summaryrefslogtreecommitdiffstats
path: root/sys/compat/linprocfs
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2003-09-22 15:52:32 +0000
committerdes <des@FreeBSD.org>2003-09-22 15:52:32 +0000
commit111a6744cd1c776812920821ae50b538e92134ae (patch)
treef3cebda785314eff71e5d2bd778b2c29478254c0 /sys/compat/linprocfs
parenteed69ab82ae4c7052d1198d62bae3532d52e29ea (diff)
downloadFreeBSD-src-111a6744cd1c776812920821ae50b538e92134ae.zip
FreeBSD-src-111a6744cd1c776812920821ae50b538e92134ae.tar.gz
Fake multi-cpu statistics for proc/stat by dividing the totals by the
number of CPUs. PR: kern/27522
Diffstat (limited to 'sys/compat/linprocfs')
-rw-r--r--sys/compat/linprocfs/linprocfs.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c
index bf7861b..9e11927 100644
--- a/sys/compat/linprocfs/linprocfs.c
+++ b/sys/compat/linprocfs/linprocfs.c
@@ -413,18 +413,31 @@ linprocfs_domtab(PFS_FILL_ARGS)
static int
linprocfs_dostat(PFS_FILL_ARGS)
{
+ int name[2], olen, plen;
+ int i, ncpu;
+
+ name[0] = CTL_HW;
+ name[1] = HW_NCPU;
+ if (kernel_sysctl(td, name, 2, &ncpu, &olen, NULL, 0, &plen) != 0)
+ ncpu = 0;
+ sbuf_printf(sb, "cpu %ld %ld %ld %ld\n",
+ T2J(cp_time[CP_USER]),
+ T2J(cp_time[CP_NICE]),
+ T2J(cp_time[CP_SYS] /*+ cp_time[CP_INTR]*/),
+ T2J(cp_time[CP_IDLE]));
+ for (i = 0; i < ncpu; ++i)
+ sbuf_printf(sb, "cpu%d %ld %ld %ld %ld\n", i,
+ T2J(cp_time[CP_USER]) / ncpu,
+ T2J(cp_time[CP_NICE]) / ncpu,
+ T2J(cp_time[CP_SYS]) / ncpu,
+ T2J(cp_time[CP_IDLE]) / ncpu);
sbuf_printf(sb,
- "cpu %ld %ld %ld %ld\n"
"disk 0 0 0 0\n"
"page %u %u\n"
"swap %u %u\n"
"intr %u\n"
"ctxt %u\n"
"btime %lld\n",
- T2J(cp_time[CP_USER]),
- T2J(cp_time[CP_NICE]),
- T2J(cp_time[CP_SYS] /*+ cp_time[CP_INTR]*/),
- T2J(cp_time[CP_IDLE]),
cnt.v_vnodepgsin,
cnt.v_vnodepgsout,
cnt.v_swappgsin,
OpenPOWER on IntegriCloud