Linux NFS client prioritized to-do list

This document outlines work in-progress and remaining work on the Linux kernel's NFS client. Related work on user-level tools and libraries and automounter support may be described in other documents.

Several tables below describe specific tasks we'd like to accomplish for the Linux NFS client. All tasks in one table are of the same priority (H, M, L), and are ordered within each table roughly by their priority relative to other tasks in the same table. Each task includes a description, an estimate of resources required (in developer months), and a list of interested parties. A set of test plans for each task will be provided later.

In addition, a number of tasks are captured under "unscheduled." These are controversial or low-priority issues that may or may not be promoted onto the of scheduled work. A table of "ongoing" tasks tracks housekeeping issues.

Finally, we include sections that describe medium-term issues and long term projects. Medium-term issues are tasks that may require more extensive changes or changes that involve several other parts of the kernel. These projects were originally targeted for the next development branch. Long term projects are important areas of work that are not ready to broken into specific tasks.

High priority tasks

No. Description Lead developer Resource estimate Interested parties
1 What to do about iput()/dput()/nfs_put_open_context() from within an rpciod callback? iput() can sleep, so we can't call this in an rpciod context.
  • Resolve all umount hangs and "intr" malfunctions
trondmy 2 developer-month
2 test-month
All - NFS client stability risk
2 Generic correctness issues
  • code inspection for security issues
  • correctness issues with 64-bit architectures
trondmy
cel
3 developer-months
6 test-months
All interested in generic NFS client robustness
3 NFSv4 client-side delegation support
  • finish adding caching improvements (lock caching)
  • need to add RPCSEC_GSS support for the callback channel
trondmy
bfields
1 developer-month
1 test-month
All interested in NFSv4 client feature-completeness
4 Client-side ACL support
  • finish testing basic NFSv4 implementation
  • test basic NFSv2/3 ACL implementation from A. Gruenbacher
  • rework to use user-space library
  • add ACL caching
ngallahe 3 developer-months
1 test-month
All interested in NFS ACL support, all versions
5 Build suites of NFS client test software
  • Basic suite of check-in tests
  • Other suites for long-running tests, like TPC-C and POSIX conformance
  • Client scalability tests
Bull Open Source 1 developer-month
6 test-months
All interested in generic NFS client performance, scalability, and robustness
6 Support for NFSv4 named attributes trondmy
bfields
3 developer-month
1 test-month
All interested in NFSv4 client feature-completeness
7 Real-time NFS and RPC metrics
  • Wait for named attribute implementation to mature
  • Re-write patches to fit reporting model
  • Identify developer to provide support in iostat and sar
cel 2 developer-months
2 test-months
All interested in generic NFS client performance and scalability
8 NFS O_DIRECT enhancements
  • dispatch multiple NFS READ operations in parallel
  • aio with O_DIRECT files
cel 2 developer-month
2 test-month
All interested in O_DIRECT performance and scalability

Medium priority tasks

No. Description Lead developer Resource estimate Interested parties
1 Client support for crossing NFSv4 mount points (also NFSv3 nohide) trondmy 1 test-months All interested in next two items
2 Support for crossing mount points with different security flavors
  • Support for NFS4ERR_WRONGSEC
  • Support for NFSv4 SECINFO operation
trondmy 1 developer-month
2 test-months
All interested in support for servers exporting multiple security flavors
3 Client support for migration and replication
  • Support for NFS4ERR_MOVED
  • Support the fs_locations attribute
  • Support for NFS4ERR_FHEXPIRED (volatile file handle expiration)
trondmy 3 developer-months
1 test-month
All interested in support for servers that support migration and replication. NFSv4 "referrals" are useful for building AFS-style namespaces.
4 NFSv4 Idmapper and gssd improvements
  • scalability
  • more flexible ID mapping
unassigned 3 developer-months
1 test-month
All interested in NFSv4 client configurability, performance, and scalability
5 Miscellaneous RPCGSS items
  • support for RPCSEC_GSS privacy
  • support for RPCGSS with NFSv2 and v3
  • testing with Active Directory KDC
  • cross-realm authentication (remote user ACLs)
  • testing with NIS and LDAP
  • support for Kerberos V with AES and 3DES
bfields 1 developer-month 4 test-months All interested in NFS client security feature completeness
6 Integrate keyring support into NFS client
  • Keyring support developed outside NFS development group
