Hi folks,

I just committed a very simple implementation of asynchronous TClunk to inferno-npe. The implementation will only defer sending clunks when MCACHE is specified on the mount (via the new -j option to Inferno's mount, analogous to Plan 9's mount -C) and when the file is not marked ORCLOSE. The implementation is very simple -- I queue the RPCs devmnt would issue synchronously and send them from a single kproc, one-after-another. There is no attempt to overlap the TClunks. There is no logic to handle flushing a deferred clunks on an unmount yet. The diff is not as clean as I would like, but it works.

I connected from an inferno-npe client to an inferno-os server, sharing the Plan9 source tree from August 16th and measured the time required for fcp -R 16 -W 16 to get the sources to /plan9/sys/src/cmd/cwfs and to get /plan9/sys/src/9.  The server is approximately 15ms away from the client; both are running Linux.

For the cwfs sources, it takes me an average of 5.68sec (stdev 0.57s, 6 tests) issuing synchronous clunks (the default) and an average of 4.54sec (stdev 0.31s, 6 tests) issuing asynchronous clunks.

For the 9 kernel sources, it took about 51s with synchronous clunks, about 41s with asynchronous clunks on. I only did 3 tries with the 9 sources.

Thought this might be interesting...
-- vs