Module Name:    src
Committed By:   mrg
Date:           Sat Dec  2 08:15:43 UTC 2017

Modified Files:
        src/sys/kern: subr_pool.c
        src/sys/sys: pool.h
        src/sys/uvm: uvm_extern.h uvm_meter.c uvm_page.c uvm_stat.c
        src/usr.bin/vmstat: vmstat.c

Log Message:
add two new members to uvmexp_sysctl{}:  bootpages and poolpages.
bootpages is set to the pages allocated via uvm_pageboot_alloc().
poolpages is calculated from the list of pools nr_pages members.

this brings us closer to having a valid total of pages known by
the system, vs actual pages originally managed.

XXX: poolpages needs some handling for PR_RECURSIVE pools still.


To generate a diff of this commit:
cvs rdiff -u -r1.216 -r1.217 src/sys/kern/subr_pool.c
cvs rdiff -u -r1.80 -r1.81 src/sys/sys/pool.h
cvs rdiff -u -r1.206 -r1.207 src/sys/uvm/uvm_extern.h
cvs rdiff -u -r1.66 -r1.67 src/sys/uvm/uvm_meter.c
cvs rdiff -u -r1.194 -r1.195 src/sys/uvm/uvm_page.c
cvs rdiff -u -r1.38 -r1.39 src/sys/uvm/uvm_stat.c
cvs rdiff -u -r1.220 -r1.221 src/usr.bin/vmstat/vmstat.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/subr_pool.c
diff -u src/sys/kern/subr_pool.c:1.216 src/sys/kern/subr_pool.c:1.217
--- src/sys/kern/subr_pool.c:1.216	Tue Nov 14 15:02:06 2017
+++ src/sys/kern/subr_pool.c	Sat Dec  2 08:15:42 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_pool.c,v 1.216 2017/11/14 15:02:06 christos Exp $	*/
+/*	$NetBSD: subr_pool.c,v 1.217 2017/12/02 08:15:42 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014, 2015
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.216 2017/11/14 15:02:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.217 2017/12/02 08:15:42 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -1453,6 +1453,27 @@ pool_drain(struct pool **ppp)
 }
 
 /*
+ * Calculate the total number of pages consumed by pools.
+ */
+int
+pool_totalpages(void)
+{
+	struct pool *pp;
+	int total = 0;
+
+	mutex_enter(&pool_head_lock);
+	TAILQ_FOREACH(pp, &pool_head, pr_poollist)
+		/*
+		 * XXXMRG
+		if ((pp->pr_roflags & PR_RECURSIVE) == 0)
+		 */
+			total += pp->pr_npages;
+	mutex_exit(&pool_head_lock);
+
+	return total;
+}
+
+/*
  * Diagnostic helpers.
  */
 

Index: src/sys/sys/pool.h
diff -u src/sys/sys/pool.h:1.80 src/sys/sys/pool.h:1.81
--- src/sys/sys/pool.h:1.80	Sat Oct 28 19:19:10 2017
+++ src/sys/sys/pool.h	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: pool.h,v 1.80 2017/10/28 19:19:10 riastradh Exp $	*/
+/*	$NetBSD: pool.h,v 1.81 2017/12/02 08:15:43 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 1999, 2000, 2007 The NetBSD Foundation, Inc.
@@ -307,6 +307,7 @@ void		pool_setlowat(struct pool *, int);
 void		pool_sethiwat(struct pool *, int);
 void		pool_sethardlimit(struct pool *, int, const char *, int);
 bool		pool_drain(struct pool **);
+int		pool_totalpages(void);
 
 /*
  * Debugging and diagnostic aides.

Index: src/sys/uvm/uvm_extern.h
diff -u src/sys/uvm/uvm_extern.h:1.206 src/sys/uvm/uvm_extern.h:1.207
--- src/sys/uvm/uvm_extern.h:1.206	Sat May 20 07:27:15 2017
+++ src/sys/uvm/uvm_extern.h	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_extern.h,v 1.206 2017/05/20 07:27:15 chs Exp $	*/
+/*	$NetBSD: uvm_extern.h,v 1.207 2017/12/02 08:15:43 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -408,6 +408,8 @@ struct uvmexp {
 	int pdreanon;	/* anon pages reactivated due to thresholds */
 	int pdrefile;	/* file pages reactivated due to thresholds */
 	int pdreexec;	/* executable pages reactivated due to thresholds */
