GSoC Introduction: NFSv4 client

Blog post by Paweł Dziepak on Mon, 2012-04-30 02:04

My GSoC project is to implement a Network File System version 4 client. NFS since its early versions became one of the most popular way of sharing files among Unix-like (and not only) systems. The fourth version brings many changes to the protocol that both simplify implementation and make it more efficient. That includes better support of client side caching which can significantly improve performance. In addition to that neither mountd nor NLM needs to be used anymore since services they provide are now part of the protocol.

Community Bonding Period

During the community bonding period I am going to get myself familiar with every detail of all RFC containing information on how does NFS protocol works. That includes specifications of Remote Procedure Calls (RPC) and External Data Representation (XDR) which are used by NFS as well as the specification of NFSv4 itself. I think it may be also a good idea to check how NFS clients are implemented in other operating systems in order to find some interesting solutions.

I also need to get myself familiar with the Haiku itself. Specifically, with the parts of the kernel the NFSv4 will work with. That includes, among others, file caching, notifications, network. Since disk based file systems behave in a different way than NFS there may be need to make some changes in these parts of the code, so I will have to know exactly how to do it.

Summer and later

When I am ready with all preparations and the coding starts I am going to, firstly, write NFSv4 client that just works. That will require proper implementation of RPCs and basic NFS requests. Then I will be able to start making it usable, i.e. add client side caching, notifications, support for file attributes.

After GSoC, when NFSv4 client will be ready I will want to add support for NFSv4.1 mostly because of its interesting extensions such as directory delegation, which can improve notifications support or pNFS, parallel access to a clustered server implementation.