Date: Thu, 7 Jan 1999 19:55:58 -0800 From: Don Lewis <Don.Lewis@tsc.tdk.com> To: Terry Lambert <tlambert@primenet.com>, dillon@apollo.backplane.com (Matthew Dillon) Cc: dyson@iquest.net, freebsd-hackers@FreeBSD.ORG Subject: Re: questions/problems with vm_fault() in Stable Message-ID: <199901080355.TAA05878@salsa.gv.tsc.tdk.com> In-Reply-To: Terry Lambert <tlambert@primenet.com> "Re: questions/problems with vm_fault() in Stable" (Jan 8, 2:48am)
next in thread | previous in thread | raw e-mail | index | archive | help
On Jan 8, 2:48am, Terry Lambert wrote: } Subject: Re: questions/problems with vm_fault() in Stable } The second is a more intersting posit. } } Consider the case of where I stack 500 NULL stacking layers on } top of a mount point. If each layer transition required a vnode } translation, this would take a very long time. Heidemann's paper also talks about featherweight layers ... } How does collapsing work? } } Collapsing does *not* work, as implied in the discussion by Matt, } a rune-time short circuit. } } Collapsing is intended to occur at FS mount time. } } When an FS is mounted, for every VOP in the descriptor array } defined in the structure in (incorrectly compile-time generated) } vnode_if.c, a VOP descriptor reference is instanced. [Note: if } these descriptors are sorted, as well, then we can get rid of } two ponter dereferences and a lot of reformatting glue code, as } well, and reference by array offset instead of descriptor pointer } reverse lookup]. } } For VOP's defined by a VFS, the descriptor is taken from the per } VFS array of descriptors. } } For VOP's that *aren't* defined by a VFS, the descriptor is taken } from the underlying VFS upon which it is stacked, and so on, until } it gets to the bottom, where the VOP's that are substituted return } a "not implemented" error. What if there is more than one underlying filesystem? mount a FFS filesystem on /a mount an NFS filesystem on /a/b NULLFS mount /a on /n For a VOP not defined for NULLFS, you want to use the FFS VOP for /n/c and the NFS VOP for /n/a/b/c } What does this mean for a stack of 500 NULLFS instances? } } What it means is that for most VOPs (all VOPs, if the VFS architecture } wasn't currently screwed up by null_bypass and some ill-considered } direct references to NULLVPTOLOWERVP), the VOP's inhereit from the } bottom-most VFS! } } It *also* means that the overhead in figuring this out occurs at } the time the VFS is instanced, *not* at runtime. What happens if /a/b is mounted after /a is mounted on /n? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901080355.TAA05878>