From nobody Wed Jun 18 23:48:29 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bN0mt3GPcz5yG1f; Wed, 18 Jun 2025 23:48:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bN0ms6M9Tz49HH; Wed, 18 Jun 2025 23:48:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750290509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=X9FPh4Oj9xg+ZpSZchKV6wZi5zvr7nN0BBaXw+Hfn7s=; b=OiJfKZRdSNrxkxZ1AW+XmRpiacX/SqqxuGSuvqBj4O4CIyJW9Zs3vpaWW30jTqMCR5lOCB 8yWRrQ4PaprTlpPLcvFzs/3J7T6ZPpAwIEa7KvFNu154AtZpD1zlIRvowRBR7CK8ItuLbk cOaCKf6tLGzhhGRBkYaFYlsD4bIxKEUeR/z1T4GSg9cu8GbuyPHNbV/Gw+iFjqu6s0W43Y 46ii5HXO6TnliL9gXZzgh+Yq0g+xlgyxU4pYTHUCJMrIkZH75TZEmcOXkSwx1/Fd055vAf QLZhqFwNy8tf/WbXksP0v8QU/qA/xfn63PTOL3Fu+dIxUmOVXIGujukCoWLaSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750290509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=X9FPh4Oj9xg+ZpSZchKV6wZi5zvr7nN0BBaXw+Hfn7s=; b=C2LRt0QRb8X6yeSlIksXAsBrBfJhCthxVsyk7yfnCYtg0/9ojK5tmVIEVdqHqezg80ETrm hyFfAwZzj1cSvSerwULrUHBCRz4H7ACuuyaz0Qp/lQ/01ej1IHT03MGZypoQd7Cxc8hyi/ +MdnyrdbxWX1BOdc1pJPZHBf2ZvKgZL/uO1zgvqXbBOKiOlyXwOXjZ8yIa7rfo+wPUvCCn TT0Sp1pTo1I9M4b7zPrc9hQU9g0yPemqSkdaz9TkXa3P2ZMoNSz5vRDtTp9t0SCNY4qiPw VWU4QaKPQvRboO2BOTMiiLdxVx5Yq/IEjeuol52HGhNmI/X//NfIfySTuSUy6g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750290509; a=rsa-sha256; cv=none; b=sX/k+FA1UxgDnGpYILcGffmu7LFnn+4tFKBtVjGbDuxKgnZU5ANKgU3ecBXXUfaUXjTOL0 9UCbH0xtNmWdiJUSaxYyME3V4Rw0YfDcalR7/RP4UIaqK4wkRISud1E0kBglImT6h967+N eX0MxpPUWu7MkV0Hiunyqyc8g03a+Rn5PFqH2liN1pnS27J8+hPzVfRFaL+vmhghy8p7t9 ZOggqYYInE/8NsuPznQ2NGOJ00jVGxTUT1rJSjNhYhEEOFS0b6U44pZnCpvgue6LqVYqPa kvvWBaADZ+f+I69w0+rS57KXgi0RY4eTj7LJOhOuNqVpaiUadDbUMEdvoVob/Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bN0ms5d6WzqyS; Wed, 18 Jun 2025 23:48:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55INmTpj049089; Wed, 18 Jun 2025 23:48:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55INmTWp049086; Wed, 18 Jun 2025 23:48:29 GMT (envelope-from git) Date: Wed, 18 Jun 2025 23:48:29 GMT Message-Id: <202506182348.55INmTWp049086@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 4c6c1dd8f7ce - main - vm_page: Fix nofree page accounting List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4c6c1dd8f7cef09afd03fa873487aba0c5dd13ba Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=4c6c1dd8f7cef09afd03fa873487aba0c5dd13ba commit 4c6c1dd8f7cef09afd03fa873487aba0c5dd13ba Author: Mark Johnston AuthorDate: 2025-06-18 21:14:51 +0000 Commit: Mark Johnston CommitDate: 2025-06-18 23:48:07 +0000 vm_page: Fix nofree page accounting In commit ae10431c9833 ("vm_page: Allow PG_NOFREE pages to be freed"), I changed the v_nofree_count counter to instead count the size of the nofree queue, on the basis that with the ability to free nofree pages, the size of the queue is unbounded. The use of a counter(9) for this purpose is not really correct, as early initialization of per-CPU counters interferes with precise accounting that we want here. Instead, add a global tracker for this purpose, expose it elsewhere in the sysctl tree, and restore v_free_nofree's original use as a counter of allocated nofree pages. Reviewed by: bnovkov, alc, kib Reported by: alc Fixes: ae10431c9833 ("vm_page: Allow PG_NOFREE pages to be freed") Differential Revision: https://reviews.freebsd.org/D50877 --- sys/vm/vm_page.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index b00f775de6e7..66aae45cb37e 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -140,6 +140,11 @@ SYSCTL_COUNTER_U64(_vm_stats_page, OID_AUTO, queue_nops, CTLFLAG_RD, &queue_nops, "Number of batched queue operations with no effects"); +static unsigned long nofreeq_size; +SYSCTL_ULONG(_vm_stats_page, OID_AUTO, nofreeq_size, CTLFLAG_RD, + &nofreeq_size, 0, + "Size of the nofree queue"); + /* * bogus page -- for I/O to/from partially complete buffers, * or for paging into sparsely invalid regions. @@ -2540,7 +2545,7 @@ vm_page_alloc_nofree_domain(int domain, int req) } m->ref_count = count - 1; TAILQ_INSERT_HEAD(&vmd->vmd_nofreeq, m, plinks.q); - VM_CNT_ADD(v_nofree_count, count); + atomic_add_long(&nofreeq_size, count); } m = TAILQ_FIRST(&vmd->vmd_nofreeq); TAILQ_REMOVE(&vmd->vmd_nofreeq, m, plinks.q); @@ -2554,7 +2559,8 @@ vm_page_alloc_nofree_domain(int domain, int req) m->ref_count = 0; } vm_domain_free_unlock(vmd); - VM_CNT_ADD(v_nofree_count, -1); + atomic_add_long(&nofreeq_size, -1); + VM_CNT_INC(v_nofree_count); return (m); } @@ -2568,11 +2574,12 @@ vm_page_alloc_nofree_domain(int domain, int req) static void __noinline vm_page_free_nofree(struct vm_domain *vmd, vm_page_t m) { + VM_CNT_ADD(v_nofree_count, -1); + atomic_add_long(&nofreeq_size, 1); vm_domain_free_lock(vmd); MPASS(m->ref_count == 0); TAILQ_INSERT_HEAD(&vmd->vmd_nofreeq, m, plinks.q); vm_domain_free_unlock(vmd); - VM_CNT_ADD(v_nofree_count, 1); } vm_page_t