]> www.infradead.org Git - users/hch/scsi-layout-nvme.git/commitdiff
init draft-hellwig-nfsv4-scsi-layout-nvme-00
authorChristoph Hellwig <hch@lst.de>
Mon, 4 Jul 2016 07:58:56 +0000 (16:58 +0900)
committerChristoph Hellwig <hch@lst.de>
Fri, 8 Jul 2016 13:14:42 +0000 (22:14 +0900)
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0755]
README [new file with mode: 0644]
scsi_nvme_back_back.xml [new file with mode: 0644]
scsi_nvme_back_front.xml [new file with mode: 0644]
scsi_nvme_back_references.xml [new file with mode: 0644]
scsi_nvme_front.xml [new file with mode: 0644]
scsi_nvme_middle.xml [new file with mode: 0644]
scsi_nvme_rfc_end.xml [new file with mode: 0644]
scsi_nvme_rfc_start.xml [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..d4755e0
--- /dev/null
@@ -0,0 +1,13 @@
+*autogen*
+tmp.*
+draft*.xml
+draft*.html
+*.txt
+*.swp
+*.bak
+*.m4
+*.patch
+*.mbox
+*.x
+nfsv42.x
+testx.d
diff --git a/Makefile b/Makefile
new file mode 100755 (executable)
index 0000000..2b572bf
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,149 @@
+# Copyright (C) The IETF Trust (2014)
+#
+
+YEAR=`date +%Y`
+MONTH=`date +%B`
+DAY=`date +%d`
+PREVVERS=00
+VERS=00
+
+XML2RFC=xml2rfc
+
+BASEDOC=draft-hellwig-nfsv4-scsi-layout-nvme
+DOC_PREFIX=scsi_nvme
+
+autogen/%.xml : %.x
+       @mkdir -p autogen
+       @rm -f $@.tmp $@
+       @cat $@.tmp | sed 's/^\%//' | sed 's/</\&lt;/g'| \
+       awk ' \
+               BEGIN   { print "<figure>"; print" <artwork>"; } \
+                       { print $0 ; } \
+               END     { print " </artwork>"; print"</figure>" ; } ' \
+       | expand > $@
+       @rm -f $@.tmp
+
+all: html txt
+
+#
+# Build the stuff needed to ensure integrity of document.
+common: testx html
+
+txt: $(BASEDOC)-$(VERS).txt
+
+html: $(BASEDOC)-$(VERS).html
+
+xml: $(BASEDOC)-$(VERS).xml
+
+clobber:
+       $(RM) $(BASEDOC)-$(VERS).txt \
+               $(BASEDOC)-$(VERS).html \
+       export SPECVERS := $(VERS)
+       export VERS := $(VERS)
+
+clean:
+       rm -f $(AUTOGEN)
+       rm -rf autogen
+       rm -f $(BASEDOC)-$(VERS).xml
+       rm -f $(BASEDOC)-$(VERS).html
+       rm -f $(BASEDOC)-$(VERS).txt
+       rm -rf draft-$(VERS)
+       rm -f draft-$(VERS).tar.gz
+       rm -rf testx.d
+       rm -rf draft-tmp.xml
+
+# Parallel All
+pall: 
+       $(MAKE) xml
+       ( $(MAKE) txt ; echo .txt done ) & \
+       ( $(MAKE) html ; echo .html done ) & \
+       wait
+
+$(BASEDOC)-$(VERS).txt: $(BASEDOC)-$(VERS).xml
+       $(XML2RFC) --text $(BASEDOC)-$(VERS).xml -o $@
+
+$(BASEDOC)-$(VERS).html: $(BASEDOC)-$(VERS).xml
+       $(XML2RFC) --html $(BASEDOC)-$(VERS).xml -o $@
+
+${DOC_PREFIX}_front_autogen.xml: ${DOC_PREFIX}_front.xml Makefile
+       sed -e s/DAYVAR/${DAY}/g -e s/MONTHVAR/${MONTH}/g -e s/YEARVAR/${YEAR}/g < ${DOC_PREFIX}_front.xml > ${DOC_PREFIX}_front_autogen.xml
+
+${DOC_PREFIX}_rfc_start_autogen.xml: ${DOC_PREFIX}_rfc_start.xml Makefile
+       sed -e s/VERSIONVAR/${VERS}/g < ${DOC_PREFIX}_rfc_start.xml > ${DOC_PREFIX}_rfc_start_autogen.xml
+
+AUTOGEN =      \
+               ${DOC_PREFIX}_front_autogen.xml \
+               ${DOC_PREFIX}_rfc_start_autogen.xml
+
+START_PREGEN = ${DOC_PREFIX}_rfc_start.xml
+START= ${DOC_PREFIX}_rfc_start_autogen.xml
+END=   ${DOC_PREFIX}_rfc_end.xml
+
+FRONT_PREGEN = ${DOC_PREFIX}_front.xml
+
+IDXMLSRC_BASE = \
+       ${DOC_PREFIX}_middle.xml \
+       ${DOC_PREFIX}_back_front.xml \
+       ${DOC_PREFIX}_back_references.xml \
+       ${DOC_PREFIX}_back_back.xml
+
+IDCONTENTS = ${DOC_PREFIX}_front_autogen.xml $(IDXMLSRC_BASE)
+
+IDXMLSRC = ${DOC_PREFIX}_front.xml $(IDXMLSRC_BASE)
+
+draft-tmp.xml: $(START) Makefile $(END) $(IDCONTENTS)
+               rm -f $@ $@.tmp
+               cp $(START) $@.tmp
+               chmod +w $@.tmp
+               for i in $(IDCONTENTS) ; do cat $$i >> $@.tmp ; done
+               cat $(END) >> $@.tmp
+               mv $@.tmp $@
+
+$(BASEDOC)-$(VERS).xml: draft-tmp.xml $(IDCONTENTS) $(AUTOGEN)
+               rm -f $@
+               cp draft-tmp.xml $@
+
+genhtml: Makefile gendraft html txt draft-$(VERS).tar
+       ./gendraft draft-$(PREVVERS) \
+               $(BASEDOC)-$(PREVVERS).txt \
+               draft-$(VERS) \
+               $(BASEDOC)-$(VERS).txt \
+               $(BASEDOC)-$(VERS).html \
+               $(BASEDOC)-dot-x-04.txt \
+               $(BASEDOC)-dot-x-05.txt \
+               draft-$(VERS).tar.gz
+
+testx: 
+       rm -rf testx.d
+       mkdir testx.d
+       ( cd testx.d ; \
+               rpcgen -a labelednfs.x ; \
+               $(MAKE) -f make* )
+
+spellcheck: $(IDXMLSRC)
+       for f in $(IDXMLSRC); do echo "Spell Check of $$f"; spell +dictionary.txt $$f; done
+
+AUXFILES = \
+       dictionary.txt \
+       gendraft \
+       Makefile \
+       errortbl \
+       rfcdiff \
+       xml2rfc_wrapper.sh \
+       xml2rfc
+
+DRAFTFILES = \
+       $(BASEDOC)-$(VERS).txt \
+       $(BASEDOC)-$(VERS).html \
+       $(BASEDOC)-$(VERS).xml
+
+draft-$(VERS).tar: $(IDCONTENTS) $(START_PREGEN) $(FRONT_PREGEN) $(AUXFILES) $(DRAFTFILES)
+       rm -f draft-$(VERS).tar.gz
+       tar -cvf draft-$(VERS).tar \
+               $(START_PREGEN) \
+               $(END) \
+               $(FRONT_PREGEN) \
+               $(IDCONTENTS) \
+               $(AUXFILES) \
+               $(DRAFTFILES) \
+               gzip draft-$(VERS).tar
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..e89a62f
--- /dev/null
+++ b/README
@@ -0,0 +1,18 @@
+This draft describes how to use the pNFS SCSI layout with NVMe
+
+http://www.ietf.org/html.charters/nfsv4-charter.html
+http://www.ietf.org/mail-archive/web/nfsv4/index.html
+
+NOTE: The drafts contained here may change after it is posted to the IETF site. The ITEF site is always the definitive authority on content.
+
+To compile the XML files into text files:
+
+1. Install xml2rfc
+   http://xml.resource.org/
+
+   These instructions have been tested with version 2
+
+2. Build
+
+   > make
+
diff --git a/scsi_nvme_back_back.xml b/scsi_nvme_back_back.xml
new file mode 100644 (file)
index 0000000..c7d3c41
--- /dev/null
@@ -0,0 +1,4 @@
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+</back>
diff --git a/scsi_nvme_back_front.xml b/scsi_nvme_back_front.xml
new file mode 100644 (file)
index 0000000..90d6430
--- /dev/null
@@ -0,0 +1,4 @@
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+<back>
diff --git a/scsi_nvme_back_references.xml b/scsi_nvme_back_references.xml
new file mode 100644 (file)
index 0000000..3066d6a
--- /dev/null
@@ -0,0 +1,75 @@
+<!-- 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>
diff --git a/scsi_nvme_front.xml b/scsi_nvme_front.xml
new file mode 100644 (file)
index 0000000..f259a04
--- /dev/null
@@ -0,0 +1,30 @@
+<!-- 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="YEARVAR" month="MONTHVAR" day="DAYVAR"/>
+
+    <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>
diff --git a/scsi_nvme_middle.xml b/scsi_nvme_middle.xml
new file mode 100644 (file)
index 0000000..632c8cf
--- /dev/null
@@ -0,0 +1,125 @@
+<!-- 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>
diff --git a/scsi_nvme_rfc_end.xml b/scsi_nvme_rfc_end.xml
new file mode 100644 (file)
index 0000000..d9342ac
--- /dev/null
@@ -0,0 +1,4 @@
+<!-- Copyright (C) The IETF Trust (2014) -->
+<!-- Copyright (C) The Internet Society (2014) -->
+
+</rfc>
diff --git a/scsi_nvme_rfc_start.xml b/scsi_nvme_rfc_start.xml
new file mode 100644 (file)
index 0000000..7e0b3fa
--- /dev/null
@@ -0,0 +1,54 @@
+<?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-VERSIONVAR.txt" >
+