<?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.30 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-files-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-05"/>
    <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 57?>

<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 (see RFC7862).</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 71?>

<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 82?>

<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 issuing a GETATTR request and examining
the returned attribute list.</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 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.
(Adapted from <xref target="I-D.haynes-nfsv4-flexfiles-v2"/>.)</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>
    <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 bypass
its page cache for a file in certain cases.  These include forms
of client-side caching of file data such as write-behind caching,
in which multiple pending WRITEs are combined and transmitted to
the server at a later time for efficiency.  The uncacheable file
data attribute inhibits such behavior with an effect similar to
that of using the O_DIRECT flag with the open call (<xref target="OPEN-O_DIRECT"/>).</t>
      <t>While similar in intent to O_DIRECT, the uncacheable file data
attribute applies at the protocol level and therefore may influence
client behavior beyond application-requested direct I/O semantics.</t>
      <t>When honoring the uncacheable file data attribute, clients <bcp14>MUST</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.</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>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 suppress file data caching in a consistent manner.</t>
      <t>One important use case for this attribute arises in connection with
High-Performance Computing (HPC) workloads.  These workloads often
involve large data transfers and concurrent access by multiple
clients.  In such environments, client-side caching of file data
can introduce unpredictable latency or correctness hazards when
data is buffered and flushed at a later time.</t>
      <t>Another aspect of such workloads is the need to support concurrent
writers to shared files.  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 anchor="implementation-guidance-non-normative">
        <name>Implementation Guidance (Non-Normative)</name>
        <t>This section provides non-normative guidance to assist implementers in
satisfying the requirements described above. These examples are
illustrative and do not mandate any specific implementation approach.</t>
        <t>Clients may implement the requirement using a variety of strategies.
For example, a client may:</t>
        <ul spacing="normal">
          <li>
            <t>Always revalidate relevant metadata via GETATTR prior to I/O, or</t>
          </li>
          <li>
            <t>Use cached metadata but validate it using a coherency mechanism
such as the change attribute before reusing cached file data.</t>
          </li>
        </ul>
        <t>The choice of mechanism is implementation-dependent, provided that
the requirements above are satisfied.</t>
      </section>
      <section anchor="non-goals">
        <name>Non-Goals</name>
        <t>This attribute does not require clients to provide strict coherency,
does not replace existing NFS cache consistency mechanisms, and
does not mandate any specific client implementation strategy.  It
provides advisory guidance intended to reduce latency and correctness
risks in selected workloads.</t>
      </section>
      <section anchor="sec_files">
        <name>Uncacheable File Data</name>
        <t>When a file object is marked as uncacheable file data, the attribute
advises the client that client-side caching of file data for the
file is unsuitable.  In particular, the client is advised to transmit
modifications to the file promptly rather than retaining them in a
local data cache.  Note that a client that does not query this
attribute cannot be expected to observe the behavior described in
this section.</t>
        <t>For uncacheable file data, the client is advised not to retain file
data in its local data cache for the purpose of satisfying subsequent
READ requests or delaying transmission of WRITE data.  In such
cases, READ operations bypass the client data cache, and WRITE data
is not retained for read-after-write satisfaction or for the purpose
of combining multiple WRITE requests.</t>
        <t>Caching of unstably written data used to reissue WRITEs lost because
of server failure prior to COMMIT is not affected by the advice
provided by the uncacheable file data attribute.  This is because
the server is made aware of the WRITE operation without the sort
of delays introduced by write-behind caching.</t>
        <t>Suppressing read caching in addition to suppressing write-behind
caching reduces the risk of stale-data overwrite in multi-writer
workloads.  If a client retains cached READ data while other clients
concurrently modify disjoint byte ranges of the same file, the
client may perform a read-modify-write operation using stale data
and overwrite updates written by others.  This risk exists even
when WRITE operations are transmitted promptly.</t>
        <t>Disabling READ caching allows clients to observe the most recent
data prior to modification and reduces read-modify-write hazards
for shared files.  This behavior is consistent with direct I/O
semantics such as those provided by the O_DIRECT flag in Linux and
the directio/forcedirectio mechanisms in Solaris.</t>
        <t>If the fattr4_uncacheable_file_data attribute is not set when a
file is opened and is changed while the file is open, the client
is not expected to retroactively alter its caching behavior.  A
client may choose to flush cached data and apply the advice to
subsequent I/O, but such behavior is not required until the file
is closed and reopened.</t>
        <t>The presence of the uncacheable file data attribute does not
invalidate file delegations.  A server that wishes to ensure prompt
client I/O may choose not to issue write delegations for files
marked as uncacheable, but clients are not required to suppress
delegations solely due to the presence of this attribute.</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
applications that do not support O_DIRECT can request DIRECT-I/O-like
semantics for file access.  In particular, the attribute allows a
server to advise clients that client-side caching of file data for
a file is unsuitable, including both read caching and write-behind
caching.</t>
      <t>Suppressing read caching is necessary in addition to suppressing
write-behind caching to avoid read-modify-write hazards in multi-writer
workloads.  If clients retain cached READ data while other clients
concurrently modify disjoint byte ranges of the same file, stale
cached data may be merged with new WRITE data and overwrite updates
written by others.  This risk exists even when WRITE data is
transmitted promptly and is not addressed by suppressing write-behind
caching alone.</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, the NFSv4.2 client could use SETATTR to set
the fattr4_uncacheable_file_data attribute at file creation time.</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.
However, unlike the Solaris option, 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>
    </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 attribute does not introduce new authorization mechanisms or
alter existing access control semantics; existing NFSv4.2 security
mechanisms continue to apply.</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="I-D.haynes-nfsv4-flexfiles-v2">
          <front>
            <title>Parallel NFS (pNFS) Flexible File Layout Version 2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   Parallel NFS (pNFS) allows a separation between the metadata (onto a
   metadata server) and data (onto a storage device) for a file.  The
   Flexible File Layout Type Version 2 is defined in this document as an
   extension to pNFS that allows the use of storage devices that require
   only a limited degree of interaction with the metadata server and use
   already-existing protocols.  Data protection is also added to provide
   integrity.  Both Client-side mirroring and the Erasure Coding
   algorithms are used for data protection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-flexfiles-v2-02"/>
        </reference>
        <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 433?>

<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, Brian Pawlowski, and Gorry Fairhurst helped guide
this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIALybwGkAA7Vc/3LbyJH+f55i4k2VpRRJrb3KrqNsdqOVZFs5W/JJcjap
VE41BIbkRCDAYADJXJ/zLPcs92T3dfcMMKC4lpK7c9XaJAjM9PT09Pf1D+x4
PFaNawp7oA/z3JVzbUr9vsxMtrBmWlj90uGvY9MYfdg0tZu2jdVNpc9eXt7u
T54rM53W9vbg3iMqr7LSLDFsXptZM3a2mY3Lmb/dH7f9reMZbvXjL3+tMtPY
eVWvD7RvcpXj24H+eHx4dfJJZVXpbelbf6CburXKrWr+5JvnX375my8hQ23N
gX5lS1ubQt1V9c28rtrVgT6zDX2TNVyufWOX+o+29q4q9b66sWv8mh/o07Kx
dWmb8TGJqpRvTJlfm6IqIcTaerVyB/ovTZWNtK/qprYzj0/rpXzAQpdmtYLq
RjqrlktbNv6vSpm2WVT1gdJjpfHHlRD/aqJfm3WJEemSqOdqUS2NT69X9dyU
7ifTQMwD/IAha78ymeVf7dK44kAX1Xyxrn8/p28TTKtUWdVLPHNrMae+eHn0
/Nmz34SP+7/+8uvw8ZsXXz/vP34VPr549s1+//FF/PjixbMDpVw5S4c+HR9P
Fixt2M9ZYT/IPt7y0G/P359dHbCwwbKWVVs2O8939Vg+ar6d90NuM/XcNgd6
0TQrf7C3tzTlNxOoYa9wZfuBvo5XZm49fXq+x0NMnk8WzbLgxztV48+Y1Heg
39CDuntQr+rqbzZr+BYxrudfPt/nr97WznpapIyg5eED/eRdXc1rVv9Tr9+a
sjXFE9xy/u7kbHx+fXx6cXI0XGe1sqUsU+aXJerMFIWGDvl3OmK8fL0Tx9j9
F5RAQ/1f6eDy/M3hxenl+OX5xdGJiHR6fn8D9biiVWQ2dzXGcRUmuqwKUzu/
cV1ur1ZkwVvXhjPjsTaTFZaMd8+WtKAaNlbOx6I1v+dl7D25bxy/Pns22Scd
YE1kgGIOY5nMjyEIXWXHEkf6rJbOefRuIcdV1tIRNp3snaq++hlzCY/CYA7z
pSudb2p+Wr9qXW6fKDUej7WZ0mVoX21zSrfRKU2e653gWnd1VjhyJuxVqrJY
a6iIjqKSH8Yew2vypWRT1YzNisQ18DZYXG5r8tRuiY2/tfFhU2Z2os5LuLKl
DRYKLwYPVriM5fawmTWGmBWtxc1BDBk4zKamdmFuXVWPNABBNwtbWw3tlZVm
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
whseE/U/zzuDukhGAAA=

-->

</rfc>
