[SPDK] Using SPDK & NVMe-oF with ZFS zvols

"Luis Navarro" <[email protected]> Thu, 15 Jun 2023 10:43:36 -0700
Newsgroups dev.linux.lists.spdk
Message-ID <[email protected]>
This is a multipart message in MIME format.

------=_NextPart_000_12D9_01D99F76.3D4C2CE0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

I'm building an Ubuntu ZFS storage server that provides block storage for
ESXi VMs and a Windows 11 workstation.

 

Connectivity between the boxes is via 100G ConnectX-5 Ethernet cards.

 

The storage devices are a mix of enterprise-grade NVMe SSDs (fast tier) and
SATA HDDs (slow tier).

 

For the storage protocol, I was originally going to use iSCSI since that's
what I know.  However, I started experimenting with RDMA and iSER and got
somewhat better performance and much lower CPU utilization.  However, I
wasn't thrilled with the performance so a colleague directed me to look at
NVMe-oF.  I've been experimenting with SPDK and NVMe-oF and, so far, the
performance is better than iSER in some areas and worse in others.  

 

FWIW, I've been using AIO bdevs.  I also tried uring bdevs but they were a
bit slower.

 

I have a few questions for the team:

 

1) I believe the ZFS zvols do not expose any of the details of any
underlying NVMe devices.  In these cases, I've heard that NVMe-oF "falls
back" to simpler SCSI commands.  Is this true?

 

2) If #1 is true, are there still benefits of using the NVMe-oF protocol
and/or SPDK's userspace implementation?

 

3) Are there any tips or tricks you can offer for maximizing performance
when using SPDK with ZFS zvols?

 

Thanks in advance!

Luis

 


------=_NextPart_000_12D9_01D99F76.3D4C2CE0
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii"><meta name=3DGenerator content=3D"Microsoft Word 15 =
(filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US =
link=3D"#0563C1" vlink=3D"#954F72"><div class=3DWordSection1><p =
class=3DMsoNormal>I'm building an Ubuntu ZFS storage server that =
provides block storage for ESXi VMs and a Windows 11 =
workstation.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>Connectivity between the boxes is via 100G ConnectX-5 =
Ethernet cards.<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>The storage =
devices are a mix of enterprise-grade NVMe SSDs (fast tier) and SATA =
HDDs (slow tier).<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>For the =
storage protocol, I was originally going to use iSCSI since that's what =
I know.&nbsp; However, I started experimenting with RDMA and iSER and =
got somewhat better performance and much lower CPU utilization.&nbsp; =
However, I wasn't thrilled with the performance so a colleague directed =
me to look at NVMe-oF.&nbsp; I've been experimenting with SPDK and =
NVMe-oF and, so far, the performance is better than iSER in some areas =
and worse in others.&nbsp; <o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>FWIW, I've =
been using AIO bdevs.&nbsp; I also tried uring bdevs but they were a bit =
slower.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>I have a few questions for the team:<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>1) I believe =
the ZFS zvols do not expose any of the details of any underlying NVMe =
devices.&nbsp; In these cases, I've heard that NVMe-oF &quot;falls =
back&quot; to simpler SCSI commands.&nbsp; Is this =
true?<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p =
class=3DMsoNormal>2) If #1 is true, are there still benefits of using =
the NVMe-oF protocol and/or SPDK's userspace =
implementation?<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>3) Are there =
any tips or tricks you can offer for maximizing performance when using =
SPDK with ZFS zvols?<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>Thanks in =
advance!<o:p></o:p></p><p class=3DMsoNormal>Luis<o:p></o:p></p><p =
class=3DMsoNormal><o:p>&nbsp;</o:p></p></div></body></html>
------=_NextPart_000_12D9_01D99F76.3D4C2CE0--