<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-files-10" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Uncacheable File">Adding an Uncacheable File Data Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-10"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 56?>

<t>Network File System version 4.2 (NFSv4.2) clients commonly perform
client-side caching of file data in order to improve performance.
On some systems, applications may influence client data caching
behavior, but there is no standardized mechanism for a server or
administrator to indicate that particular file data should not be
cached by clients for reasons of performance or correctness. This
document introduces a new file data caching attribute for NFSv4.2.
Files marked with this attribute are intended to be accessed with
client-side caching of file data suppressed, in order to support
workloads that require predictable data visibility. This document
extends NFSv4.2.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 70?>

<t>Discussion of this draft takes place
on the NFSv4 working group mailing list (nfsv4@ietf.org),
which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=nfsv4"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-nfsv4/uncacheable-files"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 81?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Clients of remote filesystems commonly perform client-side caching
of file data in order to improve performance.  Such caching may
include retaining data read from the server to satisfy subsequent
READ requests, as well as retaining data written by applications
in order to delay or combine WRITE requests before transmitting
them to the server.  While these techniques are effective for many
workloads, they may be unsuitable for workloads that require
predictable data visibility or involve concurrent modification of
shared files by multiple clients.</t>
      <t>In some cases, Network File System version 4.2 (NFSv4.2) (see
<xref target="RFC7862"/>) mechanisms such as file delegations can reduce the
impact of concurrent access.  However, delegations are not always
available or effective, particularly for workloads with frequent
concurrent writers or rapidly changing access patterns.</t>
      <t>There have been prior efforts to bypass file data caching in order to
address these issues.  In High-Performance Computing (HPC) workloads,
file data caching is often bypassed to improve predictability and to
avoid read-modify-write hazards when multiple clients write disjoint
byte ranges of the same file.</t>
      <t>Applications on some systems can request bypass of the client data
cache by opening files with the O_DIRECT flag (see <xref target="OPEN-O_DIRECT"/>).
However, this approach has limitations, including the requirement
that each application be explicitly modified and the lack of a
standardized mechanism for communicating this intent between servers
and clients.</t>
      <t>This document introduces the uncacheable file data attribute to
NFSv4.2.  This <bcp14>OPTIONAL</bcp14> attribute allows a server to indicate that
client-side caching of file data for a particular file is unsuitable.
When both the client and the server support this attribute, the
client is advised to suppress client-side caching of file data for
that file, in accordance with the semantics defined in this document.</t>
      <t>The uncacheable file data attribute is read-write, applies on a
per-file basis, and has a data type of boolean.</t>
      <t>Support for the uncacheable file data attribute is specific to the
exported filesystem and may differ between filesystems served by the
same server.  A client can determine whether the attribute is
supported for a given file by examining the supported_attrs attribute
for that file's filesystem or by probing support using the procedures
described in <xref target="RFC8178"/>.</t>
      <t>The uncacheable file data attribute applies only to regular files
(NF4REG).  Attempts to query or set this attribute on objects of
other types <bcp14>MUST</bcp14> result in an error of NFS4ERR_INVAL. Since the
uncacheable file data attribute applies only to regular files,
attempts to apply it to other object types represent an invalid use
of the attribute.</t>
      <t>Using the process described in <xref target="RFC8178"/>, the revisions in this
document extend NFSv4.2 <xref target="RFC7862"/>.  They are built on top of the
external data representation (XDR) <xref target="RFC4506"/> generated from
<xref target="RFC7863"/>.</t>
    </section>
    <section anchor="definitions">
      <name>Definitions</name>
      <dl>
        <dt>client-side caching of file data</dt>
        <dd>
          <t>The retention of file data by a client in a local data cache, commonly
referred to as the page cache, for the purpose of satisfying subsequent
READ requests or delaying transmission of WRITE data to the server.</t>
        </dd>
        <dt>write-behind caching</dt>
        <dd>
          <t>A form of file data caching in which WRITE data is retained by the
client and transmission of the data to the server is delayed in order
to combine multiple WRITE operations or improve efficiency.</t>
        </dd>
        <dt>direct I/O</dt>
        <dd>
          <t>An access mode in which file data is transferred between application
buffers and the underlying storage without populating or consulting
the client's file data cache.  Direct I/O suppresses both read caching
and write-behind caching of file data.</t>
        </dd>
        <dt>write hole</dt>
        <dd>
          <t>A write hole is an instance of data corruption that arises when
multiple clients modify disjoint byte ranges within the same encoded
data block without having a consistent view of the existing contents.
This can result in stale data overwriting newer updates, particularly
in environments that use erasure encoding or striped storage.</t>
        </dd>
      </dl>
      <t>This document assumes familiarity with the NFSv4 protocol operations,