trondmy / kwc 1 developer-months
1 test-months
All interested in NFS client ease-of-use (security)
7 Support for SPKM3/lipkey (user and kernel)
  • SPKM3 kernel work done; lipkey still in progress
  • SPKM3 user-level still in progress; lipkey not yet started
kwc 2 developer-months
2 test-month
All interested in NFSv4 client feature-completeness, and in support for SPKM3
8 RPC client transport switch
  • integrated support for delegation callbacks and NFSv4.1 sessions
  • support for RDMA, IPv6, SCTP, TOE, IPsec
  • mount command and ABI changes
  • better RPC client management of mount option defaults
  • dynamic transport module loading
cel 4 developer-months
1 test-month
All interested in IPv6, NFS/RDMA, and other advanced features
9 Support thousands of concurrent mounts per client
  • RPC transport socket sharing
  • More anonymous major and minor numbers
trondmy 1 developer-month
1 test-month
All interested in generic NFS client performance and scalability
10 NFSv4 state recovery after network partition trondmy 1 test-month All interested in NFSv4 stability

Low priority tasks

No. Description Lead developer Resource estimate Interested parties
1 Support for IPv6 Groupe Bull 2 developer-months
3 test-months
All interested in generic support for NFS over IPv6
2 Fine-grained SMP locking
  • Replace wait queues and spin locks in the RPC client scheduler with work queues
  • Study RPC client CPU cache utilization; cache line bouncing; Memory utilization (space and bandwidth)
  • Remove global kernel lock; BKL is held during data copies, effectively serializing them
  • NFS client may have stronger dependencies on BKL than RPC client
  • RPC lock contention on existing spin locks and locks that disable IRQs
  • Enable kernel pre-emption everywhere and make sure NFS client remains robust
trondmy 6 developer-months
3 test-months
All interested in generic NFS client performance and scalability
3 Integrate cachefs for Linux NFS client
  • Resolve inode cache aliasing
  • Cachefs developed outside NFS development group
trondmy
dhowells
3 developer-months
1 test-month
All interested in generic NFS client scalability
4 Separate submount program for NFS
  • Something like /sbin/mount_nfs and /sbin/mount_nfs4 that the real mount command would pass NFS mount requests to.
  • Could make it easier for adding new NFS-related fs types like nfsr (RDMA) or rpc_pipefs.
  • nfsmount.c is a mess anyway, and should be rewritten.
  • Sun now has Connectathon automounter tests for Linux. Also need mount command acceptance and regression tests.
  • Support for nfs2 and nfs3 file system types.
unassigned 3 developer-months
2 test-months
All interested in NFS client code maintainability
5 READDIR caching improvements
  • fix or remove pre-emption points in cache search
  • more efficient storage and management of READDIR/PLUS results
  • more effective use of dentry cache
  • eliminate O(N!) gendents(3) calls
  • support for READDIR operations larger than a single page
  • negative lookup caching
  • improved NFSv4 READDIR efficiency (READDIRPLUS-like support)
trondmy
cel
3 developer-month
1 test-month
All interested in NFSv4 client performance and scalability
6 XDR cleanups, v2/v3 trondmy 2 developer-month
1 test-month
All interested in generic NFS client performance and scalability, and code maintainability
7 Support for NFS/RDMA mts 2 developer-months
1 test-month
All interested in generic NFS client performance and scalability
8 Support for NFSv4.1 sessions mts 2 developer-months
1 test-month
All interested in NFS/RDMA, or in improved DRC behavior
9 Support for large (1024KB) NFS READ and WRITE operations cel 1 developer-month
1 test-month
All interested in generic NFS client performance and scalability
10 BSD credentials trondmy 2 developer-months
3 test-months
All interested in NFS client ease-of-use (security)
11 Dynamic execution study of RPC client and GSS
  • performance issues with 64-bit architectures
  • memory and CPU cache efficiency
  • performance characterization of security flavors
  • efficiency of soft IRQ mechanism
  • study of NIC hardware and driver implementations
cel 6 developer-months
3 test-months
All interested in generic NFS client performance, scalability, and robustness
12 2.6 VFS readahead algorithm analysis and improvements
  • Completely new read ahead algorithm in 2.6 VFS
  • Develop a test plan for determining how NFS-friendly the new algorithm is
  • Work with VFS maintainers and distributors to create an ongoing testing effort that ensures read ahead behavior improves monotonically
  • Per-file system pluggable read ahead algorithms?
