[ Home | Blog home | RSS 2.0 | ATOM 1.0 ]
The last few months I've been working on support for NFS in GVFS, using libnfs. This will finally allow GNOME users to mount NFS shares as easily as Windows (SMB) shares can be mounted, no root access required.
The backend is written to use the asynchronous API of libnfs which allows for multiple outstanding requests to be in flight. Although it is not yet implemented, this will allow GVFS to achieve line rate throughput for copy operations whereas at the moment, it gets about 70% of the potential throughput due to latency and other overheads.
Unfortunately, while some methods like
truncate are simple
because they map directly to the libnfs API, using the asynchronous API does
make the methods which require multiple operations rather complicated.
Enumerate is a good example of this since fetching all the data
requires for each entry:
statcall if the item is a symbolic link,
accessto query if the item is readable, writable or executable.
Currently, these operations are all done sequentially but in the future these can be done in parallel to speed up enumeration.
This effort has resulted in a few improvements to libnfs as well:
access2to get the status of R_OK, W_OK and X_OK all at once.
lutimes, etc, which work on symbolic links rather than what they point to.
statand directory listing calls.
Any opinions expressed here are my own and do not in any way reflect the opinions of my employer, or anyone else.
Made with Pyblosxom