<?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-07" 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-07"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 57?>

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

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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-flexfiles-v2-03"/>
        </reference>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man2/mount.2.html">
          <front>
            <title>mount(2) - mount filesystem</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Linux" value="Programmer's Manual"/>
        </reference>
        <reference anchor="OPEN-O_DIRECT" target="https://man7.org/linux/man-pages/man2/open.2.html">
          <front>
            <title>open(2) - Linux system call for opening files (O_DIRECT)</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="SOLARIS-FORCEDIRECTIO" target="https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11.4/manage-nfs/mount-options-for-nfs-file-systems.html">
          <front>
            <title>mount -o forcedirectio - Solaris forcedirectio mount option</title>
            <author>
              <organization>Oracle Solaris Documentation</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Solaris" value="Administration Guide"/>
        </reference>
      </references>
    </references>
    <?line 419?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, Jon Flynn, Keith Mannthey, and Thomas
Haynes all worked on the prototype at Hammerspace.</t>
      <t>Rick Macklem, Chuck Lever, and Dave Noveck reviewed the document.</t>
      <t>Chris Inacio, Brian Pawlowski, and Gorry Fairhurst helped guide
this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
