Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

3 Definitions

3.1 Common definitions


3.1.1 Capsule
An NVMe unit of information exchange used in NVMe over Fabrics (see NVM Express over Fabrics, Revision 1.0)

3.1.2 Data Series


A memory area representing the read or write data associated with a NVMe or NVMe Fabrics command. The data
may be request or response data, LBA data, and/or metadata. FC-NVME host adapters resolve the Data Series to
physical memory locations on the host system.

3.1.3 LBA Data


Data read from or written to NVMe storage device

3.1.4 metadata
Contextual information about particular LBA data (see NVM Express, Revision 1.2.1)

3.1.5 NVMe Controller


An entity which implements the NVMe function (see NVM Express, Revision 1.2.1)

3.1.6 NVMe SGL


An NVMe command-related scatter/gather list (SGL) using NVMe SGL Segments and NVMe SGL Descriptors (see
NVM Express, Revision 1.2.1).

3.1.7 NVMe SGL Descriptor


An element within an NVMe SGL which describes a memory area, pseudo-memory area (Bit Bucket), or location of
a new SGL Segment (see NVM Express, Revision 1.2.1).

3.1.8 Scatter/gather list


A structure used to represent discontiguous memory areas that correspond to the read or write data associated with
an NVMe command. Different Operating System environments may have different structure definitions that are
then adapted to the adapter/transport interface. NVM Express has its own definitions.

3.1.9 Submission Queue Element (SQE)


An element within a NVME Admin or IO submission queue used to submit an NVME or NVME Fabrics command
to a NVME controller. (see NVM Express, Revision 1.2.1)
4 Data Transfer
4.1 Overview
The NVMe over Fabrics definition (see NVM Express over Fabrics, Revision 1.0) specifies Command Capsules and
Response Capsules. Command Capsules contain a SQE containing a NVMe command and either read data (request
or LBA data) or an SGL containing transport-related information describing the data (read or write) associated with
the command. Response Capsules contain a CQE and, if an SGL is not contained in the Command Capsule, the
write data (response or LBA data) associated with the command.
The FC-NVME transport transfers the data portion of the Command or Response Capsule in messages independent
from those that contain the SQE or CQE. The FC-NVMe transport requires the Command Capsule to contain a SGL
that refers to the data associated with the command. Therefore, a Command Capsule contains a SQE and a SGL and
is transferred by a NVMe_CMND IU. The Response Capsule contains a CQE and is transferred in a NVMe_ERSP
IU or a capsule with a successful CQE is inferred by a NVMe_RSP IU.
FC-NVME associates a FC exchange with each NVMe or NVMe Fabrics command. The exchange is used by all
IUs to provide the command context to the associated FC endpoints. For each FC exchange, a unique memory area,
called a Data Series, is defined. The Data Series is a stream of bytes of length N that FC-NVME references by an
offset between 0 and (N-1). The Data Series corresponds to the command-related data area associated with the
NVMe command. The FC-NVME host and transport adapters convert from the Data Series bytestream to the
NVME host system’s SGL When the FC-NVME subsystem transport transmits read data, it uses NVMe_DATA IUs
with the Parameter field in the FC Frames for the IU indicating the locations in the Data Series the frame data
corresponds to. When the FC-NVME subsystem transport requests write data, it requests the data with a
NVMe_XFER_RDY IU with the offset (Relative Offset) and length (Burst Length) of the range within the Data
Series being requested. The FC-NVME host transport transfers the requested write data using NVMe_DATA IUs
with the Parameter field in the FC Frames for the IU indicating the locations in the Data Series the frame data
corresponds to.
The Data Series for a FC-NVME exchange shall consist of a concatenated set of contiguous data regions for the
NVMe command. Regions within the Data Series may be referenced by their offset into the Data Series. The first
data region in the Data Series, starting at offset 0, shall be the command’s request/response data 1 or LBA data2.
Subsequent data regions may consist of metadata (if present) or other yet-to-be-defined data types. Address fields
defined by NVME-specified structures, such as SGL Block Descriptors (SGL1) or Metadata Pointers (MPTR), shall
be interpreted by FC-NVME as an offset relative to the exchange’s Data Series.
For example: the SGL Block Data Descriptor in the SQE of the command address shall have its address field value
set to the offset within the Data Series that corresponds to the start of the command’s payload. As FC-NVME
requires the request/response or LBA-related payload to be the first region in the Data Series, the Block Data
Descriptor Address field shall be set to 0.

4.2 SGL Data


4.2.1 Overview
NVM Express defines a mechanism for transmitting NVMe SGLs (i.e., scatter/gather lists) across a fabric. SGL
Descriptors within the SGL provide information for the transport to locate the associated memory area. FC-NVME
adapters shall map the initiator host scatter/gather memory lists to a Data Series associated with the command. The
NVMe SGL descriptors exchanged on the fabric shall contain information that will be interpreted by the transport as
being relative to the Data Series.

1
If the command is unrelated to Logical Block Addressing.
2
Note: Metadata, which is transferred as a contiguous part of logical blocks, is considered LBA data. Metadata,
transferred as a separate buffer, is not considered LBA data.
Figure 1 illustrates the command and its Data Series:

FC-NVME CMND IU
SQE

FC-NVME Data Series for the command


Rqst/Rsp or LBAData Other Data
0 N-1

FC-NVME CMND_IU contains Command Capsule.


Memory Region #1 Capsule contains SQE with SGL Block Data
Descriptor. Descriptor Address field references
offset of data area within Data Series for the
Memory Region #2 command.
Host FC-NVME protocol IU’s reference offsets relative to
Memory Region #3 SGL Data Series.

FC initiator adapter converts transport IU offset


values relative to Data Series to host environment
SGL element and range for data retrieval (writes) or
Memory Region #N
placement (reads).

4.2.2 SQE SGL Entry Format


For transmission, the SGL Entry 1 (SGL1) field within the SQE shall be (see NVM Express, Revision 1.2.1) set to
the following:
a) The SGL Descriptor Type shall be 0h;
b) The SGL Descriptor Sub Type shall be 0h;
c) The Address field of the SGL Block Descriptor shall be zero; and
d) The Length field of the SGL Block Descriptor shall contain the length of the command request/response
payload or LBA payload for the command.
Note: The Nvme_cmnd_IU Data Length field shall be set to the length of the Data Series.

You might also like