[Bug 276660] vnode_init can take several minutes to complete
Date: Sat, 27 Jan 2024 10:15:49 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276660
Bug ID: 276660
Summary: vnode_init can take several minutes to complete
Product: Base System
Version: 13.2-STABLE
Hardware: amd64
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: kern
Assignee: bugs@FreeBSD.org
Reporter: jfc@mit.edu
Occasionally a process on my 13.2 server will get stuck in vnode_init for 5-15
minutes.
^T says the stack trace is constant but the process is accumulating CPU time:
load: 28.91 cmd: git 7038 [running] 430.92r 0.00u 425.79s 100% 6908k
__mtx_lock_sleep+0xf8 __mtx_lock_flags+0x9d vnode_init+0xc3
keg_alloc_slab+0x277 zone_import+0x143 cache_alloc+0x3ed cache_alloc_retry+0x23
getnewvnode_reserve+0x20 zfs_zget+0x1f zfs_dirent_lookup+0x16d zfs_dirlook+0x7f
zfs_lookup+0x3e0 zfs_freebsd_cachedlookup+0x74 vfs_cache_lookup+0xa7
cache_fplookup_noentry+0x23e cache_fplookup+0x565 namei+0x1e9
kern_accessat+0x195
This is the context of the mtx_lock call from vnode_init:
vp->v_holdcnt = VHOLD_NO_SMR;
vp->v_type = VNON;
mtx_lock(&vnode_list_mtx);
TAILQ_INSERT_BEFORE(vnode_list_free_marker, vp, v_vnodelist);
mtx_unlock(&vnode_list_mtx);
return (0);
When this happened last October I posted to the freebsd-fs list[1]. Mateusz
Guzik[2] described the root cause: "That codepath which appeared stalled may
very well have been making
progress. There is an API deficiency in UMA where it calls the
constructor/destructor for each object separately."
[1]https://lists.freebsd.org/archives/freebsd-fs/2023-October/002693.html
[2]https://lists.freebsd.org/archives/freebsd-fs/2023-October/002701.html
My system is a 24 core / 48 thread AMD EPYC 7402P. Memory stats reported by
top are
Mem: 3784M Active, 79G Inact, 15G Laundry, 47G Wired, 739M Buf, 12G Free
ARC: 34G Total, 19G MFU, 11G MRU, 3584K Anon, 3870M Header, 239M Other
28G Compressed, 33G Uncompressed, 1.19:1 Ratio
Swap: 64G Total, 3439M Used, 61G Free, 5% Inuse
There are also two find processes started by cron apparently exhibiting the
same behavior, runnable with large CPU time instead of waiting on I/O.
Interesting sysctl values are:
vm.uma.VNODE.bucket_size: 121
vfs.vnode.vnlru.uma_reclaim_calls: 0
vfs.vnode.vnlru.kicks: 0
vfs.vnode.vnlru.max_free_per_call: 10000
vfs.vnode.vnlru.failed_runs: 0
vfs.vnode.vnlru.direct_recycles_free: 74572815
vfs.vnode.vnlru.recycles_free: 37066685
vfs.vnode.vnlru.recycles: 0
vfs.vnode.stats.alloc_sleeps: 0
vfs.vnode.stats.free: 648453
vfs.vnode.stats.skipped_requeues: 6851950
vfs.vnode.stats.created: 116854230
vfs.vnode.stats.count: 973318
vfs.vnode.param.wantfree: 681059
vfs.vnode.param.limit: 2724237
--
You are receiving this mail because:
You are the assignee for the bug.