<?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-01" 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-01"/>
    <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 65?>

<t>The Network File System version 4.2 (NFSv4.2) allows a client to
cache data for file objects.  Applications on some clients can
control the caching of data, but there is no way to achieve this
at a system level.  This document introduces a new uncacheable file
data attribute for NFSv4.2.  Files marked as uncacheable file data
<bcp14>SHOULD NOT</bcp14> have their data stored in client-side caches.  This
document extends NFSv4.2 (see RFC7862).</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 75?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>With a remote filesystem, the client typically caches file contents
in order to improve performance.  Several assumptions are made about
the rate of change in the number of clients trying to concurrently
access a file.  With NFSv4.2, this could be mitigated by file
delegations for the file contents.</t>
      <t>There are prior efforts to bypass file caching.  In Highly Parallel
Computing (HPC) workloads, file caching is bypassed in order to
achieve consistent work flows and to allow concurrent access from
many writers.</t>
      <t>Applications can use O_DIRECT on open (see <xref target="OPEN-O_DIRECT"/>) to
force the client to bypass the page cache, but the limitation
is that each application must be modified to use this flag.</t>
      <t>This document introduces the uncacheable file data attribute to
NFSv4.2 to bypass file caching on the client. As such, it is an
<bcp14>OPTIONAL</bcp14> attribute to implement for NFSv4.2. However, if both the
client and the server support this attribute, then the client <bcp14>SHOULD</bcp14>
follow the semantics of the uncacheable file data attribute.</t>
      <t>The uncacheable file data attribute is read-write and per file. The
data type is bool.</t>
      <t>A client can easily determine whether or not a server supports the
uncacheable file data attribute with a simple GETATTR on any file.
If the server does not support the uncacheable file data attribute,
it will return an error of NFS4ERR_ATTRNOTSUPP.</t>
      <t>The only way that the server can determine that the client supports
the attribute is if the client sends either a GETATTR or SETATTR
with the uncacheable file data attribute.</t>
      <t>As bypassing file caching is file based, it is only applicable for
objects which are of type attribute value of NF4REG.</t>
      <t>Using the process detailed in <xref target="RFC8178"/>, the revisions in this document
become an extension of 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>file caching</dt>
          <dd>
            <t>A client cache, normally called the page cache, which caches the
contents of a regular file. Typical usage would be to accumulate
changes to be bunched together for writing to the server.</t>
          </dd>
          <dt>write hole</dt>
          <dd>
            <t>A write hole is a data corruption scenario where either two clients
are trying to write to the same erasure encoded block of dataor one
client is overwriting an existing erasure encoded block of data.
(Adapted from <xref target="I-D.haynes-nfsv4-flexfiles-v2"/>.) Note the hole
occurs when multiple data servers are not consistent with the
encoded block.</t>
          </dd>
        </dl>
        <t>Further, the definitions of the following terms are referenced as follows:</t>
        <ul spacing="normal">
          <li>
            <t>COMMIT ((<xref section="18.3" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>file delegations (<xref section="10.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>GETATTR (<xref section="18.7" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NF4REG (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NFS4ERR_ATTRNOTSUPP (<xref section="15.1.15.1" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>SETATTR (<xref section="18.30" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>system (<xref section="5.8.2.36" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
        </ul>
      </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="caching-of-file-data">
      <name>Caching of File Data</name>
      <t>The uncacheable file data attribute instructs the client to bypass
its page cache for the file.  This often includes write-behind
caching used to combine multiple pending WRITEs into a single
operation for more efficient remote processing. The uncacheable
file data attribute, inhibits this behavior with an effect similar
to the user using the O_DIRECT flag with the open call (<xref target="OPEN"/>).
Under some conditions clients might be able to determine that files
are not shared or do not exhibit access patterns suitable for
write-behind caching. In such situations, setting this attribute
provides a way to inform other clients of this judgment.</t>
      <t>The most pressing need for this feature is in connection with HPC
workloads. These often involve massive data transfers and require
extremely low latency. Write-behind caching can introduce unpredictable
latency, as data is buffered and flushed later.</t>
      <t>Another aspect of such workloads is the need to share data between
multiple writers. As the application data may span a data block
in a page cache, data needs to be flushed immediately for the
detection of write holes.</t>
      <section anchor="sec_files">
        <name>Uncacheable File Data</name>
        <t>If a file object is marked as uncacheable file data, all modifications
to the file <bcp14>SHOULD</bcp14> be immediately sent from the client to the server.
I.e., if a NFSv4.2 client fails to query this attribute, then it
can not meet the requirements of the attribute.</t>
        <t>For uncacheable data, the client <bcp14>MUST NOT</bcp14> retain file data in its
local data cache for the purpose of satisfying subsequent READ
requests or delaying transmission of WRITE data. Reads <bcp14>MUST</bcp14> bypass
the client data cache, and WRITE data <bcp14>MUST NOT</bcp14> be retained for
read-after-write satisfaction or for the purpose of combining
multiple WRITE requests.</t>
        <t>Caching of UNSTABLE WRITE data required to support the NFSv4.2
COMMIT operation is permitted and unaffected by this requirement.</t>
        <t>If the fattr4_uncacheable_file_data is not set when a client opens
a file and is changed whilst the file is open, the client is not
responsible for bypassing the page cache. It could flush the page
cache and make all subsequent IO be direct, but until the
client closes the file and reopens it, it is not required to
meet the requirements of the attribute.</t>
        <t>If the client has a OPEN_DELEGATE_WRITE delegation on the file
(see Section 10.4 of <xref target="RFC8881"/>), then the uncacheable file data
attribute takes precedence over the caching of file data. The
server can control this by not issuing file delegations for
files with this attribute.</t>
      </section>
    </section>
    <section anchor="sec_setting">
      <name>Setting the Uncacheable File Data Attribute</name>
      <t>The uncacheable file data attribute can allow for applications which
do not support O_DIRECT to be able to use O_DIRECT semantics.  One
approach to support this would be to add a new parameter to mount
<xref target="MOUNT"/> that specifies all newly created files under that mount
point would have their data not cacheable. Then the NFSv4.2 client
would use a SETATTR to set fattr4_uncacheable_file_data. This
approach is similar to the Solaris forcedirectio (See
<xref target="SOLARIS-FORCEDIRECTIO"/>) mount option.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>There is a prototype Hammerspace server which implements the
uncacheable file data attribute and a prototype Linux client which
treats the uncacheable file data attribute as meaning use O_DIRECT.
For the prototype, all files created under the mount point have the
fattr4_uncacheable_file_data set to be true.</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>This document imposes no new security considerations to 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="20" month="October" year="2025"/>
            <abstract>
              <t>   Parallel NFS (pNFS) allows a separation between the metadata (onto a
   metadata server) and data (onto a storage device) for a file.  The
   Flexible File Layout Type Version 2 is defined in this document as an
   extension to pNFS that allows the use of storage devices that require
   only a limited degree of interaction with the metadata server and use
   already-existing protocols.  Data protection is also added to provide
   integrity.  Both Client-side mirroring and the Erasure Coding
   algorithms are used for data protection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-flexfiles-v2-02"/>
        </reference>
        <reference anchor="MOUNT" target="https://man7.org/linux/man-pages/man2/mount.2.html">
          <front>
            <title>mount(2) - mount filesystem</title>
            <author>
              <organization>Linux man-pages project</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Linux" value="Programmer's Manual"/>
        </reference>
        <reference anchor="OPEN" target="https://man7.org/linux/man-pages/man2/open.2.html">
          <front>
            <title>open(2) - open and possibly create a file</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 306?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, 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>
