Re: git: c849eb8f1925 - main - nullfs: Add the vfs.nullfs.cache_nodes sysctl to control nocache default [unknown oid 'vfs.nullfs.cache_vnodes']

From: Mark Millard <marklmi_at_yahoo.com>
Date: Sun, 17 Mar 2024 04:48:07 UTC
[Correcting a typo in the naming. Leads to discovering need to load nullfs.ko
first.]

On Mar 16, 2024, at 21:18, Mark Millard <marklmi@yahoo.com> wrote:

> Both an official PkgBase install and a personal build do not find the new oid for this for main:
> 
> # uname -apKU
> FreeBSD 7950X3D-ZFS 15.0-CURRENT FreeBSD 15.0-CURRENT main-n268827-75464941dc17 GENERIC-NODEBUG amd64 amd64 1500015 1500015
> 
> # uname -apKU
> FreeBSD 7950X3D-ZFS 15.0-CURRENT FreeBSD 15.0-CURRENT #139 main-n268827-75464941dc17-dirty: Sun Mar 17 03:16:30 UTC 2024     root@7950X3D-ZFS:/usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64/sys/GENERIC-NODBG amd64 amd64 1500015 1500015
> 
> The results are:
> 
> # sysctl -d vfs.nullfs.cache_nodes
> sysctl: unknown oid 'vfs.nullfs.cache_nodes'

# sysctl -d vfs.nullfs.cache_vnodes

would also have failed because nullfs.ko had not been
loaded yet.

> # sysctl -a | grep vnode
> kern.maxvnodes: 3224925
> kern.ipc.umtx_vnode_persistent: 0
> vm.vnode_pbufs: 2048
> vm.stats.vm.v_vnodepgsout: 0
> vm.stats.vm.v_vnodepgsin: 4923
> vm.stats.vm.v_vnodeout: 0
> vm.stats.vm.v_vnodein: 662
> vfs.wantfreevnodes: 806231
> vfs.freevnodes: 1323
> vfs.vnodes_created: 3654
> vfs.numvnodes: 1807
> 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: 0
> vfs.vnode.vnlru.recycles_free: 0
> vfs.vnode.vnlru.recycles: 0
> vfs.vnode.stats.alloc_sleeps: 0
> vfs.vnode.stats.free: 1323
> vfs.vnode.stats.skipped_requeues: 0
> vfs.vnode.stats.created: 3654
> vfs.vnode.stats.count: 1807
> vfs.vnode.param.wantfree: 806231
> vfs.vnode.param.limit: 3224925
> vfs.cache.debug.vnodes_cel_3_failures: 0
> vfs.cache.stats.heldvnodes: 119
> debug.vnode_domainset: <NULL>
> debug.sizeof.vnode: 448
> debug.fail_point.status_fill_kinfo_vnode__random_path: off
> debug.fail_point.fill_kinfo_vnode__random_path: off

That also explains the above.

> Note: The mount_nullfs man page does have:
> 
> QUOTE
>             cache    Force enable metadata caching.
> 
>     The vfs.nullfs.cache_vnodes sysctl specifies global default for mount-
>     specific cache/nocache option.
> END QUOTE
> 
> That is evidence of the vintage of materials.
> 

After:

# kldload nullfs

It shows up (when correctly spelled):

# sysctl -Td vfs.nullfs.cache_vnodes
vfs.nullfs.cache_vnodes: cache free nullfs vnodes

(So the tunable requires first loading nullfs.ko to be
effective? Should there be any notes about getting
tunable time frame settings to work for any early
time frame use of nullfs_mount?)

# sysctl -Wd vfs.nullfs.cache_vnodes
vfs.nullfs.cache_vnodes: cache free nullfs vnodes

===
Mark Millard
marklmi at yahoo.com