IP Library › Granted Patent US 11,902,184
Granted Patent B2
US 11,902,184 · App. 17/326,284 · Granted Feb 13, 2024

Methods and systems for providing a virtualized NVMe over fabric service

Inventors: Silvano Gai (Bend, OR); Michael Brian Galles (Los Altos, CA); Mario Mazzola (San Jose, CA); Luca Cafiero (Palo Alto, CA); Krishna Doddapaneni (Cupertino, CA); Sarat Kamisetty (Fremont, CA)
Assignee: Pensando Systems Inc.
H04L49/901G06F13/4282H04L45/74H04L47/125G06F2213/0026
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,902,184
App. No.
17/326,284
Granted
Feb 13, 2024
Kind
B2
Abstract

PCIe devices installed in host computers communicating with service nodes can provide virtualized NVMe over fabric services. A workload on the host computer can submit an SQE on a NVMe SQ. The PCI device can read the SQE to obtain a command identifier, an OpCode, and a namespace identifier (NSID). The SQE can be used to produce a LTP packet that includes the opcode, the NSID, and a request identifier. The LTP packet can be sent to the service node, which may access a SAN in accordance with the opcode and NSID, and can respond to the LTP with a second LTP that includes the request identifier and a status indicator. The PCI device can use the status indicator and the request identifier to produce a CQE that is placed on a NVMe CQ associated with the SQ.

Claims (102)

1. A method comprising:

associating, by a PCIe device, a request identifier with a command identifier of a submission queue element (SQE) after reading the SQE from a submission queue (SQ), the SQE including the command identifier, an OpCode, and a namespace identifier (NSID);

producing, by the PCIe device, a first local transport protocol (LTP) packet that includes the opcode, the NSID, and the request identifier after reading the SQE from the SQ;

sending the first LTP packet to a service node;

receiving, in response to sending the first LTP packet, a second LTP packet that includes the request identifier and a status indicator;

using the request identifier in the second LTP packet to identify the command identifier;

using, by the PCIe device, the status indicator, the command identifier, and the request identifier to produce a completion queue entry (CQE) that is responsive to the SQE; and

placing the CQE on a completion queue (CQ) associated with the SQ,

wherein the SQ is an NVMe SQ, and the CQ is an NVMe CQ.

2. The method of claim 1 wherein:

a first user datagram protocol (UDP) packet carries the first LTP packet to the service node; and

the second LTP packet is received within a second UDP packet.

3. The method of claim 1 , further including

receiving, by the service node, the first LTP packet;

using, by the service node, the first LTP packet to produce a first NVMe capsule;

sending, by the service node, the first NVMe capsule to an NVMe controller;

receiving, from the NVMe controller, a second NVME capsule that is responsive to the first NVMe capsule;

using the second NVMe capsule to produce the second LTP packet; and

sending the second LTP packet.

4. The method of claim 3 wherein:

a first transport control protocol (TCP) packet carries the first NVMe capsule to the NVMe controller; and

the second NVMe capsule is received within a second TCP packet.

5. The method of claim 3 wherein:

the service node stores the NSID in association with a second NSID;

the NSID and the second NSID are not equal; and

the first NVMe capsule has a NSID field and includes the second NSID in the NSID field.

6. The method of claim 3 wherein:

the service node stores the command identifier in association with a second command identifier: and

the first NVMe capsule has a command identifier field and includes the second command identifier in the command identifier field.

7. The method of claim 3 wherein:

a function identifier identifies the PCIe device;

the first LTP packet includes the function identifier;

the second LTP packet includes the function identifier; and

the PCIe device is configured to use the function identifier in the second LTP packet to identify the CQ before placing the CQE on the CQ.

8. The method of claim 3 wherein:

a data area in a local memory has a data start address and a data length;

the SQE identifies the data area;

a data is included in the second LTP packet and in the second NVMe capsule; and

the data is stored in the data area.

9. The method of claim 1 wherein:

the NSID is a virtual NSID (vNSID); and

the service node maps the vNSID to a storage area network (SAN) specific storage identifier.

10. The method of claim 1 wherein:

a memory of the service node stores a namespace map that associates vNSIDs with SAN specific storage identifiers;

the service node is one of a plurality of service nodes in a replication chain;

