Thread (7 messages) 7 messages, 2 authors, 2024-02-07

Re: when should the client request a directory delegation?

From: Jeff Layton <jlayton@kernel.org>
Date: 2024-02-07 15:40:32

On Wed, 2024-02-07 at 15:02 +0000, Trond Myklebust wrote:
On Wed, 2024-02-07 at 09:56 -0500, Jeff Layton wrote:
quoted
On Wed, 2024-02-07 at 14:21 +0000, Trond Myklebust wrote:
quoted
On Wed, 2024-02-07 at 08:34 -0500, Jeff Layton wrote:
quoted
I've started work on a patchset to add support for directory
delegations
to the Linux kernel client and server. It's still too rough to
post
at
this point, and for now, I'm just cobbling in a ioctl to drive
it.

As I started working on some of the client bits, however, I
realized
that I don't really have a clear picture as to when the client
should
request a delegation on a directory. It seems like there are a
lot of
things we could do:

One idea: request one on an initial directory readdir. So maybe
when
the
offset is 0 and we don't have a dir delegation already, do:

	PUTFH:GET_DIR_DELEGATION:READDIR

Or, maybe just do it on any readdir when we haven't requested one
in
a
little while?

We could also do one on every lookup, when we expect that the
result
will be a directory. I'm not sure if LOOKUP_DIRECTORY would be a
sufficient indicator or if we'd need the vfs to indicate that
with a
new
flag.

Would we also want to request one after a mkdir?

	PUTFH:CREATE:GET_DIR_DELEGATION:GETFH:GET_DIR_DELEGATION
:...

Assuming we can get this all working, what should drive the
client to
issues GET_DIR_DELEGATION ops?
As far as I'm concerned, the main case to be made for directory
delegations in the client is for reducing the number of
revalidations
on said directory, particularly during path lookups.
i.e. the goal is to eliminate the need to constantly poll the
directory
change attribute, and to eliminate the need to constantly
revalidate
the dentries (and negative dentries!) contained in the directory
after
a change.

Perhaps that means we should focus on adding a request for a
directory
delegation to the function nfs_lookup_revalidate() since that would
seem to indicate that we're going through the same directory
multiple
times? The other call site to consider would be
nfs_check_verifier().
Sounds good. I'm not nearly at the point where I'm modifying client
behavior yet, but I'll plan to try wiring it up in the revalidate
codepaths first.
Understood, but you appeared to be asking which COMPOUNDs to modify. I
think a discussion around the goals of introducing directory
delegations needs to inform that choice.
The goal is to improve lookup performance, and reduce the GETATTR load
on directories. What sort of userland behavior should trigger the client
to get a dir_deleg? Trying to improve repeated lookups in the same dir
does seem like the biggest initial win for this.

Plumbing one into readdir might also be reasonable. Someone doing a
readdir is probably interested in the contents. If we get a deleg first,
then that might allow the client to mark the directory "complete" once
it has read every entry.
-- 
Jeff Layton [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help