git: 1d271ba05fce - stable/14 - vm_meter: Fix laundry accounting
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 29 Oct 2024 13:34:18 UTC
The branch stable/14 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=1d271ba05fceb1ef6246e8079bc19e3b6416a833
commit 1d271ba05fceb1ef6246e8079bc19e3b6416a833
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:04:25 +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 aaea39486baa..75395f69c1db 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,