Re: NFS client latencies

Trond Myklebust
2005-03-30T14:11:29Z

on den 30.03.2005 Klokka 10:02 (+0200) skreiv Ingo Molnar:

> the comment suggests that this is optimized for append writes (which is
> quite common, but by far not the only write workload) - but the
> worst-case behavior of this code is very bad. How about disabling this
> sorting altogether and benchmarking the result? Maybe it would get
> comparable coalescing (higher levels do coalesce after all), but wastly
> improved CPU utilization on the client side. (Note that the server
> itself will do sorting of any write IO anyway, if this is to hit any
> persistent storage - and if not then sorting so agressively on the
> client side makes little sense.)

No. Coalescing on the client makes tons of sense. The overhead of
sending 8 RPC requests for 4k writes instead of sending 1 RPC request
for a single 32k write is huge: among other things, you end up tying up
8 RPC slots on the client + 8 nfsd threads on the server instead of just
one of each.
You also end up allocating 8 times a much memory for supporting
structures such as rpc_tasks. That sucks when you're in a low memory
situation and are trying to push dirty pages to the server as fast as
possible...

What we can do instead is to do the same thing that the VM does: use a
radix tree with tags to do the sorting of the nfs_pages when we're
actually building up the list of dirty pages to send.
We already have the radix tree to do that, all we need to do is add the
tags and modify the scanning function to use them.

Cheers,
Trond

--
Trond Myklebust <trond.myklebust@fys.uio.no>