diff options
Diffstat (limited to 'fs/nfs/README')
-rw-r--r-- | fs/nfs/README | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/fs/nfs/README b/fs/nfs/README deleted file mode 100644 index f87cb3629..000000000 --- a/fs/nfs/README +++ /dev/null @@ -1,114 +0,0 @@ - - - This is an NFS client for Linux that supports async RPC calls for - read-ahead (and hopefully soon, write-back) on regular files. - - The implementation uses a straightforward nfsiod scheme. After - trying out a number of different concepts, I finally got back to - this concept, because everything else either didn't work or gave me - headaches. It's not flashy, but it works without hacking into any - other regions of the kernel. - - - HOW TO USE - - This stuff compiles as a loadable module (I developed it on 1.3.77). - Simply type mkmodule, and insmod nfs.o. This will start four nfsiod's - at the same time (which will show up under the pseudonym of insmod in - ps-style listings). - - Alternatively, you can put it right into the kernel: remove everything - from fs/nfs, move the Makefile and all *.c to this directory, and - copy all *.h files to include/linux. - - After mounting, you should be able to watch (with tcpdump) several - RPC READ calls being placed simultaneously. - - - HOW IT WORKS - - When a process reads from a file on an NFS volume, the following - happens: - - * nfs_file_read sets file->f_reada if more than 1K is - read at once. It then calls generic_file_read. - - * generic_file_read requests one ore more pages via - nfs_readpage. - - * nfs_readpage allocates a request slot with an nfsiod - daemon, fills in the READ request, sends out the - RPC call, kicks the daemon, and returns. - If there's no free biod, nfs_readpage places the - call directly, waiting for the reply (sync readpage). - - * nfsiod calls nfs_rpc_doio to collect the reply. If the - call was successful, it sets page->uptodate and - wakes up all processes waiting on page->wait; - - This is the rough outline only. There are a few things to note: - - * Async RPC will not be tried when server->rsize < PAGE_SIZE. - - * When an error occurs, nfsiod has no way of returning - the error code to the user process. Therefore, it flags - page->error and wakes up all processes waiting on that - page (they usually do so from within generic_readpage). - - generic_readpage finds that the page is still not - uptodate, and calls nfs_readpage again. This time around, - nfs_readpage notices that page->error is set and - unconditionally does a synchronous RPC call. - - This area needs a lot of improvement, since read errors - are not that uncommon (e.g. we have to retransmit calls - if the fsuid is different from the ruid in order to - cope with root squashing and stuff like this). - - Retransmits with fsuid/ruid change should be handled by - nfsiod, but this doesn't come easily (a more general nfs_call - routine that does all this may be useful...) - - * To save some time on readaheads, we save one data copy - by frobbing the page into the iovec passed to the - RPC code so that the networking layer copies the - data into the page directly. - - This needs to be adjustable (different authentication - flavors; AUTH_NULL versus AUTH_SHORT verifiers). - - * Currently, a fixed number of nfsiod's is spawned from - within init_nfs_fs. This is problematic when running - as a loadable module, because this will keep insmod's - memory allocated. As a side-effect, you will see the - nfsiod processes listed as several insmod's when doing - a `ps.' - - * This NFS client implements server congestion control via - Van Jacobson slow start as implemented in 44BSD. I haven't - checked how well this behaves, but since Rick Macklem did - it this way, it should be okay :-) - - - WISH LIST - - After giving this thing some testing, I'd like to add some more - features: - - * Some sort of async write handling. True write-back doesn't - work with the current kernel (I think), because invalidate_pages - kills all pages, regardless of whether they're dirty or not. - Besides, this may require special bdflush treatment because - write caching on clients is really hairy. - - Alternatively, a write-through scheme might be useful where - the client enqueues the request, but leaves collecting the - results to nfsiod. Again, we need a way to pass RPC errors - back to the application. - - * Support for different authentication flavors. - - * /proc/net/nfsclnt (for nfsstat, etc.). - -March 29, 1996 -Olaf Kirch <okir@monad.swb.de> |