From nobody Wed May 13 17:45:30 2026 X-Original-To: dev-commits-src-all@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 4gG18B6Gx8z6clFL for ; Wed, 13 May 2026 17:45: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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gG18B31bJz450f for ; Wed, 13 May 2026 17:45:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778694330; 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=TuqZFTqSdwB+KIcZSx1SMR1VM/avxwHfFHSpGdyq4qY=; b=oloC/V7aGMFYWDYMp6coAY6GJWFmI8EZssBoT1n+YgQZBTnhMShtFS/nlB8/aNQ5ne6B05 65sPU8SNDQIeRyCM1j7/XOMFh+w12M17/P3BIY5iJ7jAkatMzRkzgZRZwjAnnC/Je53so+ R3vV1AFmIrjv8YzKtRcb81CCeW+L0XP8KQuxOl216qEHn4hPksXLewiyS9JJNScBoXiBXD QuBzIM5TomrORekKIJ/ArFflJtsaU9IFAk3kZhI9HHjELm3BbwC5POrjrMAIH28MyXCxto Ry6S1nCUBWMmbcJaYX8cboOLKkH+c/HsiR51oczfU+VyjwOMxYw0KnyWE5LxXQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1778694330; a=rsa-sha256; cv=none; b=LIAJrjt+6JwijsyesAcx2KWfiY4HebJKQji9AmIOQWIt5ZvOinpRJqQ3cyZgG3FYi3z3gh rDcl00+J3DqRa7EskNV+y12BaNrV8mg1qHfPIA4YU+aE33qpXeH1W0L9/LPwxVvnlV5GkT 4l2YplXj6F9/D00ZvqJIU5OTrM0y2xFZRkkw0JQc6aSV1Yf48s0iWSdBiJ6o5D+yugBZj0 YAuRnox1m4HfNKMgS2mhrszgOosIehu/BWybPBwFnUWtFoGrEkzmBDft2FcAdh9OdKrR1f glHOhYckXUcQDvq/DQij/nDb9ht5Vlc9wBhgDBlAWbEgSAM5OLgtomWgljfOqA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778694330; 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=TuqZFTqSdwB+KIcZSx1SMR1VM/avxwHfFHSpGdyq4qY=; b=bWfW5QBck+rHE4IwiHvfJ7990A9puTWLFTfTTW5KEqWVblwFEZ2ZjvF0QjT17bu0FHmUM+ l9Wugogm87ZAiCNPuEkThZrx4nPvD8FXEGS40iFVjUKTl0IFjrCvgHd+kV5bjM2GzsRsSH 1YCCTuo1ZBtX5lBcgTvzvufMZgDq8+1zLBM4D1TK+/3ORLeZCNcsJNdnuDQimqTTbwwNsU AR2D7XXqJyco03ewpJA1JalF+CQVE/UBw4HQghKJSN+ExXyAExpXTr7tbqPCx2RnnVefrE pdY++2Uad4rknB2egxdv9YDPe+K3ABUqr1ocCv4hPU1tMrBUkPtkcV4XIeiRCA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gG18B24fCz11Jt for ; Wed, 13 May 2026 17:45:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c03d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 13 May 2026 17:45:30 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ryan Libby Subject: git: 33355275247c - main - vnlru: avoid cache line contention List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rlibby X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 33355275247c462e1204bd1db5905a7d132eb502 Auto-Submitted: auto-generated Date: Wed, 13 May 2026 17:45:30 +0000 Message-Id: <6a04b8ba.1c03d.78f0936@gitrepo.freebsd.org> The branch main has been updated by rlibby: URL: https://cgit.FreeBSD.org/src/commit/?id=33355275247c462e1204bd1db5905a7d132eb502 commit 33355275247c462e1204bd1db5905a7d132eb502 Author: Ryan Libby AuthorDate: 2026-05-13 17:43:21 +0000 Commit: Ryan Libby CommitDate: 2026-05-13 17:43:21 +0000 vnlru: avoid cache line contention Reviewed by: kib, olce Sponsored by: Dell Inc. Differential Revision: https://reviews.freebsd.org/D56951 --- sys/kern/vfs_subr.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 4bfbc0a7057e..54e883038046 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -160,13 +160,6 @@ int vttoif_tab[10] = { S_IFSOCK, S_IFIFO, S_IFMT, S_IFMT }; -/* - * List of allocates vnodes in the system. - */ -static TAILQ_HEAD(freelst, vnode) vnode_list; -static struct vnode *vnode_list_free_marker; -static struct vnode *vnode_list_reclaim_marker; - /* * "Free" vnode target. Free vnodes are rarely completely free, but are * just ones that are cheap to recycle. Usually they are for files which @@ -190,7 +183,7 @@ static struct vnode *vnode_list_reclaim_marker; * E.g., 9% of 75% of MAXVNODES is more than 566000 vnodes to reclaim * whenever vnlru_proc() becomes active. */ -static long wantfreevnodes; +static long __read_mostly wantfreevnodes; static long __exclusive_cache_line freevnodes; static long freevnodes_old; @@ -326,12 +319,26 @@ static enum { SYNCER_RUNNING, SYNCER_SHUTTING_DOWN, SYNCER_FINAL_DELAY } syncer_state; /* Target for maximum number of vnodes. */ -u_long desiredvnodes; -static u_long gapvnodes; /* gap between wanted and desired */ -static u_long vhiwat; /* enough extras after expansion */ +u_long __read_mostly desiredvnodes; static u_long vlowat; /* minimal extras before expansion */ static bool vstir; /* nonzero to stir non-free vnodes */ -static volatile int vsmalltrigger = 8; /* pref to keep if > this many pages */ +/* pref to keep vnode if > this many resident pages */ +static volatile int __read_mostly vsmalltrigger = 8; + +/* Group globals accessed only under vnode_list_mtx together. */ +struct { + /* List of allocated vnodes in the system. */ + TAILQ_HEAD(freelst, vnode) vnode_list; + struct vnode *vnode_list_free_marker; + struct vnode *vnode_list_reclaim_marker; + u_long gapvnodes; /* gap between wanted and desired */ + u_long vhiwat; /* enough extras after expansion */ +} g_vnlru __exclusive_cache_line; +#define vnode_list g_vnlru.vnode_list +#define vnode_list_free_marker g_vnlru.vnode_list_free_marker +#define vnode_list_reclaim_marker g_vnlru.vnode_list_reclaim_marker +#define gapvnodes g_vnlru.gapvnodes +#define vhiwat g_vnlru.vhiwat static u_long vnlru_read_freevnodes(void); @@ -1345,7 +1352,7 @@ next_iter: return (done); } -static int max_free_per_call = 10000; +static int __read_mostly max_free_per_call = 10000; SYSCTL_INT(_debug, OID_AUTO, max_vnlru_free, CTLFLAG_RW, &max_free_per_call, 0, "limit on vnode free requests per call to the vnlru_free routine (legacy)"); SYSCTL_INT(_vfs_vnode_vnlru, OID_AUTO, max_free_per_call, CTLFLAG_RW, @@ -1535,7 +1542,7 @@ vnlru_recalc(void) * Calling vlrurecycle() from the bowels of filesystem code has some * interesting deadlock problems. */ -static struct proc *vnlruproc; +static struct proc * __read_mostly vnlruproc; static int vnlruproc_sig; static u_long vnlruproc_kicks;