Otherwise, yeah, you incur network latency on every file, plus, as you say, symlink "pings" if those are present. So its "dir walk"+"number of files"*"ping"+"symlinks"*"ping", which adds up.
Batching high-latency ops is one of the only cases where I like async.
I wrote a tool that issues raw READDIRPLUS requests to list a directory:
I haven't yet instrumented memory bandwidth on my amd machines, but it feels like I'm at the limit.
Metadata is more complicated to model, need realistic directory structures etc.
https://www.spec.org/sfs2014/ (2020 version) is a good test of a metadata-heavy workloads, but isn't open source like fio :(.
I wrote a suite of tools that does all this and dumps the NFS transactions as JSON, maybe it can be useful: