[nfsv4] Proposed changes to draft-cel-nfsv4-rpcrdma-version-two.

David Noveck <davenoveck@gmail.com> Tue, 10 May 2016 12:57 UTC

Return-Path: <davenoveck@gmail.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C08D712D675 for <nfsv4@ietfa.amsl.com>; Tue, 10 May 2016 05:57:42 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level:
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id I5PBP7lZ-lB9 for <nfsv4@ietfa.amsl.com>; Tue, 10 May 2016 05:57:35 -0700 (PDT)
Received: from mail-oi0-x233.google.com (mail-oi0-x233.google.com [IPv6:2607:f8b0:4003:c06::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AD4C912B006 for <nfsv4@ietf.org>; Tue, 10 May 2016 05:57:35 -0700 (PDT)
Received: by mail-oi0-x233.google.com with SMTP id k142so13515319oib.1 for <nfsv4@ietf.org>; Tue, 10 May 2016 05:57:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc; bh=MaCKgzLTM08zch1pXjcgbSdzIkcZZQuVBIt2dXsg1K4=; b=bGtep4QN56wml0WzUWM9LlOsSdF59RRYVIzI8Z7DWTIXQqACQxwxB+URZ2m1VoS71/ rVfsbrjCaF3g9g4Aq0nE4TbwjCDoH1qTQlNv7revf7Gl8FLMQAvdIfVVTmtYcnpmxFFO yMjkRKsUk7g9eF1YcADlD5v33m8HdvphPoHzwxYDMlLxlPSl6z9/aSuSND49WWJh1F4t fLdzOgyE1wh9edkvW3nms9xHX73YFSQ/OR/pm0/PeJZqrdU4MdDxre0u6br/ECm+bobP 6gqiUGFk+97MRmmxydigbyYLrB8UuBZgm03/J5cUk06KmBY0Eomwd7gatsTKW3/tG/wI uWsw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to:cc; bh=MaCKgzLTM08zch1pXjcgbSdzIkcZZQuVBIt2dXsg1K4=; b=VciZ3eYLnQYV1Gv2761VYyZVyuNjKKuCKgF6RVxoHhB/iEn6KzqCq7bGSbBGzWuU8k oImn+tyxttihRzucInEofKDmhdpTq/GJqei8as2fEFaUSe4c8tEmtsAsjWwXt2hJlu5W X6dJWwiXlN+EyCeFni6IK4+qkZPZeaNx3+8vbhM7CGrutU4xEvalZvov5U0jLSmEopWw lNz3aqzI/TrlMZjrWgfbE/kkSl9XLeNhmkvLqCTRSnWoEFy9jerbbmdUtYTIosEBJxis yOV0JkjNPcfuTR8OaMet9dRgdVejJezr0qxGWLEN+5AuPAx7ApWEnW1kbiY5khv2z0UP JLQw==
X-Gm-Message-State: AOPr4FV1Zp2SKIAZmyE3T3LrgjSjQy4jOXCwryExsbxA0XPPytHNnl7ZSeO0TE8+FaZrFb5EvW7/Ec4DZb5nWQ==
MIME-Version: 1.0
X-Received: by 10.202.212.196 with SMTP id l187mr17642914oig.191.1462885054945; Tue, 10 May 2016 05:57:34 -0700 (PDT)
Received: by 10.182.29.170 with HTTP; Tue, 10 May 2016 05:57:34 -0700 (PDT)
Date: Tue, 10 May 2016 08:57:34 -0400
Message-ID: <CADaq8jfst1vuBeM=PL0nErngk2jktKb2dimqWhOmn2Jow9zGbw@mail.gmail.com>
From: David Noveck <davenoveck@gmail.com>
To: Chuck Lever <chuck.lever@oracle.com>
Content-Type: multipart/alternative; boundary="001a113ad7ea0c23a505327c7864"
Archived-At: <http://mailarchive.ietf.org/arch/msg/nfsv4/Tro0uc_pl8_c1s3c6h9pgIu5MCw>
Cc: "nfsv4@ietf.org" <nfsv4@ietf.org>
Subject: [nfsv4] Proposed changes to draft-cel-nfsv4-rpcrdma-version-two.
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 10 May 2016 12:57:43 -0000

On April 20, when I sent the message *credit-related issues in
draft-ietf-nfsv4-{rfc5666bis,rfc5666-implementation-experience,rpcrdma-bidirection}*,
I indicated that there would be corresponding Version Two changes.  Even
though some of these changes are, in some sense, motivated by
considerations related to bidirectional operation, I think we can discuss
these without waiting for the WGLC of *draft-ietf-nfsv4-rpcrdma-bidirection*
to complete.

This mail includes those credit-related changes and proposals for a bunch
of others that I think are needed, based on my work on
*draft-dnoveck-rpcrdma-xcharext
*and *draft-dnoveck-rpcrdma-rtrissues.*

In any case, there isn't a big rush and there would not be a problem
waiting until late May, if you are busy with wrapping up Version One.  My
main concern is that we get an up-to-date Version Two out in time for the
draft cutoff for Berlin, on July 8.  Since I am hoping to be making
corresponding changes in *draft-dnoveck-nfsv4-rpcrdma-xcharext* and the
forthcoming *draft-dnoveck-nfsv4-rpcrdma-rtrext*, I'd hope we can get
agreement on the substance of the current round of Version Two changes by
the end of June.

So far it looks like all of the necessary changes would go into *3.2.
Documentation Requirements*.

*Credit field ambiguity*

To address the fact that, in the context of extensions, it needs to be
clear whether the credit field is a request or a grant, I propose that we
add a new bullet reading as follows:

For each new opttype code, it must be made clear how it is to be determined
whether the existing credit field in the header is to be interpreted as a
request or as a grant.   This can include specifying that, for particular
codes, the field is to be interpreted as one or the other, that particular
fields in the header definition are to direct the interpretation, or that
fields in the associated RPC Payload Stream are to direct the
interpretation.  In some cases, there may be no valid interpretation and
the credit field is to be ignored.  In other cases, the credit field is to
be interpreted either as a request or a grant and the complementary
information is defined as available elsewhere.


*After the header*

In the context of many desirable features (e.g. message continuation,
send-based DDP), the existing fourth bullet is too restrictive.  I propose
the following replacement:

For each new opttype code, it must be made clear whether an RPC
Payload Stream or a part thereof follows the Transport Header Stream.
It must be made clear whether any material in addition to the
transport header is allowed and how such material is to be processed.
In cases in which a partial RPC Payload stream is allowed, it needs to
be clearly specified how such partial Payload Streams are to be
assembled into a complete Payload Stream.  Also, when the Payload
Stream portion begins at any point other than the byte immediately
following the end of the Transport Header, it needs to be stated how
the start of the Payload Stream portion is to be found, using the
information in the optional header.

This bullet could be broken up using <vspace> if you like.

That's my preference but I realize that some people aren't comfortable with
that.

*XDR Model*

The current last paragraph of the section seems to be more appropriate to
the extension model originally proposed for Version One, than it is to the
extension model that is actually described in the current Version Two
draft. In the current model, we have a situation like that for pNFS, in
which a nominally opaque protocol field is overlaid by an XDR description
of that opaque field's contents. As a result, the XDR is not extended as it
is in NFSv4.x, by making previously invalid messages valid and providing an
XDR description of the newly valid messages. Instead the interpretation of
a message which was previously valid according to the existing XDR is
refined by the addition of the new overlay.

I propose some rewrites below, in order to bring the treatment in line with
the current extension model in the document.

I propose replacing the current first paragraph by the following:

RPC-over-RDMA Version Two may be extended by defining a new
rdma_opttype value and providing an XDR description of the
corresponding rdma_optinfo content.  When this is done, the XDR
description provided overlays, for that rdma_opttype value, the
nominally opaque field rdma_optinfo.  As a result a new header type is
effectively created.

I propose replacing the current last paragraph by the following:

Implementers will generally combine the XDR descriptions of the new
features they intend to use with the XDR description of the base
protocol, extracted from this document.  This may be necessary to
create a valid XDR input file because:


   - Extension definitions are free to use types (e.g. chunk
definitions) defined in the base protocol.
   - Later extensions may use types defined by earlier extensions on
which they depend.

Because RPC-over-RDMA is not an RPC program and because we will often
have two definitions of the same field (i.e. opaque and non-opaque
versions of rdma_optinfo), the way in which XDR tools are normally
used will not be available to those using the XDR definition.  For
example, the base XDR definition may be used to parse the base
transport definition while the extension definition may be used
provide a more complete interpretation of what would otherwise be
treated as opaque data. It may be that either, both, or neither of the
levels would use XDR-generated code.

In any case, the combination of the XDR description for the
RPC-over-RDMA Version Two protocol combined with that for any selected
extensions will provide an adequate human-readable description of the
extended protocol.


*Feature Structure*

As explained in *draft-dnoveck-nfsv4-rpcrdma-rtrissues-00*, there are some
important synergies between message continuation and send-based DDP, making
it desirable to describe both together while allowing implementation to
independently choose whether to implement each particular feature. I'm not
sure if this was the intention, but it seems like the current document is
written assuming a one feature-per-extension model. It seems that one
feature-per-document is too restrictive in general,

I'm not sure whether this adds clarity or not but it appears to me that the
way the word "feature" is used in this part of the document matches the
concept of "feature set" in *draft-ietf-nfsv4-versioning*., which is the
unit of XDR extension there. I don't propose, however, to change the
terminology. Still, I think that this use of "feature" conflicts with the
colloquial use of that word and things need to be made clearer. BTW,
although there are thirteen uses of the word "feature" in the document, I
am going to leave the terminology alone for the most part and use
"facility" for the more colloquial use of "feature" in this context. YMMV.

In any case, I propose replacing the existing second paragraph with the
following:

A set of such new protocol elements may be introduced by a Standards
Track document and so be together considered an OPTIONAL feature in
that each implementation can be presumed to be either aware of all the
protocol elements introduced by that feature or be aware of none of
them.

Despite this requirement, particular features may introduce a set of
facilities, often colloquially referred to as "features," without
requiring that each implementation provide support for either all or
none of these. In such cases, it needs to be made clear how the peer
implementations determine a common set of facilities supported and
interoperate properly when different sets of facilities are supported
by the communicating implementations.

Nfsv4 Working Group and IESG review, together with appropriate testing
of prototype implementations, should ensure continued interoperation
with existing implementations.  Similar review and testing should
ensure interoperation of those implementing the new feature.  In cases
in which it is possible that not all implementations implement the
same set of facilities, those same practices should ensure the correct
interoperation of implementations supporting different subsets of
available facilities.

I also propose replacing the existing last bullet by the following two
bullets:

   - description of interactions with existing extensions (e.g., requirements
   that another OPTIONAL feature needs to be present for newly added
   features to work).
   - description of interactions with facilities introduced by other
   extensions (e.g. requirements that a particular level of support be
   provided for some particular facility in the new extension to work).