<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:foaf="https://xmlns.com/foaf/0.1/" xmlns:og="https://ogp.me/ns#" xmlns:rdfs="https://www.w3.org/2000/01/rdf-schema#" xmlns:schema="https://schema.org/" xmlns:sioc="https://rdfs.org/sioc/ns#" xmlns:sioct="https://rdfs.org/sioc/types#" xmlns:skos="https://www.w3.org/2004/02/skos/core#" xmlns:xsd="https://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://www.linuxjournal.com/tag/nvme">
  <channel>
    <title>NVMe</title>
    <link>https://www.linuxjournal.com/tag/nvme</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Data in a Flash, Part IV: the Future of Memory Technologies</title>
  <link>https://www.linuxjournal.com/content/data-flash-part-iv-future-memory-technologies</link>
  <description>  &lt;div data-history-node-id="1340747" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock-High-Speed-Hi-tech-Abstract--232284442_1.jpg" width="900" height="636" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
I have spent the first three parts of this series describing the
evolution and current state of Flash storage. I also described how to configure an NVMe
over Fabric (NVMeoF) storage network to export NVMe volumes across RDMA
over Converged Ethernet (RoCE) and again over native TCP. [See Petros' &lt;a href="https://www.linuxjournal.com/content/data-flash-part-i-evolution-disk-storage-and-introduction-nvme"&gt;"Data
in a Flash, Part I: the Evolution of Disk Storage and an Introduction to
NVMe"&lt;/a&gt;, &lt;a href="https://www.linuxjournal.com/content/data-flash-part-ii-using-nvme-drives-and-creating-nvme-over-fabrics-network"&gt;"Data
in a Flash, Part II: Using NVMe Drives and Creating an NVMe over Fabrics
Network"&lt;/a&gt; and &lt;a href="https://www.linuxjournal.com/content/data-flash-part-iii-nvme-over-fabrics-using-tcp"&gt;"Data
in a Flash, Part III: NVMe over Fabrics Using TCP"&lt;/a&gt;.]
&lt;/p&gt;

&lt;p&gt;
But what does
the future of memory technologies look like? With traditional Flash
technologies that are enabled via NVMe, you should continue to expect
higher capacities. For instance, what comes after QLC or Quad-Level Cells
NAND technology? Only time will tell. The next-generation NVMe
specification will introduce a protocol standard operating across more PCI
Express lanes and at a higher bandwidth. As memory technologies continue to
evolve, the method in which you plug that technology into your computers will
evolve with it.
&lt;/p&gt;

&lt;p&gt;
Remember, the ultimate goal is to move closer to the CPU and reduce access
times (that is, latencies).
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/u%5Buid%5D/Data%20Performance%20Gap.png" width="717" height="237" alt="""" /&gt;&lt;p&gt;
&lt;em&gt;Figure 1. The Data Performance Gap as You Move Further Away from the
CPU&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
Storage Class Memory&lt;/h3&gt;

&lt;p&gt;
For years, vendors have been developing a technology in which you are able
to plug persistent memory into traditional DIMM slots. Yes, these are the
very same slots that volatile DRAM also uses. Storage Class Memory (SCM)
is a newer hybrid storage tier. It's not exactly memory, and it's also not
exactly storage. It lives closer to the CPU and comes in two forms: 1)
traditional DRAM backed by a large capacitor to preserve data to a local
NAND chip (for example, NVDIMM-N) and 2) a complete NAND module (NVDIMM-F). In the
first case, you retain DRAM speeds, but you don't get the capacity.
Typically, a
DRAM-based NVDIMM is behind the latest traditional DRAM sizes. Vendors such
as Viking Technology and Netlist are the main producers of DRAM-based
NVDIMM products.
&lt;/p&gt;

&lt;p&gt;
The second, however, will give you the larger capacity sizes, but it's
not nearly as fast as DRAM speeds. Here, you will find your standard
NAND—the
very same as found in modern Solid State Drives (SSDs) fixed onto your
traditional DIMM modules.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/data-flash-part-iv-future-memory-technologies" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Fri, 19 Jul 2019 11:30:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1340747 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Data in a Flash, Part III: NVMe over Fabrics Using TCP</title>
  <link>https://www.linuxjournal.com/content/data-flash-part-iii-nvme-over-fabrics-using-tcp</link>
  <description>  &lt;div data-history-node-id="1340651" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock-High-Speed-Hi-tech-Abstract--232284442_0.jpg" width="900" height="636" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;A remote NVMe block device exported via an NVMe over
Fabrics network using TCP.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
Version 5.0 of the Linux kernel brought with it many wonderful features,
one of which was the introduction of NVMe over Fabrics (NVMeoF) across
native TCP. If you recall, in the previous part to this series (&lt;a href="https://www.linuxjournal.com/content/data-flash-part-ii-using-nvme-drives-and-creating-nvme-over-fabrics-network"&gt;"Data
in a Flash, Part II: Using NVMe Drives and Creating an NVMe over Fabrics
Network"&lt;/a&gt;, I explained how to enable
your NVMe network across RDMA (an Infiniband protocol) through a little
method referred to as RDMA over Converged Ethernet (RoCE). As the name
implies, it allows for the transfer of RDMA across a traditional Ethernet
network. And although this works well, it introduces a bit of overhead
(along with latencies). So when the 5.0 kernel introduced native TCP
support for NVMe targets, it simplifies the method or procedure one
needs to take to configure the same network, as shown in my last article, and
it also makes accessing the remote NVMe drive faster.
&lt;/p&gt;

&lt;h3&gt;
Software Requirements&lt;/h3&gt;

&lt;p&gt;
To continue with this tutorial, you'll need to have a 5.0
Linux kernel or later installed, with the following modules built and
inserted into the operating systems of both your initiator (the server
importing the remote NVMe volume) and the target (the server exporting
its local NVMe volume):

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
# NVME Support
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
# CONFIG_NVME_MULTIPATH is not set
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
# CONFIG_NVME_FC is not set
CONFIG_NVME_TCP=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
# CONFIG_NVME_TARGET_FC is not set
CONFIG_NVME_TARGET_TCP=m
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
More specifically, you need the module to import the remote NVMe volume:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
CONFIG_NVME_TCP=m
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
And the module to export a local NVMe volume:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
CONFIG_NVME_TARGET_TCP=m
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Before continuing, make sure your physical (or virtual)
machine is up to date. And once you verify that to be the case,
make sure you are able to see all locally connected NVMe devices
(which you'll export across your network):

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ cat /proc/partitions |grep -e nvme -e major
major minor  #blocks  name
 259        0 3907018584 nvme2n1
 259        1 3907018584 nvme3n1
 259        2 3907018584 nvme0n1
 259        3 3907018584 nvme1n1
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
If you don't see any connected NVMe devices, make sure the kernel
module is loaded:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
petros@ubu-nvme1:~$ lsmod|grep nvme
nvme                   32768  0
nvme_core              61440  1 nvme
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
The following modules need to be loaded on the initiator:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ sudo modprobe nvme
$ sudo modprobe nvme-tcp
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
And, the following modules need to be loaded on the target:

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/data-flash-part-iii-nvme-over-fabrics-using-tcp" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 10 Jun 2019 11:00:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1340651 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Data in a Flash, Part II: Using NVMe Drives and Creating an NVMe over Fabrics Network</title>
  <link>https://www.linuxjournal.com/content/data-flash-part-ii-using-nvme-drives-and-creating-nvme-over-fabrics-network</link>
  <description>  &lt;div data-history-node-id="1340246" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock-High-Speed-Hi-tech-Abstract--232284442.jpg" width="800" height="565" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;By design, NVMe drives are intended to provide local access to the
machines they are plugged in to; however, the NVMe over Fabric
specification seeks to address this very limitation by enabling remote
network access to that same device.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
This article puts into practice what you learned in &lt;a href="//www.linuxjournal.com/content/data-flash-part-i-evolution-disk-storage-and-introduction-nvme"&gt;Part I&lt;/a&gt; and shows
how to use NVMe drives in a Linux environment. But, before continuing,
you first need to make sure that your physical (or virtual)
machine is up to date. Once you verify that to be the case,
make sure you're able to see all connected NVMe devices:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ cat /proc/partitions |grep -e nvme -e major
major minor  #blocks  name
 259        0 3907018584 nvme2n1
 259        1 3907018584 nvme3n1
 259        2 3907018584 nvme0n1
 259        3 3907018584 nvme1n1
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Those devices also will appear in &lt;code&gt;sysfs&lt;/code&gt;:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ ls /sys/block/|grep nvme
nvme0n1
nvme1n1
nvme2n1
nvme3n1
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
If you don't see any connected NVMe devices, make sure the kernel
module is loaded:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
petros@ubu-nvme1:~$ lsmod|grep nvme
nvme                   32768  0
nvme_core              61440  1 nvme
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Next, install the drive management utility called
&lt;code&gt;nvme-cli&lt;/code&gt;. This utility is defined and maintained by the very
same
NVM Express committee that defined the NVMe specification. The nvme-cli
source code is hosted on
&lt;a href="https://github.com/linux-nvme/nvme-cli"&gt;GitHub&lt;/a&gt;. Fortunately,
some operating
systems offer this package in their internal repositories.
Installing it on the latest Ubuntu looks something like this:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
petros@ubu-nvme1:~$ sudo add-apt-repository universe
petros@ubu-nvme1:~$ sudo apt update &amp;&amp; sudo apt install
 ↪nvme-cli
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
Using this utility, you're able to list more details of all connected
NVMe drives (note: the tabular output below has been reformatted and
truncated to better fit here):

&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/data-flash-part-ii-using-nvme-drives-and-creating-nvme-over-fabrics-network" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 20 May 2019 11:00:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1340246 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Data in a Flash, Part I: the Evolution of Disk Storage and an Introduction to NVMe</title>
  <link>https://www.linuxjournal.com/content/data-flash-part-i-evolution-disk-storage-and-introduction-nvme</link>
  <description>  &lt;div data-history-node-id="1340244" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock--181254841.jpg" width="800" height="532" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;NVMe drives have paved the way for computing at stellar speeds, but
the technology didn't suddenly appear overnight. It was
through an evolutionary process that we now rely on the very performant
SSD for our primary storage tier.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
Solid State Drives (SSDs) have taken the computer industry
by storm in recent years. The technology is impressive with its high-speed capabilities. It
promises low-latency access to sometimes critical data while
increasing overall performance, at least when compared to what is now
becoming the legacy Hard Disk Drive (HDD). With each passing year, SSD
market shares continue to climb, replacing the HDD in many sectors.
The effects of this are seen in personal, mobile and server
computing.
&lt;/p&gt;

&lt;p&gt;
IBM first unleashed the HDD into the computing world in 1956. By
the 1960s, the HDD became the dominant secondary storage device
for general-purpose computers (&lt;em&gt;emphasis on secondary storage
device&lt;/em&gt;, memory being the first). Capacity and performance were the primary characteristics
defining the HDD. In many
ways, those characteristics continue to define the technology—although,
not in the most positive ways (more details on that shortly).
&lt;/p&gt;

&lt;p&gt;
The first IBM-manufactured hard drive, the 350 RAMAC, was as large as two
medium-sized refrigerators with a total capacity of 3.75MB on
a stack of 50 disks. Modern HDD technology has produced disk drives with
volumes as high as 16TB, specifically with the more recent
Shingled Magnetic Recording (SMR) technology coupled with helium—yes,
that's the same chemical element abbreviated as &lt;em&gt;He&lt;/em&gt; in the
periodic table. The sealed helium gas increases the potential speed of the
drive while creating less drag and turbulence. Being less dense than
air, it also allows more platters to be stacked in the same space used
by 2.5" and 3.5" conventional disk drives.
&lt;/p&gt;

&lt;img src="https://www.linuxjournal.com/sites/default/files/styles/max_650x650/public/u%5Buid%5D/12598f1.jpg" width="640" height="480" alt="""" class="image-max_650x650" /&gt;&lt;p&gt;
&lt;em&gt;Figure 1. A lineup of Standard HDDs throughout Their History
and across All Form Factors
(by Paul R. Potts—Provided by Author, CC BY-SA 3.0 us,
&lt;a href="https://commons.wikimedia.org/w/index.php?curid=4676174"&gt;https://commons.wikimedia.org/w/index.php?curid=4676174&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
A disk drive's performance typically is calculated by the time
required to move the drive's heads to a specific track or cylinder
and the time it takes for the requested sector to move under the
head—that is, the latency. Performance is also measured at the
rate by which the data
is transmitted.
&lt;/p&gt;

&lt;p&gt;
Being a mechanical device, an HDD does not perform nearly as fast as
memory. A lot of moving components add to latency times
and decrease the overall speed by which you can access data (for both read
and write operations).
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/data-flash-part-i-evolution-disk-storage-and-introduction-nvme" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 29 Apr 2019 11:30:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1340244 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>JMR SiloStor NVMe SSD Drives</title>
  <link>https://www.linuxjournal.com/content/jmr-silostor-nvme-ssd-drives</link>
  <description>  &lt;div data-history-node-id="1339460" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/12217f1.jpg" width="600" height="426" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/james-gray" lang="" about="https://www.linuxjournal.com/users/james-gray" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;James Gray&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
Compute-intensive workflows are the environments in which the newly developed &lt;a href="https://jmr.com"&gt;JMR&lt;/a&gt;
SiloStor NVMe family of SSD drives is designed to show its colors. Ideal for HPC,
data centers, genome research, content creation, CGI/animation, codec processing
and gaming, among others, the SiloStor drive family comes in three NVMe/PCIe
configurations: single-drive module, x4 PCIe connectivity in 512GB/1TB/2TB
capacities; dual-drive, x8 connectivity in 1TB/2TB/4TB capacities; and quad-drive
module, x8 connectivity, available in 2TB/4TB/8TB capacities. The dual- and
quad-drive cards incorporate a PCIe switch, and the drives can be striped (on a
single card) for additional performance. 
&lt;/p&gt;
&lt;img src="https://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1000009/12217f1.jpg" alt="" title="" class="imagecache-large-550px-centered" /&gt;&lt;p&gt;
All SiloStor designs incorporate active
heatsink coolers on the drive modules themselves, maintaining low operating
temperatures even during intensive sequential write operations. Key performance
metrics include &lt;1 mS average access time of &lt;1 mS, 2 million hours MTBF, 1,200
TBW minimum endurance, 90,000/70,000 IOPS random 4K read/write speed and
4,000/3,000 MB/sequential read/write speed.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/jmr-silostor-nvme-ssd-drives" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 09 Aug 2017 15:50:57 +0000</pubDate>
    <dc:creator>James Gray</dc:creator>
    <guid isPermaLink="false">1339460 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>NVMe over Fabrics Support Coming to the Linux 4.8 Kernel</title>
  <link>https://www.linuxjournal.com/content/nvme-over-fabrics-support-coming-linux-48-kernel</link>
  <description>  &lt;div data-history-node-id="1339138" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/NVMeF%20Diagram.png" width="600" height="329" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/petros-koutoupis" lang="" about="https://www.linuxjournal.com/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Petros Koutoupis&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
The Flash Memory Summit recently wrapped up its conferences in Santa
Clara, California, and only one type of Flash technology stole the show:
NVMe over Fabrics (NVMeF). From the many presentations and company
announcements, it was obvious NVMeF was the topic that most interested the
attendees.
&lt;/p&gt;

&lt;p&gt;
With the first industry specifications announced in 2011,
&lt;a href="https://www.nvmexpress.org"&gt;Non-Volatile
Memory Express&lt;/a&gt; (NVMe) quickly rose to
the forefront of Solid State Drive (SSD) technologies. Historically,
SSDs were built on top of Serial ATA (SATA), Serial Attached SCSI
(SAS) and Fibre Channel buses. These interfaces worked well for the
maturing Flash memory technology, but with all the protocol overhead
and bus speed limitations, it did not take long for these drives to
experience performance bottlenecks. Today, modern SAS drives operate
at 12 Gbit/s, while modern SATA drives operate at 6 Gbit/s. This is why
the technology shifted its focus to PCI Express (PCIe). With the bus
closer to the CPU and PCIe capable of performing at increasingly stellar
speeds, SSDs seemed to fit right in. Using PCIe 3.0, modern drives can
achieve speeds as high as 40 Gbit/s. Leveraging the benefits of PCIe,
it was then that the NVMe was conceived. Support for NVMe drives was
integrated into the Linux 3.3 mainline kernel (2012).
&lt;/p&gt;

&lt;p&gt;
What really makes NVMe shine over the operating system's SCSI stack is
its simpler and faster queueing mechanism. These are called the Submission
Queue (SQ) and Completion Queue (CQ). Each queue is a circular buffer
of a fixed size that the operating system uses to submit one or more
commands to the NVMe controller. One or more of these queues also can be
pinned to specific cores, which allows for more uninterrupted operations.
&lt;/p&gt;

&lt;p&gt;
Almost immediately, the PCIe SSDs were marketed for enterprise-class
computing with a much higher price tag. Although still more expensive
than its SAS or SATA cousins, the dollar per gigabyte of Flash memory
continues to drop—enough to convince more companies to adopt the
technology. However, there was still a problem. Unlike the SAS or SATA
SSDs, NVMe drives did not scale very well. They were confined to the
server they were plugged in to.
&lt;/p&gt;

&lt;p&gt;
In the world of SAS or SATA, you have the Storage Area Network (SAN). SANs
are designed around SCSI standards. The primary goal of a SAN (or any
other storage network) is to provide access of one or more storage volumes
across one or more paths to a single or multiple operating system host(s)
in a network. Today, the most commonly deployed SAN is based on iSCSI,
which is SCSI over TCP/IP. Technically, NVMe drives can be configured
within a SAN environment, although the protocol overhead introduces
latencies that make it a less than ideal implementation. In 2014, the
NVMe Express committee was poised to rectify this with the NVMeF standard.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/nvme-over-fabrics-support-coming-linux-48-kernel" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 22 Aug 2016 16:15:00 +0000</pubDate>
    <dc:creator>Petros Koutoupis</dc:creator>
    <guid isPermaLink="false">1339138 at https://www.linuxjournal.com</guid>
    </item>

  </channel>
</rss>