cel
linuxram
2 developer-months
3 test-months
All interested in NFS client performance, especially over WAN

Ongoing tasks

No. Description Lead developer Resource estimate Interested parties
1 Maintaining the Linux NFS FAQ cel 1 developer-month per year
2 Performance characterization and regression testing unassigned 24 test-months per year All interested in generic NFS client stability

Unscheduled tasks

No. Description Lead developer Resource estimate Interested parties
1 Support for "llock" mount option cel 1 developer-month
1 test-month
All interested in generic NFS client performance and scalability
2 Support for "noacl" mount option (disabling ACCESS operations) cel 1 developer-month
1 test-month
All interested in generic NFS client performance and scalability
3 Coalesce synchronous writes (allow synchronous writes larger than a page) cel 1 developer-month
1 test-month
All interested in generic NFS client performance and scalability
4 In-kernel client-side NSM okir 2 developer-month
1 test-month
All interested in NFSv2/3 stability and ease of use
5 Improve behavior of NFS over UDP trondmy 1 developer-month
2 test-months
All interested in NFSv2/3 client performance, scalability, and robustness
6 Deploy a bug tracking database for NFS developers trondmy 1 developer-month
1 test-months
All interested in code maintenance
7 Servicability enhancements
  • Improving trace messages
  • Improving error messages
steved 2 developer-month
2 test-months
All interested in ease-of-use
8 Multi-path I/O and high availability
  • Figure out what multi-path means for NFS
  • Identify H/A requirements
  • Robust implementation of NFSv4 migration and replication
unassigned 3 developer-months
6 test-months
All interested in NFS client availability
9 Support NFS aio
  • identify test suites and do performance characterizations
cel 2 developer-months
2 test-months
All interested in using aio

Long-term projects

In this section we capture projects whose scope is broad enough that we don't yet have clearly specifiable tasks that can be laid out in a roadmap.

Linux NFS client quality assurance

The Bull Open Source group has begun assembling a list of NFSv4 tests. Much of the Linux NFSv4 implementation shares code with the version 2 and 3 support, so these tests will exercise and improve all versions of the NFS code in many cases.

However, there are still some things missing.

The open source community has a tradition of managing testing requirements differently than more product-oriented development agencies. Naturally we must be sensitive to the traditions and attitudes of the community as we introduce a greater level of rigorousness to software testing.

Improving customer support

In the following section, I refer to "customers" although this is an ill-defined term in the open source community. Customer support continues to be an issue not just for Linux distributors, but also for the open source community in general, and for commercial interests.

Linux NFS client customer support issues are changing in nature. As the Linux NFS client improves, there are many more customers who find that the NFS client "just works" when it is deployed in their environment. Basic implementation and interoperability issues have, for the most part, been resolved. On the other hand, the client is now stable enough to deploy in more sophisticated environments under considerably heavier workloads. Customer problem events are becoming fewer but each takes longer to resolve.

Here are the issues:

Future protocol issues

There are several new directions for NFS version 4. Generally, advanced development on Linux NFS is funded by specific parties, rather than provided via traditional open source mechanisms. It is difficult to integrate some of these features into the Linux NFS client long before they are available in other implementations.

NFS is being used more and more in cluster environments. There are a number of questions we have about how NFS will fit in with the increasing number of cluster file system solutions. First, what cluster semantics are desirable in NFS that it doesn't have? How can we improve on the traditional NFS client cache coherency model to meet the needs of clusters? How will pNFS fit in? What are the transport protocol implications for thousands of client nodes on a single LAN? What are the GRID's requirements -- security, WAN performance, etc? How well does NFS work on a large NUMA SMP client?

Advanced Transports

The networking world is certainly not standing still. Let's start considering some of these new transports and how we can integrate them into the NFS client. We also need to track user requirements for these new features and facilities.

Database on Linux NFS

There are several specific areas where we can improve the Linux NFS client for use with large-scale and clustered database applications. This effort is already ongoing, but includes:

Many of these items already appear above in our task list, but it is important to understand why they are there.


Last modified: Fri Mar 11 11:55:50 EDT 2005