the service nodes are configured to replicate the namespace map via chain replication such that any one of the service nodes can process the first LTP packet;

a load balancer is configured to distribute LTP packets among the service nodes; and

the load balancer routes the first LTP packet to the service node.

11. The method of claim 1 wherein:

a first smart switch includes the service node;

a second service switch includes a second service node; and

the first LTP packet is sent to the first smart switch in accordance with a NVMe balancing policy.

12. A system comprising

a PCIe device configured to:

associate a request identifier with a command identifier of a submission queue element (SQE) after reading the SQE from a submission queue (SQ), the SQE including the command identifier, an OpCode, and a namespace identifier (NSID);

produce a first local transport protocol (LTP) packet that includes the opcode, the NSID, and the request identifier after reading the SQE from the SQ;

send the first LTP packet to a service node;

receive, in response to sending the first LTP packet, a second LTP packet that includes the request identifier and a status indicator;

use the request identifier in the second LTP packet to identify the command identifier;

use the command identifier, the status indicator and the request identifier to produce a completion queue entry (CQE) that is responsive to the SQE; and

place the CQE on a completion queue (CQ) associated with the SQ,

wherein the SQ is an NVMe SQ, and the CQ is an NVMe CQ.

13. The system of claim 12 wherein:

a data area in a local memory has a start address and a length;

the data area contains data;

the SQE identifies the data area; and

the data is included in the first LTP packet.

14. The system of claim 12 wherein:

a data area in a local memory has a data start address and a data length;

the SQE identifies the data area;

a data is included in the second LTP packet; and

the data is stored in the data area.

15. The system of claim 12 wherein:

a first user datagram protocol (UDP) packet carries the first LTP packet to the service node; and

the second LTP packet is received within a second UDP packet.

16. A system comprising a service node configured to:

receive, from a host computer, a first internet protocol (IP) packet that includes a first local transport protocol (LTP) packet that includes an NVMe opcode, an NSID indicating an NVMe namespace, a PCIe device identifier, and a PCIe device request identifier;

use the first LTP packet to produce a first NVMe capsule;

send the first NVMe capsule to an NVMe controller;

receive a second NVME capsule that is responsive to the first NVMe capsule;

use the second NVMe capsule to produce a second LTP packet that includes the PCIe device request identifier, the PCIe device identifier, the PCIe device request identifier, and a status indicator; and

send the second LTP packet to the host computer.

17. The system of claim 16 wherein:

a first transport control protocol (TCP) packet carries the first NVMe capsule to the NVMe controller; and

the second NVMe capsule is received within a second TCP packet.

18. The system of claim 16 wherein:

the service node includes a memory;

the service node is configured to use the memory to store a namespace map that associates vNSIDs with SAN specific storage identifiers;

the service node is configured for use in a replication chain that includes a plurality of service nodes that replicate the namespace map via chain replication such that any one of the service nodes can process the first LTP packet; and

a load balancer configured to distribute LTP packets among the service nodes.

19. The system of claim 16 further including:

a first smart switch that includes the service node; and

a second service switch that includes a second service node,

wherein the first LTP packet is sent to the first smart switch in accordance with a NVMe balancing policy.

20. A system comprising:

a local means for processing local NVMe submissions to produce upstream packets that use a local transport protocol (LTP);

a means for associating a command identifier in a NVMe SQE with a request identifier in a LTP packet;

a means for using the request identifier to include the command identifier in an NVMe CQE that is responsive to the NVMe SQE; and

an intermediate means for interacting with a storage area network (SAN) via NVMe capsules that are produced from the upstream packets and for communicating SAN operation results to the local means,

wherein:

the LTP packet includes an NVMe opcode, an NSID indicating an NVMe namespace, a PCIe device identifier, and the request identifier; and

the intermediate means interacts with the SAN via a computer network.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 24, 2021
From: GAI, SILVANO; GALLES, MICHAEL BRIAN; MAZZOLA, MARIO; CAFIERO, LUCA; DODDAPANENI, KRISHNA; KAMISETTY, SARAT
To: PENSANDO SYSTEMS INC.
Reel/Frame 056328/0854 →
Continuity (1)
Related Publication 20220377027A1 · Nov 24, 2022
Cited By (1)
US 12,289,205