IP Library Granted Patent US 10,509,592
Granted Patent B1
US 10,509,592 · App. 15/660,735 · Granted Dec 17, 2019

Parallel data transfer for solid state drives using queue pair subsets

Inventors: Kiron Balkrishna Malwankar (Sarratoga, CA); Karagada Ramarao Kishore (Saratoga, CA)
Assignee: Pavilion Data Systems, Inc.
G06F3/0659G06F3/0613G06F3/0685G06F12/08G06F3/06
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 10,509,592
App. No.
15/660,735
Granted
Dec 17, 2019
Kind
B1
Abstract

A first I/O controller of a storage server sends a first command to a first solid state drive (SSD) of the storage server via a first submission queue of the first SSD, wherein the first command is a first read command or a first write command. The first I/O controller receives a first acknowledgement from the first SSD that the first command has been completed via a first completion queue of the first SSD. A second I/O controller of the storage server sends a second command to the first SSD of the storage server via a second submission queue of the first SSD, wherein the second command is a second read command or a second write command. The second I/O controller receives a second acknowledgement from the first SSD that the second command has been completed via a second completion queue of the first SSD.

Claims (78)

1. A method comprising:

allocating, by a management controller included in a storage server, a first queue pair of a first solid state drive (SSD) of the storage server to a first input/output (I/O) controller in the storage server, the first queue pair comprising a first submission queue and a first completion queue;

allocating, by the management controller, a second queue pair of the first SSD to a second I/O controller in the storage server, the second queue pair comprising a second submission queue and a second completion queue;

sending, by the first I/O controller, a first command to the first SSD via the first submission queue of the first SSD that has been allocated to the first I/O controller, wherein the first command is a first read command or a first write command;

receiving, by the first I/O controller, a first acknowledgement from the first SSD that the first command has been completed via the first completion queue of the first SSD that has been allocated to the first I/O controller;

sending, by the second I/O controller, a second command to the first SSD of the storage server via the second submission queue of the first SSD that has been allocated to the second I/O controller, wherein the second command is a second read command or a second write command, and wherein the second I/O controller sends the second command to the first SSD in parallel to the first I/O controller sending the first command to the first SSD; and

receiving, by the second I/O controller, a second acknowledgement from the first SSD that the second command has been completed via the second completion queue of the first SSD that has been allocated to the second I/O controller;

wherein the management controller comprises a root complex for the storage server but is not in a data path for the storage server, wherein the first I/O controller lacks the root complex for the storage server, and wherein the second I/O controller lacks the root complex for the storage server.

2. The method of claim 1 , further comprising:

receiving, by the first I/O controller, a host command to write data from a host to a first virtual drive presented to the host;

reading the data from a first region of memory in the host;

writing the data to a second region of memory in the first I/O controller; determining a first virtual submission queue, wherein the first virtual submission queue maps to the first submission queue of the first SSD; and

writing the first command to the first virtual submission queue.

3. The method of claim 2 , wherein the host command is a command to write the data from the host to a first logical block address of the first virtual drive, the method further comprising:

determining a second logical block address of a second virtual drive based on the first logical block address of the first virtual drive, wherein the first virtual submission queue and the second virtual drive are associated with the second logical block address.

4. The method of claim 2 , wherein reading the data from the first region of memory in the host and writing the data to the second region of memory in the first I/O controller comprises performing a first remote direct memory access (RDMA) operation, and wherein a second RDMA operation is performed to write the data from the second region of memory in the first I/O controller to the first SSD.

5. The method of claim 2 , wherein the first command is a command to write a first portion of the data to the first SSD, the method further comprising:

sending, by the first I/O controller, a third command to a second SSD of the storage server via a first submission queue of the second SSD that has been allocated to the first I/O controller, wherein the third command is a third write command to write a second portion of the data to the second SSD, and wherein sending the third command to the second SSD comprises:

determining a second virtual submission queue that maps to the first submission queue of the second SSD;

writing the third command to the second virtual submission queue; and

receiving a third acknowledgement from the second SSD that the third command has been completed via a first completion queue of the second SSD that has been allocated to the first I/O controller.

6. The method of claim 2 , further comprising:

determining a first memory address of the first I/O controller associated with the first virtual submission queue, wherein writing the first command to the first virtual submission queue comprises writing the first command to the first memory address of the first I/O controller.

7. The method of claim 6 , wherein the first SSD is in a first domain of the management controller of the storage server, wherein the first I/O controller comprises a second domain, and wherein sending the first command to the first SSD comprises:

sending a notification to the first SSD that the first command has been added to the first virtual submission queue;

receiving a request for the first command from the first SSD, wherein the request comprises a second memory address of the management controller that is allocated to the first submission queue of the first SSD; and

translating, in a header of the request, the second memory address of the management controller to the first memory address of the first I/O controller that is allocated to the first virtual submission queue.

8. The method of claim 2 , wherein the first SSD is in a first domain of the management controller of the storage server, and wherein the first I/O controller comprises a second domain, the method further comprising:

translating a first memory address of the second region of memory of the first I/O controller to a second memory address of a third region of memory of the management controller that has been allocated to the first I/O controller and that is mapped to the second region of memory of the first I/O controller, wherein the first command that is written to the first virtual submission queue comprises a reference to the second memory address of the third region of memory of the management controller.

9. The method of claim 8 , further comprising:

prior to receiving the first acknowledgement, performing the following comprising:

receiving a new read request from the first SSD, the new read request referencing the second memory address of the third region of memory of the management controller; and

translating, in the new read request, the second memory address of the third region of memory of the management controller to the first memory address of the second region of memory of the first I/O controller.

10. The method of claim 8 , wherein:

a plurality of SSDs that comprises the first SSD are endpoints; and