error codes, object types, and attributes as defined in <xref target="RFC8881"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="client-side-caching-of-file-data">
      <name>Client-Side Caching of File Data</name>
      <t>The uncacheable file data attribute advises the client to limit the
use of client-side caching of file data for a file. This includes
both write-behind caching and read caching, which are addressed
separately below.</t>
      <t>The intent of this attribute is to allow a server or administrator
to indicate that client-side caching of file data for a particular
file is unsuitable. The server is often in a better position than
individual clients to determine sharing patterns, access behavior,
or correctness requirements associated with a file. By exposing
this information via an attribute, the server can advise clients
to limit file data caching in a consistent manner.</t>
      <section anchor="write-behind-caching">
        <name>Write-Behind Caching</name>
        <t>The uncacheable file data attribute inhibits write-behind caching,
in which multiple pending WRITEs are combined and transmitted to
the server at a later time for efficiency.</t>
        <t>When honoring the uncacheable file data attribute, clients <bcp14>SHOULD
NOT</bcp14> delay transmission of WRITE data for the purpose of combining
multiple WRITE operations or improving efficiency.</t>
        <t>One important use case for this attribute arises in connection with
High-Performance Computing (HPC) workloads. These workloads often
involve concurrent writers modifying disjoint byte ranges of shared
files.</t>
        <t>When application data spans a data block in a client cache, delayed
transmission of WRITE data can result in clients modifying stale
data and overwriting updates written by others. Prompt transmission
of WRITE data enables the prompt detection of write holes and reduces
the risk of data corruption.</t>
      </section>
      <section anchor="write-durability">
        <name>WRITE Durability</name>
        <t>The uncacheable file data attribute does not, by itself, dictate
the <tt>stable_how</tt> value a client uses on WRITE operations.  The
protocol-level requirement is the following durability invariant:
when the application's write call returns successfully, the WRITE
data <bcp14>MUST</bcp14> be durable on the server.</t>
        <t>A client honoring the uncacheable file data attribute <bcp14>MAY</bcp14> satisfy
this invariant by either:</t>
        <ul spacing="normal">
          <li>
            <t>issuing WRITEs with <tt>stable_how</tt> of FILE_SYNC4 or DATA_SYNC4, in
which case the data is durable on the WRITE response, or</t>
          </li>
          <li>
            <t>issuing WRITEs with <tt>stable_how</tt> of UNSTABLE4 and a COMMIT that
completes before the application's write call returns.  If the
COMMIT response indicates a changed write verifier, the client
<bcp14>MUST</bcp14> re-issue the affected WRITEs from the application's buffer,
which remains available for the duration of the write call.</t>
          </li>
        </ul>
        <t>Clients <bcp14>MUST NOT</bcp14> defer COMMIT past the point at which the
application's write call returns, because no client-side copy of
the WRITE data is retained beyond that point and the data could
not otherwise be re-driven after a server reboot.</t>
        <t>The transient retention of WRITE data needed to complete an
in-flight UNSTABLE4 and COMMIT exchange is not considered "caching"
for the purposes of this attribute.  The attribute concerns the
long-lived retention of file data for the purpose of satisfying
future READs or combining future WRITEs.</t>
      </section>
      <section anchor="read-caching">
        <name>Read Caching</name>
        <t>The uncacheable file data attribute may also influence the use of
read caching. Retaining cached READ data while other clients
concurrently modify disjoint byte ranges of the same file can result
in read-modify-write operations based on stale data.</t>
        <t>Clients <bcp14>SHOULD</bcp14> ensure that cached file data is not reused without
first validating that the file has not changed.</t>
        <t>At a minimum, clients <bcp14>MUST</bcp14> revalidate metadata necessary to ensure
correctness of cached file data, including the change attribute and
file size. These attributes provide the primary mechanism for
detecting modification of file contents. Meeting this <bcp14>MUST</bcp14>
requirement satisfies the general <bcp14>SHOULD</bcp14> obligation above.</t>
        <t>Clients <bcp14>MAY</bcp14> revalidate additional attributes (e.g., modification
time or change time) as required by their local semantics or
application requirements.</t>
        <t>Failure to perform such revalidation can result in the client
presenting stale or inconsistent file state (e.g., incorrect size
or timestamps) to the application.</t>
        <t>Suppressing read caching in addition to suppressing write-behind
caching can further reduce the risk of stale-data overwrite in
multi-writer workloads. However, in some cases read caching may
remain appropriate when another NFSv4.2 mechanism ensures a
consistent view of the file, such as a delegation.</t>
      </section>
      <section anchor="relationship-to-direct-io">
        <name>Relationship to Direct I/O</name>
        <t>While similar in intent to O_DIRECT (<xref target="OPEN-O_DIRECT"/>) and
