Module Name: src Committed By: ad Date: Sun Dec 1 13:56:29 UTC 2019
Modified Files: src/sys/kern: vfs_subr.c vfs_vnode.c vfs_vnops.c vnode_if.sh src/sys/miscfs/genfs: genfs_vnops.c src/sys/sys: vnode.h vnode_impl.h Log Message: Minor vnode locking changes: - Stop using atomics to maniupulate v_usecount. It was a mistake to begin with. It doesn't work as intended unless the XLOCK bit is incorporated in v_usecount and we don't have that any more. When I introduced this 10+ years ago it was to reduce pressure on v_interlock but it doesn't do that, it just makes stuff disappear from lockstat output and introduces problems elsewhere. We could do atomic usecounts on vnodes but there has to be a well thought out scheme. - Resurrect LK_UPGRADE/LK_DOWNGRADE which will be needed to work effectively when there is increased use of shared locks on vnodes. - Allocate the vnode lock using rw_obj_alloc() to reduce false sharing of struct vnode. - Put all of the LRU lists into a single cache line, and do not requeue a vnode if it's already on the correct list and was requeued recently (less than a second ago). Kernel build before and after: 119.63s real 1453.16s user 2742.57s system 115.29s real 1401.52s user 2690.94s system To generate a diff of this commit: cvs rdiff -u -r1.474 -r1.475 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.103 -r1.104 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.202 -r1.203 src/sys/kern/vfs_vnops.c cvs rdiff -u -r1.67 -r1.68 src/sys/kern/vnode_if.sh cvs rdiff -u -r1.199 -r1.200 src/sys/miscfs/genfs/genfs_vnops.c cvs rdiff -u -r1.283 -r1.284 src/sys/sys/vnode.h cvs rdiff -u -r1.17 -r1.18 src/sys/sys/vnode_impl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.