GSOC 2012/Student Application bluezd/nfs fscache write back cache

=Implement nfs/fscache writeback cache=

Proposal Description
Please describe your proposal in detail. Include:

An overview of your proposal

 * NFS only supports write through cache based on fscache/cachefiles,the goal is adding a new feature that implement a writeback mechanism for nfs.

The need you believe it fulfills

 * Writeback cache to speed up write intensive clients.
 * Writeback cache improve performance, because a write to the local cache is faster than to normal remote server through the network and * also reduce network loading by diverting repeat writes to local storage.
 * Writeback cachereduces the number of write operations to the remote server.

Any relevant experience you have

 * I am good at C/shell Programming and familiar with the Linux kernel/nfs.
 * I worked at redhat for almost one year and write many testcases(C && shell),I have experience working for OpenSource.
 * I am familiar with extX/NFS filesystems and know the implementation of it by reading the source code.So I am very familiar with the mechanism of cache (indoe cache,dentry cache,address_space).I also have the experiecnce of developering the kernel module.

How do you intend to implement your proposal
1) NFS:implement the front-end APIs,nfs could use the APIs to cache files on local disk through write back mechanism.     Add some necessary APIs into NFS:      * cache the "writes" locally           eg:add API into nfs_writepage,when client generate a write request,then nfs invoke the fscache API to cache the data of the file from the page cache.      * modify the locally cached file           eg:add API info NFS, when client modify a file (which is cached locally by last step),so need to provide some APIs to make client just modifyting the locally cached file instead of the original file which locates in remote server.
 * First I think I need to read the nfs,fscache and cachefiles source code and familiar with the fscache APIs,such as fscache_read_or_alloc_page,To figure out the implementation of the nfs make use of the FS-cache facilities.
 * Then investigate nfs fscache and cachefiles implementation and have a knowledge of write through.
 * Knowledge the difference between the write-through cache and write back cache,Familiar with the write back mechanism.
 * At last modify some related modules(list blow) to add some necessary APIs to implement the write back cache without breaking the NFS specific close-to-open semantics.This step is devided into some clear steps.My efforts will be separated into several tasks to complete.

2) Fs-cache:implement the back-end APIs     Modify the fs-cache module to implement the APIs which are added in NFS.

3) Cachefiles: caching the page in local disk     Also need add some functions into this module to provide a interface to fs-cache.The fscache could use this interface to cache files.

4) At last Need to add the sync mechanism to sync with original file which locate in remote server.     when client finished modifying the file,the cache will sync with the file asynchronously which locates in remote server.

Final deliverable of the proposal at the end of the period

 * Provide some new APIs to implement a writeback mechanism for nfs.

A rough timeline for your progress

 * Publish my goals to the community and try to get some feedback and suggestions on my plans. Then I will get familiar with nfs->fscachethe->cachefiles that I require for my work. (maybe until early May)
 * Discuss with the community and the mentor about the write back mechanism.(until May mid-term)
 * Implement the writeback mechanism. (Before August)
 * Finish developing and re-compile the related of nfs kernel module (nfs,fscache,cacahefiles),test it and check whether it works well by the end of August.

Any other details you feel we should consider

 * I am interested in this project,so I think I will do my best to finish it.

Have you communicated with a potential mentor? If so, who?
Yes, he is User:Bergwolf