a plurality of I/O controllers that comprises the first I/O controller and the second I/O controller are endpoints that are peers of the plurality of SSDs.

11. A storage server comprising:

a plurality of solid state drives (SSDs), wherein a first SSD of the plurality of SSDs comprises a first plurality of submission queues and a first plurality of completion queues;

a management controller, wherein the management controller is to:

allocate a first submission queue and a first completion queue of the first SSD to a first input/output (I/O) controller in the storage server; and

allocate a second submission queue and a second completion queue of the first SSD to a second I/O controller in the storage server;

the first I/O controller, operatively coupled to the first SSD, wherein the first I/O controller is to:

send a first command to the first SSD via the first submission queue of the first plurality of submission queues that has been allocated to the first I/O controller, wherein the first command is a first read command or a first write command; and

receive a first acknowledgement from the first SSD that the first command has been completed via the first completion queue of the first plurality of completion queues that has been allocated to the first I/O controller; and

the second I/O controller, operatively coupled to the first SSD, wherein the second I/O controller is to:

send a second command to the first SSD via the second submission queue of the first plurality of submission queues that has been allocated to the second I/O controller, wherein the second command is a second read command or a second write command, and wherein the second I/O controller sends the second command to the first SSD in parallel to the first I/O controller sending the first command to the first SSD; and

receive a second acknowledgement from the first SSD that the second command has been completed via the second completion queue of the first plurality of completion queues that has been allocated to the second I/O controller;

wherein the management controller comprises a root complex for the storage server but is not in a data path for the storage server, wherein the first I/O controller lacks the root complex for the storage server, and wherein the second I/O controller lacks the root complex for the storage server.

12. The storage server of claim 11 , wherein the first I/O controller is further to:

receive a host command to write data from a host to a first virtual drive presented to the host;

read the data from a first region of memory in the host;

write the data to a second region of memory in the first I/O controller;

determine a first virtual submission queue, wherein the first virtual submission queue maps to the first submission queue of the first SSD; and

write the first command to the first virtual submission queue.

13. The storage server of claim 12 , wherein the host command is a command to write the data from the host to a first logical block address of the first virtual drive, wherein the first I/O controller is further to:

determine a second logical block address of a second virtual drive based on the first logical block address of the first virtual drive, wherein the first virtual submission queue and the second virtual drive are associated with the second logical block address.

14. The storage server of claim 12 , wherein reading the data from the first region of memory in the host and writing the data to the second region of memory in the first I/O controller comprises performing a first remote direct memory access (RDMA) operation, and wherein a second RDMA operation is performed to write the data from the second region of memory in the first I/O controller to the first SSD.

15. The storage server of claim 12 , wherein the first command is a command to write a first portion of the data to the first SSD, and wherein the first I/O controller is further to:

send a third command to a second SSD of the plurality of SSDs via a first submission queue of the second SSD that has been allocated to the first I/O controller, wherein the third command is a third write command to write a second portion of the data to the second SSD, and wherein sending the third command to the second SSD comprises:

determining a second virtual submission queue that maps to the first submission queue of the second SSD; and

writing the third command to the second virtual submission queue; and

receive a third acknowledgement from the second SSD that the third command has been completed via a first completion queue of the second SSD that has been allocated to the first I/O controller.

16. The storage server of claim 12 , wherein the first I/O controller is further to:

determine a first memory address of the first I/O controller associated with the first virtual submission queue, wherein writing the first command to the first virtual submission queue comprises writing the first command to the first memory address of the first I/O controller.

17. The storage server of claim 16 , wherein to send the first command to the first SSD the first I/O controller is to send a notification to the first SSD that the first command has been added to the first virtual submission queue, wherein the first SSD is in a first domain of the management controller, and wherein the first I/O controller comprises a second domain, the storage server further comprising:

a translation chip between the first I/O controller and the first SSD, wherein the translation chip is to:

receive a request for the first command from the first SSD, wherein the request comprises a second memory address of the management controller that is allocated to the first submission queue of the first SSD;

translate, in a header of the request, the second memory address of the management controller to the first memory address of the first I/O controller that is allocated to the first virtual submission queue; and

forward the request to the first I/O controller.

18. The storage server of claim 17 , wherein:

the plurality of SSDs are endpoints; and

a plurality of I/O controllers that comprises the first I/O controller and the second I/O controller are endpoints that are peers of the plurality of SSDs.

19. The storage server of claim 17 , wherein prior to the first I/O controller receiving the first acknowledgement, the translation chip is to:

receive a new read request from the first SSD, the new read request referencing the second memory address of the management controller;

translate, in the new read request, the second memory address of the management controller to the first memory address of the first I/O controller; and

forward the new read request comprising the first memory address to the first I/O controller.

20. The storage server of claim 17 , wherein the first I/O controller is further to:

translate the first memory address of the first I/O controller to the second memory address of the management controller, wherein the first command that is written to the first virtual submission queue comprises a reference to the second memory address.

Assignments (2)
CORRECTIVE ASSIGNMENT TO CORRECT THE RECEIVING PARTY PREVIOUSLY RECORDED AT REEL: 043106 FRAME: 0074. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Jul 9, 2019
From: MALWANKAR, KIRON BALKRISHNA; KISHORE, KARAGADA RAMARAO
To: PAVILION DATA SYSTEMS, INC.
Reel/Frame 049706/0970 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 26, 2017
From: MALWANKAR, KIRON BALKRISHNA; KISHORE, KARAGADA RAMARAO
To: PAVILION DATA SYSTEM, INC.
Reel/Frame 043106/0074 →
Continuity (1)
Provisional Application 62366937 · Jul 26, 2016
Cited By (2)
US 12,259,892 US 12,561,094