ChucksProjects
From Linux NFS
(Difference between revisions)
		
		
Chucklever  (Talk | contribs)  (Add new section on alternate transport implementations)  | 
		Chucklever  (Talk | contribs)   (→Alternate socket-based transport implementations)  | 
		||
| Line 32: | Line 32: | ||
== Alternate socket-based transport implementations ==  | == Alternate socket-based transport implementations ==  | ||
| - | * Two sockets per rpc_clnt (one for sync, one for async requests)  | + | * One UDP socket per client  | 
| - | * One socket per client CPU  | + | * Two TCP sockets per rpc_clnt (one for sync, one for async requests)  | 
| - | * One socket per server, shared by mount points (that's probably an NFS client change, not a transport change)  | + | * One TCP socket per client CPU  | 
| - | * DMA-engine transport  | + | * One TCP socket per server, shared by mount points (that's probably an NFS client change, not a transport change)  | 
| - | * SCTP-based transport (server-side switch needed for that)  | + | * DMA-engine based TCP socket transport  | 
| + | * SCTP-based transport (server-side switch and NFS on SCTP spec needed for that)  | ||
== Rebuild the NFS server and client XDR layer from the ground up ==  | == Rebuild the NFS server and client XDR layer from the ground up ==  | ||
Revision as of 17:42, 15 October 2007
Stuff I'm playing with, thinking about, or watching admiringly...
Mount
Testing and documentation
- Add real unit testing
 - Construct a set of specifications for mount behavior
 - Rewrite nfs(5)
 - Test "-o remount" -- handled by /usr/sbin/mount instead of /sbin/mount.nfs?
 
UI clean up
-  Make error reporting more useful
- Some error messages are too specific ("RPC Error: RPC program not available" is meaningless to most users)
 - Some error messages are too general ("mount.nfs: mount failed" doesn't explain how to rectify the problem)
 
 - Complete internationalization
 
New features
- Implement support for IPv6
 - Implement support for server failover options
 - Add scalable mounting (more efficient use of network resources; mountd connection caching)
 - Properly implement break-back retries
 
NFS support for IPv6 networking
- Get the delegation / NLM stuff working
 - Rewrite the referral logic in user-space (DNS resolution can be needed to handle an NFSv4 referral)
 - Review svcauth_unix stuff to remove open-coded IPv4 address dependencies
 - Track where we are with user-space tools and libraries
 - Existing NFS IPv6 code for the client
 
Alternate socket-based transport implementations
- One UDP socket per client
 - Two TCP sockets per rpc_clnt (one for sync, one for async requests)
 - One TCP socket per client CPU
 - One TCP socket per server, shared by mount points (that's probably an NFS client change, not a transport change)
 - DMA-engine based TCP socket transport
 - SCTP-based transport (server-side switch and NFS on SCTP spec needed for that)
 
Rebuild the NFS server and client XDR layer from the ground up
- More complete type checking and error reporting
 - Each function called with a simplified virtual API
 - All functions re-entrant so we can remove the BKL
 
Eliminate BKL from NFS client
- Remove BKL dependency from attribute cache
 - Remove BKL usage from XDR layer
 - Remove BKL usage from RPC client and GSS
 - Eliminate BKL in NFS client proper
 
From OmniOutliner
-  Bruce found that the BKL is held while calling normal XDR encoding and decoding functions
- Why did I miss the existence BKL around XDR encoding?
 - Generic xdr.c: look for anything caching an xdr_buf, especially during decode
 -  Still need an audit of NFSv4 XDR
- Copying state ids
 - Migration - file handles can change
 - Theoretically the client ID is in danger as well
 
 
 - Trond has RCU'd lots of stuff shared with NFSv4 XDR
 - and also the RPC auth cache
 - Radix trees are now RCU -- so write path locking might be relaxed
 
NFS client build testing
- Builds kernel with "allmodconfig" and "allyesconfig"
 - Automated - no user intervention once started
 - Tests all patches in a series
 - Later add more static analysis for each patch
 - Need to add post-analysis tool that compares the build logs
 - Need to eliminate as many spurious warnings generated by the tool chain as possible
 
Advanced file sync tool
- multi-purpose generic file system syncer - a file synchronization tool that runs on most Unix-flavored operating systems
 - one-way or bidirectional data synchronization
 - syncs file changes periodically or continuously
 - supports disconnected operation (later playback of changes)
 - can use advanced file system features to improve efficiency
 - the basic idea is to use an inotify-like mechanism to make the detection of file and directory modification more efficient
 
Unifying storage management on Linux
- A easy-to-use graphical tool that can manage storage devices and pools, and file systems
 - Includes a wizard (like Roxio or Toast) that can start different applications depending on what is to be accomplished
 - Make it easy to create, manage, and back up very large data storage pools
 - Make it easy to export and secure data
 - Provide a framework for thinking about and documenting data management
 
Linux De-duplication appliance
- Provide high capacity near-line storage for inexpensive disk-based backup
 - Based on content-addressable storage on top of RAID 6
 - Looks like one or more very large OSD LUNs or a very large NFS server
 
NFS client performance tools
- Replace jiffies-based timestamps with ktime in the RPC client for more precise latency measurement
 - Consider adding existing Python utilities to nfs-utils
 - Update vmstat and iostat tools to provide statistics about NFS mount points
 - Construct new tools that provide fine-grained data about NFS mount points