Requesting to Review of the proposal - Improved NFS Implementation
Requesting to Review of the proposal - Improved NFS Implementation
Wed, 2 Apr 2008 16:07:38 +0530
Hi Olaf and all, My proposal is given below. I request you to review it and give suggestions on any kind of mistakes so that I can improve my proposal.
I wish to provide an improved Network Filesystem support to "the
Hurd". This implementation will be an improvement for the partly implemented NFS that exists in the Hurd already. Though the exisiting implementation supports only NFSv2 it has a few problems with it too. So the aim of this project is to improve the support for NFSv2 by
adding features not present in the current implementation and fixing the bugs that exist. It also includes adding support for NFSv3. Bug Fixing includes several things like providing full support for Hurd's
NFS to work with GNU/Linux server in all aspects. All the features necessary to make the NFSv2 implementation complete will be added. Implementing NFSv3 support includes adding all the features that are specified in NFSv3 protocol standard i.e. RFC 1813 like support for
asynchronous writes on the server, performance improvements among other things.
To begin with, I will work on the existing NFSv2 implementation on the Hurd to make it work in all the aspects. I will work on it to so that
it fully implements all the specifications provided in NFSv2 protocol standard i.e RFC 1094. I will work on improving the performance of NFSv2 and fixing bugs that exist on the server side. Since many people are interested in having the Hurd client communicate with GNU/Linux
server it is more importantly necessary to add all the features to NFSv2. This includes adding NFS Filesystem model which implements filesystem organization. This stage also includes completing the support for the Mount protocol which is employed to mount a filesystem
and create handles to access files on it. Also included are the features to handle error control and caching mechanism on the client side. All the NFS server procedures(its nearly a misnomer since server procedures are actions that a client may take on files residing on a
server) are implemented. Some of them include null, getattr, setattr, root, lookup, statfs, readdir etc which are not present in the current implementation but part of the NFS's Remote Procedure Calls(RPC).
The next stage of this project starts with implementing the core NFSv3 protocols. The most necessary specifications provided in RFC 1813 needed to for a working NFSv3 will be implemented. This mainly includes
1. Adding support for TCP as a Transport mechanism which was a major addition for NFSv3 in addition to the existing UDP 2. Support for asynchronous writes on the server, to improve write performance
3. Additional file attributes in many replies including fourth set of permission bits 4. Adding READDIRPLUS operation, to get file handles and attributes along with file names when scanning a directory
5. Adding NFSv3's new server procedures such as mknod, pathconf, commit, access 6. Improved file locking support with GNU/Linux 7. Improving Performance
Other Hurd specific functions such as adding support for
1. Changing a file's author 2. Passive translators
are also implemented.
Other features will be added to this list after studying their feasibilities and necessities.
With these features of NFS ready, the next stage of the project is
to test these implementations with the GNU/Linux servers so as to ensure that the prime goal of the project which is providing NFS support with GNU/Linux is accomplished because it is the most necessary feature. Bugs that arise during testing are fixed. Then if
time permits the features needed to run the Hurd's NFS Server are implemented.
Benefits to the Hurd
Implementing a feature complete NFS client to Hurd means that a long time requirement of easily accessing other systems from Hurd is
made easy. It means that users can now use NFS to access the files that they have stored on GNU/Linux machines on networks. They can resume their partly finished work on the Hurd, if at all they have stored it in files in other systems. So file resources can be shared.
Providing TCP support for Transport is also a huge gain to Hurd since transfers are now reliable and more secure. This also means that NFS on the Hurd can also be used over WAN.
Also this project provides developers with a basic platform to
implement NFSv4 since v4 reuses most of the parts of NFSv2 and v3.
1. Completed NFSv2 implementation with support for all the features specified in RFC . This also includes implementing all the
unimplemented RPCs. 2. A usable NFSv3 implementation with v3's additional features and RPCs. 3. NFS implementation that can use TCP as a transport mechanism and Hurd specific functionalities.
Non-code deliverables include documentation of the code of the Hurd's NFS implemented during the course of the project which explains in detail the implementation of each of the functionalities. Also includes a how-to guide for setting up NFS on the Hurd.
The project is planned to be completed in 8 major phases. Every phase includes documenting the progress during that phase, so it is not mentioned specifically at each phase. The timeline and duration of each
of these phases is given below:
1. Initial preparation and Bug fixing ( Community Bonding Period: has already started – May 25th) This phase involves gaining skills in Network protocols
implementation. Going through the existing NFSv2 code to understand its implementation and reading papers and documentations related to NFS and related protocols in general. Fixing few small bugs in the existing code to improve
performance and so on.
2. Analysis and Design I ( May 26th – June 1st ) Involves the analysis of existing code. Interacting with the mentor, the Hurd community and other people involved in
implementation of NFS on other platforms to draw the exact design of the proposed NFSv2 implementation. Preparing algorithms required for NFSv2 implementation completion.
3. Coding Phase I ( June 2nd – June 16th )
Involves fixing bugs in the existing NFSv2 implementation and coding the features that are planned in the design phase.
4. Testing Phase I ( June 17th – June 27th ) Testing the features implemented in the last phase. Requesting
community to help me in testing and reviewing. Testing with GNU/Linux servers. Incorporating all the necessary changes and fixing bugs.
5. Analysis and Design II ( June 28th – July 7th )
Analyzing the requirements for NFSv3 implementation. Interacting with the mentor, the Hurd community to draw the exact design of the proposed NFSv3 implementation. Preparing algorithms required for NFSv3 implementation.
6. Coding Phase II ( July 8th – July 31st ) Coding the features that are planned for NFSv3 in the previous phase. Since it involves coding NFSv3 features from scratch it requires more time than other stages. Adding 4th set of
permission bits will be completed before mid-term evaluation deadline.
7. Final Testing and evaluation (August 1st – August 8th ) Closely interacting with the community and requesting them to
help me in overall testing and reviewing and making changes as per their suggestions. Testing with the other systems' NFS servers too and consolidating the Documentation.
8. Packaging and Wrap-up (August 9th - August 18th ) Final phase of testing and fixing remaining bugs. Working with the community to merge the project with the CVS HEAD of Hurd. Documentation reviews, making necessary changes as per
the suggestions and wrapping up the documentation.
I am already comfortable with the bug-hurd mailing-list and IRC channel #firstname.lastname@example.org. I will be able to contact my mentor in
above two forms and will also be available through google-talk(jabber) and yahoo! chats. I am also comfortable with CVS and SVN since I was the SVN administrator for 2 academic projects.
I am a 3rd Year undergraduate student pursuing Information Science
and Engineering as a major at BMSCE, Bangalore. Have been using and advocating Free Software(FS henceforth) from past 5 years. Have been one of the main coordinators of BMSLUG. Have coordinated various events including Swatantra Tech Fest - an all day FS Fest, Session by
RMS, Hack Fest (a competition in our college). Have won few Coding Competitions since I was 13 years, the major one being a State level BASIC Programming competition at 13.
Have been actively participating in various FS Communities by
reporting bugs to communities like Ubuntu, GNOME etc and writing patches for Drupal.
Have a fair understanding of concepts of C and have nearly 3 years of programming experience in C. Have basic understanding of the Hurd
architecture and have gone through the Hurd Hacking Guide. Also have the knowledge of Networks, its architecture and most of the associated popular protocols.
Have a working installation of Debian GNU/Hurd. I don't have words
to say about it. I am out of words to describe it. Its simply amazing. I have been compiling few small programs and few translators on it.
Since I am working with few FS communities I have a good understanding of FS Development methodologies of communicating with
people, using Issue trackers like Bugzilla, Wishlists, Changelogs, coding and testing.
Lastly I want to express my deep commitment for this project and Hurd. I'm fully available this summer without any other commitments,
will tune my day/night rhythm as per my mentor's requirement and assure a dedicated work of 50 hours/week. Also I'll assure that I'll continue my commitments with Hurd well after GSoC. If you find any
part of this proposal is not clear please contact me.