+
+	int bootpages;  /* number of pages stolen at boot */
 };
 
 /*
@@ -493,6 +495,8 @@ struct uvmexp_sysctl {
 	int64_t colorhit;
 	int64_t colormiss;
 	int64_t ncolors;
+	int64_t bootpages;
+	int64_t poolpages;
 };
 
 #ifdef _KERNEL

Index: src/sys/uvm/uvm_meter.c
diff -u src/sys/uvm/uvm_meter.c:1.66 src/sys/uvm/uvm_meter.c:1.67
--- src/sys/uvm/uvm_meter.c:1.66	Sun Jul  2 16:41:33 2017
+++ src/sys/uvm/uvm_meter.c	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_meter.c,v 1.66 2017/07/02 16:41:33 joerg Exp $	*/
+/*	$NetBSD: uvm_meter.c,v 1.67 2017/12/02 08:15:43 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_meter.c,v 1.66 2017/07/02 16:41:33 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_meter.c,v 1.67 2017/12/02 08:15:43 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -177,6 +177,8 @@ sysctl_vm_uvmexp2(SYSCTLFN_ARGS)
 	u.colorhit = uvmexp.colorhit;
 	u.colormiss = uvmexp.colormiss;
 	u.ncolors = uvmexp.ncolors;
+	u.bootpages = uvmexp.bootpages;
+	u.poolpages = pool_totalpages();
 
 	node = *rnode;
 	node.sysctl_data = &u;

Index: src/sys/uvm/uvm_page.c
diff -u src/sys/uvm/uvm_page.c:1.194 src/sys/uvm/uvm_page.c:1.195
--- src/sys/uvm/uvm_page.c:1.194	Sat Oct 28 00:37:13 2017
+++ src/sys/uvm/uvm_page.c	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.c,v 1.194 2017/10/28 00:37:13 pgoyette Exp $	*/
+/*	$NetBSD: uvm_page.c,v 1.195 2017/12/02 08:15:43 mrg Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.194 2017/10/28 00:37:13 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.195 2017/12/02 08:15:43 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvm.h"
@@ -538,6 +538,7 @@ uvm_pageboot_alloc(vsize_t size)
 
 	/* round to page size */
 	size = round_page(size);
+	uvmexp.bootpages += atop(size);
 
 #if defined(PMAP_STEAL_MEMORY)
 

Index: src/sys/uvm/uvm_stat.c
diff -u src/sys/uvm/uvm_stat.c:1.38 src/sys/uvm/uvm_stat.c:1.39
--- src/sys/uvm/uvm_stat.c:1.38	Thu Dec  1 01:59:17 2016
+++ src/sys/uvm/uvm_stat.c	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_stat.c,v 1.38 2016/12/01 01:59:17 mrg Exp $	 */
+/*	$NetBSD: uvm_stat.c,v 1.39 2017/12/02 08:15:43 mrg Exp $	 */
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_stat.c,v 1.38 2016/12/01 01:59:17 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_stat.c,v 1.39 2017/12/02 08:15:43 mrg Exp $");
 
 #include "opt_readahead.h"
 #include "opt_ddb.h"
