From owner-freebsd-hackers Thu Jan 7 19:56:38 1999 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id TAA24281 for freebsd-hackers-outgoing; Thu, 7 Jan 1999 19:56:38 -0800 (PST) (envelope-from owner-freebsd-hackers@FreeBSD.ORG) Received: from gatekeeper.tsc.tdk.com (gatekeeper.tsc.tdk.com [207.113.159.21]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id TAA24276 for ; Thu, 7 Jan 1999 19:56:36 -0800 (PST) (envelope-from gdonl@tsc.tdk.com) Received: from sunrise.gv.tsc.tdk.com (root@sunrise.gv.tsc.tdk.com [192.168.241.191]) by gatekeeper.tsc.tdk.com (8.8.8/8.8.8) with ESMTP id TAA16399; Thu, 7 Jan 1999 19:56:00 -0800 (PST) (envelope-from gdonl@tsc.tdk.com) Received: from salsa.gv.tsc.tdk.com (salsa.gv.tsc.tdk.com [192.168.241.194]) by sunrise.gv.tsc.tdk.com (8.8.5/8.8.5) with ESMTP id TAA17941; Thu, 7 Jan 1999 19:55:59 -0800 (PST) Received: (from gdonl@localhost) by salsa.gv.tsc.tdk.com (8.8.5/8.8.5) id TAA05878; Thu, 7 Jan 1999 19:55:58 -0800 (PST) From: Don Lewis Message-Id: <199901080355.TAA05878@salsa.gv.tsc.tdk.com> Date: Thu, 7 Jan 1999 19:55:58 -0800 In-Reply-To: Terry Lambert "Re: questions/problems with vm_fault() in Stable" (Jan 8, 2:48am) X-Mailer: Mail User's Shell (7.2.6 alpha(3) 7/19/95) To: Terry Lambert , dillon@apollo.backplane.com (Matthew Dillon) Subject: Re: questions/problems with vm_fault() in Stable Cc: dyson@iquest.net, freebsd-hackers@FreeBSD.ORG Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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