<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

<!-- XML source for the Requirement Wars internet draft document -->

<!-- To generate text with the xml2rfc tool tclsh8.3 xml2rfc.tcl 
     xml2rfc this_file.xml that_file.txt which puts the formatted 
     text into that_file.txt -->

<!-- processing instructions (for a complete list and description,
     see file http://xml.resource.org/authoring/README.html -->

<!-- try to enforce the ID-nits conventions and DTD validity -->

<?rfc strict="yes" ?>

<!-- items used when reviewing the document -->

<?rfc comments="yes" ?>  <!-- controls display of <cref> elements -->
<?rfc inline="yes" ?>    <!-- when no, put comments at end in comments section,
                                otherwise, put inline -->
<?rfc editing="no" ?>   <!-- when yes, insert editing marks -->

<!-- create table of contents (set it options).  
     Note the table of contents may be omitted
     for very short documents --> 

<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>

<!-- choose the options for the references. Some like
     symbolic tags in the references (and citations)
     and others prefer numbers. --> 

<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>

<!-- these two save paper: start new paragraphs from the same page etc. -->

<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<!-- end of list of processing instructions -->

<rfc
    category="info"
    ipr="trust200902"
    docName="draft-hellwig-nfsv4-scsi-layout-nvme-00.txt" >

<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

<front>
    <title abbrev="pNFS SCSI Layout for NVMe">
      Using the Parallel NFS (pNFS) SCSI Layout with NVMe
    </title>

    <author fullname="Christoph Hellwig"
            initials="C."
            surname="Hellwig">
      <address>
        <email>hch@lst.de</email>
      </address>
    </author>

    <date year="2016" month="July" day="08"/>

    <area>Transport</area>
    <workgroup>NFSv4</workgroup>
    <keyword>NFSv4</keyword>

    <abstract>
      <t>
        This document explains how to use the Parallel Network File System
	(pNFS) SCSI Layout Type with transports using the NVMe or NVMe
	over Fabrics protocol.
      </t>
    </abstract>
</front>
<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->
<middle>

<section anchor="sec:intro" title="Introduction">
  <t>
    The pNFS SCSI layout <xref target="scsi-layout" /> is a layout type
    that allows NFS clients to directly perform I/O to block storage
    devices while bypassing the MDS.  It is specified by using concepts
    from the SCSI protocol family for the data path to the storage
    devices.  This documents explains how to access PCI Express, RDMA
    or Fibre Channel devices using the NVM Express protocol
    <xref target="NVME" /> using the SCSI layout type by leveraging
    the SCSI Translation Reference (<xref target="NVME-STLR" />).
    This document does not amend the pNFS SCSI layout document in any
    way, instead of explains how to map the SCSI constructs used in
    the pNFS SCSI layout document to NVMe concepts using the NVMe
    SCSI translation reference.
  </t>

  <section anchor="ssc:intro:conv" title="Conventions Used in This Document">
    <t>
      The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref target="RFC2119" />.
    </t>
  </section>

  <section anchor="ssc:intro:defs" title="General Definitions">
    <t>
      The following definitions are provided for the purpose of providing
      an appropriate context for the reader.
    </t>

    <t>
      <list style='hanging'>
        <t hangText="Client">
          The "client" is the entity that accesses the NFS server's
          resources.  The client may be an application that contains the
          logic to access the NFS server directly.  The client may also be
          the traditional operating system client that provides remote file
          system services for a set of applications.
        </t>

        <t hangText="Server">
          The "server" is the entity responsible for coordinating client
          access to a set of file systems and is identified by a server
          owner.
        </t>
      </list>
    </t>
  </section>
</section>

<section anchor='sec:slm' title='SCSI Layout mapping to NVMe'>
  <t>
    The SCSI layout definition <xref target="scsi-layout" /> only references
    few SCSI specific concepts directly.  This document uses the
    NVMe SCSI Translation Reference document (<xref target="NVME-STLR" />)
    to provide mappings from these SCSI concepts to NVM Express 
    (<xref target="NVME" />) concepts that SHOULD be used when using the
    pNFS SCSI layout with NVMe devices.
  </t>
  <t>
    The NVMe SCSI Translation Reference is used to define the
    NVMe command and concepts that SHOULD be used to implement the
    pNFS SCSI layout.  Implementations MAY or MAY not use an actual
    SCSI to NVMe translation layer.
  </t>

  <section anchor='ssc:volident' title='Volume Identification'>
    <t>
      The SCSI layout uses the Device Identification VPD page (page code
      0x83) from <xref target="SPC4" /> to identify the devices used by
      a layout.  Section 6.1.4 of <xref target="NVME-STLR" /> explains
      how an an implementation SHOULD construct a valid Device
      Identification VPD page based on the NVMe Identify data.
      Only NVMe devices that support either the EUI64 or NGUID value in the
      Identify Namespace data SHOULD be used as storage devices for the
      pNFS SCSI layout, as the methods based on the Serial Number for
      legacy devices might not be suitable for unique addressing needs.
    </t>
  </section>

  <section anchor='ssc:fence' title='Client Fencing'>
    <t>
      The SCSI layout uses Persistent Reservations to provide client
      fencing.  For this both the MDS and the Clients have to register
      a key with the storage device, and the MDS has to create a
      reservation on the storage device.
      Section 6.7 of <xref target="NVME-STLR" /> contains a full
      mapping of the required PERSISTENT RESERVE IN and
      PERSISTENT RESERVE OUT SCSI command to NVMe commands which
      SHOULD be used when using NVMe devices as storage devices
      for the pNFS SCSI layout.
    </t>
  </section>

  <section anchor='ssc:caches' title='Volatile write caches'>
    <t>
      The equivalent of the WCE bit in the Caching Mode Page in
      <xref target="SBC3" /> is the Write Cache Enable field in the
      NVMe Get Features command, see Section 6.3.3.2 of
      <xref target="NVME-STLR" />.  If a write cache is enable
      on a NVMe device used as a storage device for the pNFS SCSI layout,
      the MDS must ensure to use the NVMe FLUSH command to flush
      the volatile write cache.
    </t>
  </section>
</section>

<section anchor="sec:security" title="Security Considerations">
  <t>
   Since no protocol changes are proposed here, no security
   considerations apply.
  </t>
</section>

<section anchor="sec:iana" title="IANA Considerations">
  <t>
   The document does not require any actions by IANA.
  </t>
</section>

</middle>
<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

<back>
<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

<references title="Normative References">
  <reference anchor='RFC2119'>
    <front>
      <title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
      <author initials='S.' surname='Bradner' fullname='Scott Bradner'>
        <organization>Harvard University</organization>
	<address>
	  <postal>
	    <street>1350 Mass. Ave.</street>
	    <street>Cambridge</street>
	    <street>MA 02138</street>
	  </postal>
	  <phone>- +1 617 495 3864</phone>
	  <email>sob@harvard.edu</email>
	</address>
      </author>
      <date year='1997' month='March' />
    </front>
  </reference>

  <reference anchor='scsi-layout'>
    <front>
       <title>Parallel NFS (pNFS) SCSI Layout</title>
       <author initials='C.' surname='Hellwig' fullname='Christoph Hellwig'/>
       <date month='June' year='2016'/>
    </front>
  </reference>

  <reference anchor='SPC4'>
    <front>
      <title>SCSI Primary Commands-4</title>
      <author>
         <organization>INCITS Technical Committee T10</organization>
      </author>
      <date year="2015"/>
    </front>
    <seriesInfo name="ANSI INCITS" value="513-2015"/>
  </reference>

  <reference anchor='SBC3'>
    <front>
      <title>SCSI Block Commands-3</title>
      <author>
         <organization>INCITS Technical Committee T10</organization>
      </author>
      <date year="2014"/>
    </front>
    <seriesInfo name="ANSI INCITS" value="INCITS 514-2014"/>
    <seriesInfo name="ISO/IEC" value="14776-323"/>
  </reference>

  <reference anchor='NVME'>
    <front>
      <title>NVM Express Revision 1.2.1</title>
      <author>
         <organization>NVM Express, Inc.</organization>
      </author>
      <date month="July" year="2016"/>
    </front>
  </reference>

  <reference anchor='NVME-STLR'>
    <front>
      <title>NVM Express: SCSI Translation Reference Revision 1.5</title>
      <author>
         <organization>NVM Express, Inc.</organization>
      </author>
      <date month="June" year="2015"/>
    </front>
  </reference>

</references>
<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

</back>
<!-- Copyright (C) The IETF Trust (2014) -->
<!-- Copyright (C) The Internet Society (2014) -->

</rfc>