forcedirectio (<xref target="SOLARIS-FORCEDIRECTIO"/>), the uncacheable file
data attribute operates at the protocol level and is advisory.
Clients retain flexibility in how they satisfy the requirements
described above.</t>
      </section>
    </section>
    <section anchor="sec_setting">
      <name>Setting the Uncacheable File Data Attribute</name>
      <t>The uncacheable file data attribute provides a mechanism by which
a server or administrator can indicate that client-side caching of
file data for a file is unsuitable.</t>
      <t>In some deployments, applications or administrative tools may request
that this attribute be set on a file in order to influence client
behavior. For example, applications that require predictable data
visibility or that would otherwise rely on mechanisms such as
O_DIRECT may use this attribute as a protocol-visible hint to the
server.</t>
      <t>However, the setting of this attribute is subject to server policy.
The server is responsible for determining whether a request to set
or clear the attribute is permitted. This may depend on factors
such as administrative configuration, export policy, or access
control mechanisms.</t>
      <t>Requests that are not permitted <bcp14>MUST</bcp14> be rejected using existing
NFSv4 error codes (e.g., NFS4ERR_INVAL or NFS4ERR_PERM).</t>
      <t>One possible deployment model is for a server or administrator to
configure a mount (see <xref target="MOUNT"/>) option such that newly created
files under a given export are marked as uncacheable file data. In
such a configuration, a client may request setting of the attribute
at file creation time (e.g., via CREATE or OPEN createattrs).</t>
      <t>This approach is conceptually similar in intent to the Solaris
forcedirectio mount option (see <xref target="SOLARIS-FORCEDIRECTIO"/>), but
differs in scope and visibility in that it allows DIRECT-I/O-like
behavior to be applied without requiring changes to individual
applications.</t>
      <t>Unlike local mechanisms such as forcedirectio, the NFSv4.2 attribute
is visible to all clients accessing the file and is intended to
convey server-side knowledge or policy in a distributed environment.</t>
      <t>Changes to the uncacheable file data attribute while a file is
actively in use may not be immediately reflected in client behavior.
A client that has already opened a file <bcp14>MAY</bcp14> continue to operate
based on its existing caching behavior and is not required to
immediately alter its behavior in response to a change in the
attribute.</t>
      <t>Clients are expected to observe attribute changes through normal
NFSv4 mechanisms (e.g., GETATTR or revalidation) and apply updated
behavior as appropriate for subsequent operations.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: please remove this section prior to publication.</t>
      <t>There is a prototype Hammerspace server which implements the
uncacheable file data attribute and a prototype Linux client which
treats the attribute as an indication to use O_DIRECT-like behavior
for file access and to revalidate file-associated metadata before
exposing cached state.</t>
      <t>For the prototype, all files created under the mount
point have the fattr4_uncacheable_file_data set to be true.</t>
      <t>Experience with the prototype indicates that the uncacheable file
data attribute can provide many of the practical benefits of O_DIRECT
without requiring application modification. For applications that
issue well-formed I/O requests, this approach has been observed to
improve performance in many cases, while also reducing memory
pressure and CPU utilization in the NFS client.</t>
    </section>
    <section anchor="xdr-for-uncacheable-attribute">
      <name>XDR for Uncacheable Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable_file_data;
///
/// const FATTR4_UNCACHEABLE_FILE_DATA       = 87;
///
]]></sourcecode>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the uncacheable file attribute.  The XDR
description is presented in a manner that facilitates easy extraction
into a ready-to-compile format. To extract the machine-readable XDR
description, use the following shell script:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
sh extract.sh < spec.txt > uncacheable_prot.x
<CODE ENDS>
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>While the XDR can be appended to that from <xref target="RFC7863"/>, the code snippets
should be placed in their appropriate sections within the existing XDR.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The uncacheable file data attribute does not introduce new
authentication or authorization mechanisms and does not alter
existing NFSv4.2 access control semantics. All operations that set
or clear the attribute are subject to existing access control and
server policy.</t>
      <t>In particular, a server <bcp14>MUST</bcp14> enforce appropriate authorization
checks for SETATTR operations that modify the fattr4_uncacheable_file_data
attribute. The ability to set or clear the attribute may be restricted
based on administrative configuration, export policy, or other
server-defined criteria.</t>
      <t>Because the attribute is visible to and may affect the behavior of
multiple clients, servers <bcp14>SHOULD</bcp14> consider the implications of
allowing unprivileged users to modify it. Inappropriate use of the
attribute could impact performance or data access patterns for other
clients accessing the same file.</t>
      <t>The uncacheable file data attribute is advisory and does not provide
