On Thu, 2023-08-31 at 11:17 -0400, Benjamin Coddington wrote: > On 30 Aug 2023, at 17:14, Jeff Layton wrote: > > > On Wed, 2023-08-30 at 20:20 +0000, Trond Myklebust wrote: > > > On Wed, 2023-08-30 at 16:10 -0400, Jeff Layton wrote: > > > > On Wed, 2023-08-30 at 15:42 -0400, Benjamin Coddington wrote: > > > > > Again we have claimed regressions for walking a directory tree, > > > > > this time > > > > > with the "find" utility which always tries to optimize away asking > > > > > for any > > > > > attributes until it has a complete list of entries. This behavior > > > > > makes > > > > > the readdir plus heuristic do the wrong thing, which causes a storm > > > > > of > > > > > GETATTRs to determine each entry's type in order to continue the > > > > > walk. > > > > > > > > > > For v4 add the type attribute to each READDIR request to include it > > > > > no > > > > > matter the heuristic. This allows a simple `find` command to > > > > > proceed > > > > > quickly through a directory tree. > > > > > > > > > > > > > The important bit here is that with v4, we can fill out d_type even > > > > when > > > > "plus" is false, at little cost. The downside is that non-plus > > > > READDIR > > > > replies will now be a bit larger on the wire. I think it's a > > > > worthwhile > > > > tradeoff though. > > > > > > The reason why we never did it before is that for many servers, it > > > forces them to go to the inode in order to retrieve the information. > > > > > > IOW: You might as well just do readdirplus. > > > > > > > That makes total sense, given how this code has evolved. > > > > FWIW, the Linux NFS server already calls vfs_getattr for every dentry in > > a v4 READDIR reply regardless of what the client requests. It has to in > > order to detect junctions, so we're bringing in the inode no matter > > what. Fetching the type is trivial, so I don't see this as costing > > anything extra there. > > > > Mileage could vary on other servers with more synthetic filesystems, but > > one would hope that most of them can also return the type cheaply. > > It occurred to me that we could let those other server folks ask for > whatever attributes they wanted if we make it tunable at runtime: > > https://lore.kernel.org/linux-nfs/8f752f70daf73016e20c49508f825e8c2c94f5e7.1693494824.git.bcodding@xxxxxxxxxx/T/#u > That's a possibility, but I probably wouldn't add tunables for this until the need was more clear. -- Jeff Layton <jlayton@xxxxxxxxxx>