<?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.43 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-files-16" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Uncacheable File">Adding an Uncacheable File Data Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-16"/>
    <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 stable_how4 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 stable_how4 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 stable_how4 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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
zXlhAAA=

-->

</rfc>