a security boundary. Clients <bcp14>MUST NOT</bcp14> rely on the presence or absence
of this attribute to make access control decisions.</t>
      <t>Use of this attribute does not replace or modify existing cache
consistency mechanisms or data integrity protections provided by
NFSv4.2.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man2/mount.2.html">
          <front>
            <title>mount(2) - mount filesystem</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Linux" value="Programmer's Manual"/>
        </reference>
        <reference anchor="OPEN-O_DIRECT" target="https://man7.org/linux/man-pages/man2/open.2.html">
          <front>
            <title>open(2) - Linux system call for opening files (O_DIRECT)</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SOLARIS-FORCEDIRECTIO" target="https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/manage-nfs/mount-options-for-nfs-file-systems.html">
          <front>
            <title>mount -o forcedirectio - Solaris forcedirectio mount option</title>
            <author>
              <organization>Oracle Solaris Documentation</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Solaris" value="Administration Guide"/>
        </reference>
      </references>
    </references>
    <?line 450?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, Jon Flynn, Keith Mannthey, and Thomas
Haynes all worked on the prototype at Hammerspace.</t>
      <t>Rick Macklem, Chuck Lever, and Dave Noveck reviewed the document.</t>
      <t>Chris Inacio, Chuck Lever, Brian Pawlowski, and Gorry Fairhurst
helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61c/3LbRpL+f55iVt4qWymSih1d4uUl8cqSbGvPlnySvNlU
ak87BIYkIhDgYgBJjM95lnuWe7Lrr3sGGJC0Ld+dqxKTIDDT0z+//gEPh0NV
Z3Vux/ogTbNipk2h3xWJSebWTHKrX2T0vyNTG31Q11U2aWqr61Kfvri42R89
UWYyqezNeOMRlZZJYRa0bFqZaT3MbD0dFlN3sz9suluHU7rVDR9/rRJT21lZ
rcba1alK6dtYvz86uDz+oJKycLZwjRvrumqsypYVf3L1k6+//tPXRENlzVi/
tIWtTK5uy+p6VpXNcqxPbY1vcoaLlavtQv/VVi4rC72vru2Kfk3H+qSobVXY
engEUpVytSnSK5OXBRGxsk4ts7H+pS6TgXZlVVd26ujTaiEf6KALs1wS6wY6
KRcLW9Tu70qZpp6X1VjpodL0JyuI/MuRfmVWBa2IS8Key3m5MC6+XlYzU2S/
mZrIHNMPtGTlliax/KtdmCwf67yczVfVn2f4NqJtlSrKakHP3FjaU5+/OHzy
+PGf/Mf9f/n6W//xu6ffPuk+fuM/Pn383X738Wn4+PTp47FSWTGNl35z9u70
csy0eMVZlE1RP3qyq4fyUbNUmd1ym6lmth7reV0v3Xhvb2GK70Z0yr08K5o7
fB0uzcw6fHqyx0uMnozm9SLnx1tO0p8huDPWr/Ggbh/Uy6r81SY13yK68+Tr
J/v81dkqsw5nkBW0PDzWO2+rclYxdx86/cYUjcl36Jazt8enw7Oro5Pz48P+
OculLeSYsr8cUScmzzWxiH+HBfHx9aOwxu7/gglY6v+LBxdnrw/OTy6GL87O
D4+FpJOzTQHqYYlTJDbNKlonK2mjizI3VebWrsvt5RIKuvVsZBKOzmaS3EI3
92yBA1WkQsVsKFxze07W3pP7huHr48ejffCAzgR/IeowlM3ckAjBVfYbYaVP
cumMV28PclQmDSzUtLS3rPrmI+riHyWFOUgXWZG5uuKn9csmS+2OUsPhUJsJ
LhP31TafcxN8zuiJfuQ9565O8gy+gp1GWeQrTSyCpSn5YehoeQ1XCZ0qp6xW
INeQM6HDpbaCI84WJPgbGx42RWJH6qwgT7WwXkPJSZGDyrOE6XakMytaYpo3
lm72ZMjCfjc1sXNzk5XVQJO/1/XcVlYT94pSs280VZr9ZlO9sMmcXJVbsPob
MI+OSrQp07GqFDKLFPtT7JibWi9NVWdJQ4yNTuXmZZOntEmtJ1ZxjEj1ZNXy
CXuQp3c4ArEjOjDtSFysoJ7kRN2InGrmEIFY1rR3XZVpk5CRGF3Y22jPwF7T
xjbs4kU0Ui/YkhemuiZSbrN6TuQTH7q7DRhD4aNI6QY65oQuJbSR8/d/Xpau
WS4rfmDQkyuuU7DhcJaXJnXCucr+syE7JGsne0xqjre8zk3mskmWZ/VKjq/D
8ZW9A32uOxVrLLHZXp3if3V5dW4NbeuUOspc0jhWVqKSD8vxm0z8Gj4mRxii
H0klZD0N+nAoDrka4QjfcpK9fsTx/s8I/fB0uwN1O8+SOTTJVMSKG2KSqdUv
f3/UOcUs9z+NwmN7uLDnLP/1jMPfFZb/gVffHZGBNuSdCCYQi0k5aXnXEK1M
AqQZnSIhcDOBjJtifesZSauZsLtirHI7E7iytwFXdomDP/lTv+RTtxGSOLO2
hb7HFrteJIssTQk5qQdAJKyx7KXUoTcAkkhlFyWUtA2wm+5Db1E59UXug3xe
Q2IK6krugjBAkje0XmVrk3GQ45XIHFM9rcoFK4Q3fygv8cJNV6TEE0cKCy08
Pz44Yu21roZDcvrWUtykv9fWvK2ymhQWlh97LRVTndqcfBhb/WKSFVb/dH5y
edwuTwKgw5CvqUzhFrQcWEAULvBsRykd9Kc5uEKXHP2fvFmRYQU2azudItzd
iEsgzqw6WxzgkRU7UpJ1Q+A0E1PErdstVn3CYnGSrLgpc9qM0G7SkCsjv7Uo
02zqz0/CV25OdKUeXhB7Fk1eZ8s8uHBHanTiHX9inCUq7x+MHjlr1fv3HiF+
+LDbOXdHYiR1IEmJCtncznwkgbITSeRawRBFykQxEHoanUL8IfH6VXlrafNB
bwVwGh7f5Ldm5ZS5gQcAi4glrQQGUcAgRe8zmd3ytPJqFm0MRaKzYqXKLLOU
nsSJZuzvmShatgb0B+cuOchR2LMkUlK/ZZUJCeSEHbv21dI4tyV2RIpJcS+F
M/caJZ6Ijk5ieZXN5sO3Ucw6LBfLBpqpH716e7jbnWigtuwB6xerABUSbFrb
DZolygQfCFJuyixlCx2yIq2GzBA64m8Uv4lvc1puXYWEaTrN3K8lxTU1WdE3
siIATA4IZDuUtjAXiGkHMawo+6DDKwdbZGCeXyKCHBLnoc199OyDrdUBRetp
bmaspvr9+x5GJ2UdqVa5JEBTTC1pYTosAgG5AKERIRaODPtgcW+bHCbZWC0e
itwOzNve4Ssh5ZW3SIQt8JgWoHh4jVMZ9QlgBA/dFLwi70sEMmYAzqlvoWzi
j0j9adnOmHthPEYx2DkKS5FOmihHVyHgawEEZ28J958evI7hS56Xt65DbutA
7fPwRYDfOp6j3TqnOFI/QdUmpZeol35god/a4501gMWO1lPBuCElrynaH4DT
tni3QaNIF5cYZZH5k8myGbaK5ghaFHQKYrmdUkxJcWMdi0C8xGc5nzmxOjYl
D70tm4dRFGYZROiJcRnCIDEBOmpkkXq1tKB9Upa5NQVteOHZIkDmXpu7pU0Q
N3ywI/yHFULgkCCAfRG9SJ2nxPyghzGuYLkwAMcibPVt2DwIQoSNp5Z86AJR
mFwKcgUmNCZJeeGCBtaXGTl12Q3r2zuzEADAcgj3XmGJSBeU8MDL8aGLz0O/
0EJk9BMsE3SpcWFR+oUS2Ib0RaXWJbSgyJcjHkoeHz7cU7qdOMkfEIcrO2v1
3ikKqPvnxy93wSMKLYulxA5yghVHeWfXNRx6UU6QucM9qlIYSHrg9Jt3F5e0
viMfzUpbaFtVqDNMgb33j8/Pr05O/3rwmiBwVvgQ/H8if6BMRDRupUSxxmch
S+j01FUW5ieWDPRicgo3jbPKO/l2T2Lsu74gHGxsuxQG3i8DHCGoeBvskjnJ
ZkIyoyPIwn6OUBkgxaTJiGlIVMqljzqcB1WFyQN09eSLn3/0t6PzXVkN1bIP
H/SM64msswRwW2z0DWvKA30EJ5EJNP2sm1QKhT6Gz3Sfz6468QDqBouCoHVe
JoFOFuegRflK0yJkspU4QSPBABWgcGfwFMumWpaO3YmH42IaLSLXuofJoZ6M
q1lUgpzbTFDwtfioHoRWit3ccGLp0Gmbb9B5DzRnI72DRpBJUsFo3SxkAp3T
0b1YsUYSiNgkCMvwKUSzGJjROnRPSBVayCN7+8IUA5iqhVSE+yjk2yJZ0Qml
8KVP9s74XEVAjwtknO1RovzKCbFeTMG5RrCCKJo08LyuDYOULloCtyyjuqwg
UISmsqn1slySjTJ4YDRRwCOAyzqKpw/XoSnyuKOW8q7O4CQSc+oWxKWZjG2S
7MkvSFvPS+SpkHH3ncMzPAGQUMJ6J7SUVdVw+U6cN4ppVuAn7bsBQAWrtghU
xwgUDMmKDoWSfEgEqdLejMhsrluuoYIFpM8MyxzjrZvM3gbdsXd0EXfQ77Ug
Lg+UBLgGt0vHCWwlzahwYDxV2FvStmaJ+qHrJygK5X4i7iaryoL7AXJyco7k
wY1rKk+6l6gjR7kkRfFy30B+hJzpA8mXwmSeEf8I5LewRaowpLV1mZR5pM4D
JdECLCICY98tuKN10A5uJAI94o6fPn3sXd15h5Kdfk2iaIhKiZbX5G/RRHF6
B9FqZyB/69Mz/nx+/O/vCKMf4fPFq4PXr9sPyt9x8ers3euj7lP35OHZmzfH
p0fyMF3VvUtq583BzztykJ2AbHc2IBsHA6nLAXJXS3hgOvoaDHh++Pa//+vx
Pp38D75zQgFAvqA1Ql+grrIbR075iiKAIrO2pmK/neekO0tCvblUONy8vC00
Ekvi41e/gDN/H+vvJ8ny8f6P/gIO3LsYeNa7yDzbvLLxsDBxy6Ut27Tc7F1f
43Sf3oOfe98D36OL3z/L4WSHj58++1EpaI9Ur4YXiI2HnVNp+4r3hF0M/F2c
QJBYObUT3COR7p75CqevYuy+suUUe8WtLhBSj93lwHt86JZP+MkJOUs+gJxB
jpoQpVUeT/pML1RTe0gdARwZWFw6173SudoonX9xRqa2ZGQMRrqAKaUFRh4U
rMhMKOS4LLjsQoGCmyxtCJMEN81FuID7UZgCHaGcMggRsu0jqH6FPk684X1c
mWQMtditBfk8R2oASrh6x7Lq6qw3mUG46WeK4Uzw4KIxgWDVastWNNKLEpQH
FgxtHjzQP7FCPBeFOAzo5l5pYDHPJlkoqazp1EC1uKGNgEvCtSCHcYlUxjxm
SWMAVNcM/VR0XERVTQgBmUO2kCpkD8FwAj4vi7IKOPwz1A9aQYv7gLv2VddP
QMMt0FNOAKbdA3eBuB7dZ6Rc9BPlcpSac/xEYbOr6seNGHYPxFUSZMF9ykI6
MPcvvLFZ0PJdbZENQ20pzYbaoqAVrl1vAyzA3ly0ZSN0QRJxgUmaQEtTtEUA
gTGilCHLZmTvca36hAT60KWPqQRaGsxmsKwRyyJA46FMXH/nrI/Y8pYSoGXd
k7zq72sLaJILKR7uhntIQq7TwUTn3SlXsliJSXLXW9Citz/e46ipfHXzfraX
lhbdynqAU5AN2nxK7EONtLa85z8cO8IrCtD/0JS6NrbjduOkWrOup5JfqgC1
hrm9sXnsydilz6GecOqsFC3dnCFXGanxWHHllVPkTg8ehtIrTxMQSmnIj6Lw
Dj86bfJ8JQ6OiRIBMnogYMOb5FxI6CVmbZHmSwxfU4wP+WJwup5wLtVkUIkx
oRkubkfuij13j60I8ievj68ufj493IeRHx1cHsg3FOEIJYsDZJNuszmAt/6B
Qm/HLTEINEB7+Z7bvzu9uDx4/vp4X/CuBqo5uZTKpoZrIncElQ/tonuIBMX8
qU9O/XKBsjZQw5K502B9ToWeC+rG1SDCLxilkQLPkPsEsj23POg5f6y2t9an
S5LHQcvCCm1ReJC2fRJcMXhZRxlzd6JR11gMOBRJAMUQf66lcbUYNPs1CjKy
GQ7/OTaR4dnEwGEXZR+ylMsV6lydYDeTf7sqOSnGoIBs7XNk7yGaPFXoGbF7
ukWQn6C0MkwrLiuaKQJhC6kqOynLULtlF8ZG0SvFRJQU1vpeftAPzQhoOM0p
kNRrOuVZZe9E3jIkUQuYoHyeFtrxEX9HrUVHt4kJxcNExoiIA0DFPM/LYjbM
uWv+kTrSJ0s/atrUyDxR9HFd75RbLvKL6Jz4XUwEfBneQTmZEp8yGi1hf8N0
qBg/j2j10PL1Yx5ciZL2L3dkpd4YsFsXeEMP5iMFgvUWVRQPAbg2m2ERCpkY
NBbKOOGPTMRnUZhDrAISF9J7dR8Iv7JNGP8om5oif0V2xOXR0AAyYlf8JKr/
rDLiMOC3geaQAyyaRYfDvK/w6xC7iYVeYREiTMXlXKFPxVAbIGyN0vU2mFfe
CE0Vgli0y36zARZF9QIGa6n14T5bYPdez0v56I/xgX4X28sl1Fz0G2u7thgO
qeKIKuqbeWQhJdk8CKOckEnKumZCUCb2aBTFImZRlsbpDD0bneKRHc1Ggx6B
ivEzjENYgq+7MqTARIXSZFb5Gm3XNcLUU4Tr4gyHCHtBjrmRWkSY0+Cuektk
mB3p0FsUKnypukVwMjAQpSwiLMCbcCr8zErAMkT+hbPQLYul2w0104hg32tC
MottYntlLOo5GHfe8FOc3KhwP84xbSq24W48oAV6fIRhr6KG4CkZghhmFaPy
trebxdMNfRIxpCJRUJq/pJVgBkMtU4g7CT2DTlPFXMgDq48UCaVjGOYfTDS6
ENxkLu5jni3BmqOoVCyzJY6SzlzqQ74UQLe1Te1Hm71sMb7ewCXdtXWIk+4e
bAV1as03i5vDQesA0aVcKBhWpqYkYy4rSryCGUlM1tPc3mUtjiU8eSvzL2HM
Z62VHhfXgmE+0Be2roPD+dyA+fsHziZXTp74cL/4430SpNQJeLIS0KI+WmFh
Zb1PiUVtKyKtd7rbAZzULvNyxdxYm77sE4D5orosc5nK9L0Y5UNEL8OdWO4e
wtn5reMxrrVxznaCc6RfoBhwZ4Bl1ij55ECh6o8n8b23PKDZwa4KxS4iaHNU
SLUajmM1DPD7+Trk1KZSvBeCYSb2wR3nkMdEox3MgtqXvDbraa7xRe4ySHtZ
0nFJofv1Lo/YswCUQyWLHZrvYZt2doVXq7mClaPSu97dhkOXsowvKXJj3aKc
A+ZMTUJqhh64dyJ94ZPjmWYzj9IHWpr1nu4BKwungHBQdUUW2/GaWHMeene+
syKzVC09bYpY2V8lrZCOeGh9yISIjvoEIXr0+staRmL5wtvj8ze7vjJDGFN4
2Ck798RyLSPjHy9ron4VDo7MWybK/XAPv2AARyhD36JSfMDC3mKIixx/HUoq
0jdrRwo8+8AJP7Vr3HbPMdInhZfJugzaSkBkkn3FixRA+XkEIYsjJCCE5yOq
lIcEblFIqPjVAk8+zzbshlZPO6+E7hMw/7JuKJtabY8e2N9Ppa8FingyP7Dz
45GDyFcyAMKFM0e5mUzQRqaf+a5dVodhIVliSCGOkpFr23qaMP7MAwYt/PX+
hVHBXEC6L2lLQTnGTNDodwUW9eBq2whifN5B1wGjsN6JhLgYPIqU2FsULcYU
whDLzQe/aIobqnmD8MbKK3Hguihvc5vOGHqJdUqJLoVO87Zp3PIDFu3Oe5/C
iyQ+bVhRhkcfc94GDhTKKLPxOlssiAfSa6gsRWe27bbg15bdR10NiIXIk0Y5
cJOM28E8ZD/gZXiYrGiYZx4wqDYpQiG765j6oNiK3vNQsh8PlImPMZ0mB6rL
6q4poDkj87UTyCmAbsG+Kh4gCYCEB3PvlnJg0DlhIcUpc+D6vCqb2Vzza1G5
93SRQnkDfXl8eXB5ec5DohEU35WKEU/ASGE07RTduB7GhKfrxirigiGPciPw
tq+c6Av6u3FKYfIeBzh/caiPCVqX1VjTjYaj6gIjCBzenC+hyjQqkodmEiH2
y/Bmho+lPD8WvTEW/K+fuw+kuPuNCnHNrFtXXjjy+iSoqoYvc2sR0fg5gDSk
QkQ2FDhAAnYbrRZwWUQMUXpGMr4aZ2/8sk/UJGpTX6nbqdAkCnku50HIuUI5
JBxhwL5A4oaPIj5+4DZ2nkoqTjwHzC4C59q/inh1heevpGxva+/18GIi7XhM
qllltjdX2DGwqw+2JYDPAXeA05BsYwQ9hJ8lXjbK4CMnZMbTTN4OCBxWm843
Tk3jhFfw4QYsVFKSxIg+3rkiM+Yhkm5+f3PMlqemvT166994tQCmzcfw8+ne
56FqxHkiZ3Kk/tWKU16utXCZ7e073dQUkeStyJAdk1F7fWRT+9vRORtjnF20
OYVSv//+u75LK7W3t4f/eBQitTJsqaM/nxL5v7ZPI2Gs9Qs4j/2rd6eHB4ev
jlEXvOKaN0rdfrkf9NPv5DEiAGQe3/GrYr4cQkSvz3vAEXM5V8ZUPje1puKp
Ncm8lnHJd8PO1+uNICF+DpBWdpGoYnxH1A9fmgTQgPWY/BV6tOE8ikyn1PJa
yGpYl0OUUDMB2QtTEzwuw91icRxH7BD3M3lrlAx85hC3VNwcr43ILWMRKl9S
3x+eHR3r58cvT04vflQP/rA3yYo9N1cz4pl++B/6KxLBQ/3Hr/R/asS0h+6Z
XNPPnj1cv/ZHuuYXPD49ouVYdL1MKvOlRiaEg5+BlTz05xu5+UNft+4NcTvl
78OU7qi+qx8C89uER7Z7B8XEHy3wiTO6ue5209/rsKT+MZb5FRzQ6G7zOKx0
nn6JOU5TBOKq4CQ3xbXmGNKNqEkJyqLo9U9JNh+Cp4qbFDw5j9mPEdthJEUX
z1ivr8ABfTGxKea4fMwu5Z3DeO5awmXwmtiAX/fylrJlVtsnYNzIk3lVnuKM
8WIxdfueOWIXj/ojnzoa+dwNQ/T9cRFawq8ubw8U7QTDflc1KqdTChR0IbfF
rJ7TB1snIwwIqfAK1ALtJ94dY9u8YHi6IZv65smVNEHw5dv9q3oUqkstN+St
M8wihVcRxVjXzuEbUOCdKzK6u6bEVN67pMf59T7PS5Q4Y5TjkUhvCK8FhESC
r/EkDY+nHfoGiH9364uatt2bDkj4+EV6qE2oIFf+Nd8QCyJMBxa1qzDgVC2J
bZYgKCOk0239dqQP8nh8Tvj3icQfmhsVHNqN1jZANW+tGIEiUTefM+jSZE7X
bcE5To/5vRMrYmJyLRn2RYCva3T7JsnnEEyEsaXz5LM+KXnoj5zcv/ZGIYKu
JAyNQ5rwpcUNriV5/gzDCGLCFeAM7Zfnvou4UXOJ8zv/LoP0TvnWFqqXU7U+
YToIb9uENkJo1vGTwMhdqW6qTHDHTUGyuCHGzbiMgufrMvA5q1FOiCXm59F6
eYy0LrV/S27t/WUxhv5rafKvCjCLtiew8btY95pJ6oq8fWPxGJPLpN6EJ3iD
1VSrkd5oE4e6nyBRIAU5g5nwR7VZnAOrzLVdN47UJjLnz+8I2C1VvZZCiuLw
TtjGM72Xjtqugp+sYp8QWIv8fsYHg8sPzsyfG20d1b0fTVnbwenBFicWBxhp
3MmdAn+cf493YpJrLHKQhKqBVMXfj4uGQh0h3R92pgR67Q5K2xWa3W9W17md
NK4e6DfIji6KrP4NNc+/EJtf5KuCrOffMHyBf6iiQPFdhlHlXw9R8q+HcHaD
vonYYj/5IKcQJYaoHWbJNa2W0MaLgT6cN/T1tRRasfIRMqBTAgV0Ga9j2Fub
rkflwzn+TQVS/AS1mN4SzzEyot+aW9SMrjNZ82VZkeK9MFk1bypXK8I0mHue
NdJLZNzJr4eM1P8AlsMqw5hGAAA=

-->

</rfc>
