Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Oct 2024 14:20:09 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: df515b2e22c7 - stable/13 - vm_meter: Fix laundry accounting
Message-ID:  <202410291420.49TEK951015103@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=df515b2e22c79d857189f3ad7389b546c3428868

commit df515b2e22c79d857189f3ad7389b546c3428868
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-10-22 12:48:43 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-10-29 13:34:45 +0000

    vm_meter: Fix laundry accounting
    
    Pages in PQ_UNSWAPPABLE should be considered part of the laundry.
    Otherwise, on systems with no swap, the total amount of memory visible
    to tools like top(1) decreases.
    
    It doesn't seem very useful to have a dedicated counter for unswappable
    pages, and updating applications accordingly would be painful, so just
    lump them in with laundry for now.
    
    PR:             280846
    Reviewed by:    bnovkov, kib
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D47216
    
    (cherry picked from commit 6a07e67fb7a8b5687a492d9d70a10651d5933ff5)
---
 sys/vm/vm_meter.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/sys/vm/vm_meter.c b/sys/vm/vm_meter.c
index 9170581eaec1..caa6b6aa4769 100644
--- a/sys/vm/vm_meter.c
+++ b/sys/vm/vm_meter.c
@@ -458,7 +458,8 @@ u_int
 vm_laundry_count(void)
 {
 
-	return (vm_pagequeue_count(PQ_LAUNDRY));
+	return (vm_pagequeue_count(PQ_LAUNDRY) +
+	    vm_pagequeue_count(PQ_UNSWAPPABLE));
 }
 
 static int
@@ -480,6 +481,18 @@ SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_pdpages,
     CTLTYPE_U64 | CTLFLAG_MPSAFE | CTLFLAG_RD, NULL, 0, sysctl_vm_pdpages, "QU",
     "Pages analyzed by pagedaemon");
 
+static int
+sysctl_vm_laundry_pages(SYSCTL_HANDLER_ARGS)
+{
+	struct vm_domain *vmd;
+	u_int ret;
+
+	vmd = arg1;
+	ret = vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt +
+	    vmd->vmd_pagequeues[PQ_UNSWAPPABLE].pq_cnt;
+	return (SYSCTL_OUT(req, &ret, sizeof(ret)));
+}
+
 static void
 vm_domain_stats_init(struct vm_domain *vmd, struct sysctl_oid *parent)
 {
@@ -506,8 +519,9 @@ vm_domain_stats_init(struct vm_domain *vmd, struct sysctl_oid *parent)
 	    "inactpdpgs", CTLFLAG_RD,
 	    &vmd->vmd_pagequeues[PQ_INACTIVE].pq_pdpages, 0,
 	    "Inactive pages scanned by the page daemon");
-	SYSCTL_ADD_UINT(NULL, SYSCTL_CHILDREN(oid), OID_AUTO,
-	    "laundry", CTLFLAG_RD, &vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt, 0,
+	SYSCTL_ADD_PROC(NULL, SYSCTL_CHILDREN(oid), OID_AUTO,
+	    "laundry", CTLFLAG_RD | CTLTYPE_UINT, vmd, 0,
+	    sysctl_vm_laundry_pages, "IU",
 	    "laundry pages");
 	SYSCTL_ADD_U64(NULL, SYSCTL_CHILDREN(oid), OID_AUTO,
 	    "laundpdpgs", CTLFLAG_RD,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202410291420.49TEK951015103>