<?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-14" 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-14"/>
    <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 55?>

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

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

<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 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.  The
attribute itself is specified in <xref target="sec_attribute"/> and the client
behavior it advises in <xref target="sec_caching"/>.</t>
      <t>Using the process described in <xref target="RFC8178"/> Section 6, this document
extends NFSv4.2 <xref target="RFC7862"/>; as that section provides, it does not
update <xref target="RFC7862"/>, which remains a valid description of the base
variant of the minor version.  The revisions 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>
        <dt>revalidation</dt>
        <dd>
          <t>The procedure of <xref target="RFC8881"/> Section 10.3.1 by which a client
determines whether data or attributes it holds in a cache are still
current: the client fetches the change attribute from the server,
compares it with the value it cached, and, if they differ, treats
the cached data and attributes as invalid.  A client validates data
when it fetches it from the server; it revalidates before reusing
what it cached.</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?>

<t>"<bcp14>RECOMMENDED</bcp14>" also has a second, unrelated meaning in NFSv4: it names
the category of attributes, defined in <xref target="RFC8881"/> Section 5.2, that a
server may or may not support, as distinct from the <bcp14>REQUIRED</bcp14>
attributes.  This document uses the word in that sense only in
<xref target="sec_attribute"/>, where the usage is called out.</t>
    </section>
    <section anchor="sec_attribute">
      <name>The Uncacheable File Data Attribute</name>
      <t>The uncacheable file data attribute, fattr4_uncacheable_file_data
(see <xref target="sec_xdr"/>), is a <bcp14>RECOMMENDED</bcp14> attribute for NFSv4.2, in the
attribute-category sense of <xref target="RFC8881"/> Section 5.2 and <xref target="RFC7862"/>
Section 12 rather than the BCP 14 sense; a server is not required to
support it.  It is read-write, applies on a per-file basis, and has a
data type of boolean.  <xref target="tab_attr"/> summarizes the attribute using
the columns of <xref target="RFC7862"/> Section 12.1, where "R W" indicates that
GETATTR may retrieve the attribute and SETATTR may set it.</t>
      <table anchor="tab_attr">
        <name>New RECOMMENDED Attribute</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Id</th>
            <th align="left">Data Type</th>
            <th align="left">Acc</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">uncacheable_file_data</td>
            <td align="left">87</td>
            <td align="left">bool</td>
            <td align="left">R W</td>
          </tr>
        </tbody>
      </table>
      <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 determines whether the attribute is supported
for a given file by the mechanism NFSv4 provides for every
<bcp14>RECOMMENDED</bcp14> attribute: the supported_attrs attribute (<xref target="RFC8881"/>
Section 5.8.1.1), which lists the attributes supported for all
objects with a matching fsid, or by probing support using the
procedures described in <xref target="RFC8178"/>.  A SETATTR that includes the
attribute on a filesystem that does not support it fails with
NFS4ERR_ATTRNOTSUPP (<xref target="RFC8881"/> Section 15.1.15.1); a GETATTR that
requests it on such a filesystem simply omits it from the response,
as NFS4ERR_ATTRNOTSUPP is never returned by GETATTR.</t>
      <t>The uncacheable file data attribute applies only to regular files,
that is, objects of type NF4REG or NF4NAMEDATTR (<xref target="RFC7862"/> Section
6.1).  A named attribute is read and written with the same READ and
WRITE operations as a regular file (<xref target="RFC8881"/> Section 5.3), so a
client caches its data by the same mechanism and is exposed to the
same hazards.  A server that receives a GETATTR requesting this
attribute for an object that is not a regular file <bcp14>MUST</bcp14> return FALSE: support
for an attribute is advertised per file system (<xref target="RFC8881"/> Section
5.8.1.1), so a server that supports this attribute supports it for
every object in that file system and owes a value for each
(<xref target="RFC8881"/> Section 18.7.3).  As with rawdev (<xref target="RFC8881"/> Section
5.8.2.31), the value <bcp14>SHOULD NOT</bcp14> be considered useful for such an
object.  A server that receives a SETATTR requesting this attribute on
an object that is not a regular file <bcp14>MUST</bcp14> return NFS4ERR_WRONG_TYPE
(<xref target="RFC8881"/> Section 15.1.2.9).</t>
    </section>
    <section anchor="sec_caching">
      <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 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 consistently.</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>MUST NOT</bcp14>
delay transmission of WRITE data for the purpose of combining
multiple WRITE operations or improving efficiency.</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="sec_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="sec_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>A client that retains cached file data <bcp14>SHOULD NOT</bcp14> reuse it without
first revalidating it.</t>
        <t>When a client revalidates cached file data, the revalidation <bcp14>MUST</bcp14>
include the metadata necessary to ensure the correctness of that
data: the change attribute and the 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.  Such attributes supplement the change
attribute; they do not replace it.  <xref target="RFC8881"/> Section 10.3.1
cautions that time_modify is guaranteed to change only at the
granularity of the time_delta attribute, so a client that validated
cached data by time_modify alone risks treating stale data as valid,
and it requires that any cache validation approach include the
change attribute.</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>
        <t>Because the attribute is advisory, whether a client honors it, and
what a workload gains when it does, are observed in operation rather
than guaranteed by the protocol.  The assessment is the same as for
O_DIRECT or forcedirectio: compare the workload with and without the
attribute set on the files it touches.  A client that does not honor
the attribute behaves exactly as it did before, so the comparison
shows a difference only where the client does.</t>
      </section>
      <section anchor="sec_pnfs">
        <name>Parallel NFS</name>
        <t>The uncacheable file data attribute is an attribute of the file, and
a pNFS client (<xref target="RFC8881"/> Section 12) obtains it from the metadata
server as it does every other attribute of the file.  The attribute
governs the client's caching of the file's data regardless of which
server that data is read from or written to: file data obtained
through a layout from a storage device is the same file data, and a
client honoring the attribute treats it exactly as it treats data
obtained by READ and WRITE sent to the metadata server.</t>
        <t>A client honoring the attribute satisfies the durability invariant
of <xref target="sec_durability"/> for data written through a layout by the same
two means, applied to the storage device: a WRITE with stable_how of
FILE_SYNC4 or DATA_SYNC4, or an UNSTABLE4 WRITE followed by a COMMIT
to that storage device before the application's write call returns.
The client revalidates the change attribute and size, as
<xref target="sec_read_caching"/> requires, at the metadata server.</t>
        <t>Whether the metadata server's change attribute and size reflect a
write to a storage device before the writer sends LAYOUTCOMMIT
depends on the layout type and the control protocol (<xref target="RFC8881"/>
Section 12.5.4); a layout may say that LAYOUTCOMMIT is not required
at all (for example, FF_FLAGS_NO_LAYOUTCOMMIT in <xref target="RFC8435"/> Section
5.1), in which case nothing further is needed.  Where LAYOUTCOMMIT
is required, a client that revalidates at the metadata server
between another client's WRITE and that client's LAYOUTCOMMIT
observes the earlier values: the hazard that write-behind caching
creates, and that this attribute exists to remove.  A client
honoring the attribute therefore <bcp14>SHOULD</bcp14> send LAYOUTCOMMIT promptly
after the WRITE and COMMIT that made its data durable, rather than
deferring it to CLOSE as <xref target="RFC8881"/> Section 13.10 describes for
close-to-open semantics.  For as long as a client defers
LAYOUTCOMMIT, other clients cannot detect its writes by
revalidation.</t>
      </section>
    </section>
    <section anchor="sec_setting">
      <name>Setting the Uncacheable File Data Attribute</name>
      <t>In some deployments, applications or administrative tools may request
that the uncacheable file data 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 with NFS4ERR_ACCESS
(<xref target="RFC8881"/> Section 15.1.6.1) or, where the refusal is because the
requester is neither the owner nor a privileged user, NFS4ERR_PERM
(<xref target="RFC8881"/> Section 15.1.6.2).  A server that supports the attribute
<bcp14>MUST NOT</bcp14> refuse such a request with NFS4ERR_INVAL: <xref target="RFC8178"/>
Section 4.4.3 reserves that response to a SETATTR of the attribute
for a server with no knowledge of it, and a client probing for
support would take the refusal as ignorance.</t>
      <t>This document does not require a server to implement any particular
policy, nor any particular means of configuring one.  A server that
always permits, or always refuses, requests to set or clear the
attribute conforms to this document; what the protocol requires is
only the error returned when a request is refused.</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, via the createattrs of OPEN.</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>A change to the attribute while a file is in use is not reflected in
client behavior immediately.  A client that has the file open when
the attribute changes <bcp14>MAY</bcp14> continue with the caching behavior it
chose when it opened the file, for as long as that open lasts.  Two
ordinary mechanisms bound the delay: the client's cached attributes
for the file expire under the upper time boundary described in
<xref target="RFC8881"/> Section 10.6, and a client revalidating cached file data
(<xref target="sec_read_caching"/>) fetches the change attribute, which moves when
a server sets or clears this one.  A client that has observed the
new value applies it to subsequent OPENs of the file.</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.</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="sec_xdr">
      <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="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="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>
        <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8435">
          <front>
            <title>Parallel NFS (pNFS) Flexible File Layout</title>
            <author fullname="B. Halevy" initials="B." surname="Halevy"/>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="August" year="2018"/>
            <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 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. Client-side mirroring is also added to provide replication of files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8435"/>
          <seriesInfo name="DOI" value="10.17487/RFC8435"/>
        </reference>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man8/mount.8.html">
          <front>
            <title>mount(8) - mount a filesystem</title>
            <author>
              <organization>util-linux</organization>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Linux" value="System Administration"/>
        </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 546?>

<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, Dave Noveck, Barry Leiba, Vijay Gurbani,
Claudio Allocchio, and Jamie Koehl reviewed the document.</t>
      <t>Chris Inacio, Chuck Lever, Brian Pawlowski, and Gorry Fairhurst
helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAHOcqGoAA5Vc/XYbt7H/H0+Bq/QcWzkkFclKojJJU1kfjlpZ8pXkpjk9
veqSC5IbLXfZxa5kxnGf5T7LfbI7vxkAiyUp2e45dcgVF8AM5uM3H0C/31d1
VudmqA/TNCumOin022KcjGcmGeVGn2b0z3FSJ/qwrqts1NRG16W+OL2+3x/s
qWQ0qsz9cO0VlZbjIpnTsGmVTOp+ZupJv5jY+/1+0/60P6Gf2v7uvhontZmW
1XKobZ2qlL4N9fvjw5uTD2pcFtYUtrFDXVeNUdmi4k+23vvqqz9+RWuoTDLU
r0xhqiRXD2V1N63KZjHUF6bGN6HhemlrM9d/M5XNykLvqzuzpL+mQ31W1KYq
TN0/xlKVsnVSpLdJXha0iKWxapEN9T/qctzTtqzqykwsfVrO5QMROk8WC2Jd
T4/L+dwUtf2nUklTz8pqqHRfafpfVtDybwb6p2RZ0Ih4JOy5mZXzxMbPy2qa
FNlvSU3LHNIfaMjKLpKx4b+aeZLlQ52X09my+vMU3wY0rVJFWc3pnXtDc+qr
06P9r7/6xn389uCbvfbjC/fxYPfbA//x4GB3qFRWTFYGOdh/8TU+vr58e3Ez
5AU4aZmXTVE/P9jWffmoE82byVyWHybV1NRDPavrhR3u7MyT4tsBEbeTZ0Xz
Dl/7i2RqLD4d7PAgg4PBrJ7n/HpgIP2vD6YMdVNneZ/f5qciJXtf7X3DX62p
MmNBg7yk9Tl+OtRbbusP03lWZLaumLVb9KPLNycX/cvb47Ork6MueeXCFM/3
QB0PooUuPU7yXBOT+O/QFqZZP/djbH825Xs7GGqw9yThsobwnl5U5a9mXHe5
sE9fry/PD6/Orvunl1dHJ7Kks8v1fdP9ElSMTZpVNE5W0kTXZZ5UmV15Lj8v
F+DYRtpI/C3RloxzAzncMQUIAouLaV+4ZnesjL0jv+v7r7u7g33wgGiCbRAZ
6Mtktk8LwVO2EX6kJ7l0yaMHQo7LcQNtTMLaA6tePCIw7lUSma6s6FdNlpot
pfr9vk5GeEzcV5vsy723L4M9/dxZyW09zjPYBTYQZZEvNbEIuqbkD31Lw2uY
RchUOWGxwnITMhxEXGoqGN1sTht/b/zLSTE2A3VZkFWaGyehZJDIGOXZmNdt
SWaWNMQkbwz92C1DBnazqZGZJfdZWfU02XZdz0xlNHGvKDXbwaRKs99Mqudm
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
XQAA

-->

</rfc>
