<?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-15" 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-15"/>
    <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 66?>

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

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

<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_how4</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_how4</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_how4</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 before the
application's write call returns, by whatever means the layout
type's storage protocol provides.  Where that protocol is NFS, as
for the file layout (<xref target="RFC8881"/> Section 13) and the flexible file
layout (<xref target="RFC8435"/>), the means are those of <xref target="sec_durability"/>
applied to the storage device: a WRITE with stable_how4 of
FILE_SYNC4 or DATA_SYNC4, or an UNSTABLE4 WRITE followed by a COMMIT
to that storage device.  Where it is not, as for the block
(<xref target="RFC5663"/>) and SCSI (<xref target="RFC8154"/>) layouts, the storage protocol's
own means of committing a write to stable storage serves;
<xref target="RFC8154"/> Section 2.8, for example, has the server flush a volatile
write cache before LAYOUTCOMMIT returns, so that for such a layout
LAYOUTCOMMIT is itself the durability step.  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, which relies on the sh, grep,
and sed utilities as specified by <xref target="POSIX"/>:</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="RFC5663">
          <front>
            <title>Parallel NFS (pNFS) Block/Volume Layout</title>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <author fullname="S. Fridella" initials="S." surname="Fridella"/>
            <author fullname="J. Glasgow" initials="J." surname="Glasgow"/>
            <date month="January" year="2010"/>
            <abstract>
              <t>Parallel NFS (pNFS) extends Network File Sharing version 4 (NFSv4) to allow clients to directly access file data on the storage used by the NFSv4 server. This ability to bypass the server for data access can increase both performance and parallelism, but requires additional client functionality for data access, some of which is dependent on the class of storage used. The main pNFS operations document specifies storage-class-independent extensions to NFS; this document specifies the additional extensions (primarily data structures) for use of pNFS with block- and volume-based storage. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5663"/>
          <seriesInfo name="DOI" value="10.17487/RFC5663"/>
        </reference>
        <reference anchor="RFC8154">
          <front>
            <title>Parallel NFS (pNFS) Small Computer System Interface (SCSI) Layout</title>
            <author fullname="C. Hellwig" initials="C." surname="Hellwig"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>The Parallel Network File System (pNFS) allows a separation between the metadata (onto a metadata server) and data (onto a storage device) for a file. The Small Computer System Interface (SCSI) layout type is defined in this document as an extension to pNFS to allow the use of SCSI-based block storage devices.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8154"/>
          <seriesInfo name="DOI" value="10.17487/RFC8154"/>
        </reference>
        <reference anchor="POSIX" target="https://standards.ieee.org/ieee/1003.1/7700/">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX) Base Specifications, Issue 8</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <author>
              <organization>The Open Group</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="IEEE" value="Std 1003.1-2024"/>
        </reference>
        <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 567?>

<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.  Éric
Vyncke, Ketan Talaulikar, Mohamed Boucadair, Mike Bishop, and Mahesh
Jethanandani reviewed it for the IESG.</t>
      <t>Chris Inacio, Chuck Lever, Brian Pawlowski, and Gorry Fairhurst
helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
7pIj2P8HXEieLX9hAAA=

-->

</rfc>