@@ -46,6 +46,8 @@ __KERNEL_RCSID(0, "$NetBSD: uvm_stat.c,v
 
 #ifdef DDB
 
+#include <sys/pool.h>
+
 /*
  * uvmexp_print: ddb hook to print interesting uvm counters
  */
@@ -54,10 +56,12 @@ uvmexp_print(void (*pr)(const char *, ..
     __attribute__((__format__(__printf__,1,2))))
 {
 	int active, inactive;
+	int poolpages;
 	CPU_INFO_ITERATOR cii;
 	struct cpu_info *ci;
 
 	uvm_estimatepageable(&active, &inactive);
+	poolpages = pool_totalpages();
 
 	(*pr)("Current UVM status:\n");
 	(*pr)("  pagesize=%d (0x%x), pagemask=0x%x, pageshift=%d, ncolors=%d\n",
@@ -72,6 +76,8 @@ uvmexp_print(void (*pr)(const char *, ..
 	    uvmexp.freemin, uvmexp.freetarg, uvmexp.wiredmax);
 	(*pr)("  resv-pg=%d, resv-kernel=%d, zeropages=%d\n",
 	    uvmexp.reserve_pagedaemon, uvmexp.reserve_kernel, uvmexp.zeropages);
+	(*pr)("  bootpages=%d, poolpages=%d\n",
+	    uvmexp.bootpages, poolpages);
 
 	for (CPU_INFO_FOREACH(cii, ci)) {
 		(*pr)("  cpu%u:\n", cpu_index(ci));

Index: src/usr.bin/vmstat/vmstat.c
diff -u src/usr.bin/vmstat/vmstat.c:1.220 src/usr.bin/vmstat/vmstat.c:1.221
--- src/usr.bin/vmstat/vmstat.c:1.220	Fri Nov  3 22:45:14 2017
+++ src/usr.bin/vmstat/vmstat.c	Sat Dec  2 08:15:43 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vmstat.c,v 1.220 2017/11/03 22:45:14 pgoyette Exp $ */
+/* $NetBSD: vmstat.c,v 1.221 2017/12/02 08:15:43 mrg Exp $ */
 
 /*-
  * Copyright (c) 1998, 2000, 2001, 2007 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19
 #if 0
 static char sccsid[] = "@(#)vmstat.c	8.2 (Berkeley) 3/1/95";
 #else
-__RCSID("$NetBSD: vmstat.c,v 1.220 2017/11/03 22:45:14 pgoyette Exp $");
+__RCSID("$NetBSD: vmstat.c,v 1.221 2017/12/02 08:15:43 mrg Exp $");
 #endif
 #endif /* not lint */
 
@@ -892,6 +892,10 @@ dosum(void)
 			warn("sysctl vm.uvmexp2 failed");
 	} else {
 		struct uvmexp uvmexp_kernel;
+		struct pool pool, *pp = &pool;
+		TAILQ_HEAD(,pool) pool_head;
+		void *addr;
+
 		kread(namelist, X_UVMEXP, &uvmexp_kernel, sizeof(uvmexp_kernel));
 #define COPY(field) uvmexp.field = uvmexp_kernel.field
 		COPY(pagesize);
@@ -955,7 +959,18 @@ dosum(void)
 		COPY(pdbusy);
 		COPY(pdpending);
 		COPY(pddeact);
+		COPY(bootpages);
 #undef COPY
+		kread(namelist, X_POOLHEAD, &pool_head, sizeof(pool_head));
+		addr = TAILQ_FIRST(&pool_head);
+		for (; addr != NULL; addr = TAILQ_NEXT(pp, pr_poollist)) {
+			deref_kptr(addr, pp, sizeof(*pp), "pool chain trashed");
+			/*
+			 * XXXMRG
+			if ((pp->pr_roflags & PR_RECURSIVE) == 0)
+			 */
+				uvmexp.poolpages += pp->pr_npages;
+		}
 	}
 
 
@@ -976,6 +991,8 @@ dosum(void)
 	(void)printf("%9" PRIu64 " reserve pagedaemon pages\n",
 	    uvmexp.reserve_pagedaemon);
 	(void)printf("%9" PRIu64 " reserve kernel pages\n", uvmexp.reserve_kernel);
+	(void)printf("%9" PRIu64 " boot kernel pages\n", uvmexp.bootpages);
+	(void)printf("%9" PRIu64 " kernel pool pages\n", uvmexp.poolpages);
 	(void)printf("%9" PRIu64 " anonymous pages\n", uvmexp.anonpages);
 	(void)printf("%9" PRIu64 " cached file pages\n", uvmexp.filepages);
 	(void)printf("%9" PRIu64 " cached executable pages\n", uvmexp.execpages);
@@ -2251,9 +2268,9 @@ hist_traverse_sysctl(int todo, const cha
  /*
   * Actually dump the history buffer at the specified KVA.
   */
- void
+void
 hist_dodump_sysctl(int mib[], unsigned int miblen)
- {
+{
 	struct sysctl_history *hist;
 	struct timeval tv;
 	struct sysctl_history_event *e;

Reply via email to