NFS over QUIC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've been thinking about what might be required for NFS to run over
QUIC.

Also cc'ing Steve French in case he's thought about this for CIFS/SMB.

I don't have real plans.  For Linux, I don't even know if there's a
kernel QUIC implementation planned yet.

QUIC uses TLS so we'd probably steal some stuff from the NFS/TLS draft:

	https://datatracker.ietf.org/doc/draft-cel-nfsv4-rpc-tls/

For example, section 4.3, which explains how to authenticate on top of
an already-encrypted session, should also apply to QUIC.

QUIC runs over UDP, so I think all that would be required to negotiate
support would be to attempt a QUIC connection to port 2049.

The "Transport Layers" section in the NFS RFCs:

	https://tools.ietf.org/html/rfc5661#section-2.9

requires transports support reliable and in-order transmission, forbids
clients from retrying a request unless a connection is lost, and forbids
servers from dropping a request without closing a connection.  I'm still
vague on how those requirements interact with QUIC's connection
management and 0-RTT reconnection.

https://www.ietf.org/id/draft-ietf-quic-applicability-07.txt looks
useful, as a guide for applications running over QUIC.  It warns that
connections can time out fairly quickly.  For timely callbacks over NFS
sessions, that means we need the client to ping the server regularly.
Sounds like that's what they do for HTTP/QUIC to make server push
notifications work:

	https://tools.ietf.org/html/draft-ietf-quic-http-09#section-5

	HTTP clients are expected to use QUIC PING frames to keep
	connections open.  Servers SHOULD NOT use PING frames to keep a
	connection open.  A client SHOULD NOT use PING frames for this
	purpose unless there are responses outstanding for requests or
	server pushes.

QUIC allows multiple streams per connection--I wonder how we might use
that.  RFC 5661 justifies the requirement for an ordered transport with:

	Ordered delivery simplifies detection of transmit errors, and
	simplifies the sending of arbitrary sized requests and responses
	via the record marking protocol.

So as long as we don't try to split a single RPC among streams, I think
we're OK.  Would a stream per session slot be reasonable?  I'm not sure
what the cost of a stream is.

Do we need to add a new universal address type so the protocol can
specify QUIC endpoints when necessary?  (For server-to-server-copy, pnfs
file layouts, fs_locations, etc.)  All QUIC needs is an IP address and
maybe a port, so maybe the existing UDP/TCP addresses are enough?

--b.



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux