IP Library Granted Patent US 8,578,106
Granted Patent B1
US 8,578,106 · App. 13/673,348 · Granted Nov 5, 2013

Method and system for queue demultiplexor with size grouping

Inventor: Michael W. Shapiro (San Francisco, CA)
Assignee: DSSD, Inc.
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 8,578,106
App. No.
13/673,348
Filed
Nov 9, 2012
Granted
Nov 5, 2013
Kind
B1
Examiner
LI, ZHUO H
Art Unit
2185
USPC
711/170
Abstract

A method for writing data to submission queues in a storage controller including receiving an input/output (I/O) request from a client application, where the client application is associated with a virtual port and where the virtual port is associated with a physical port. The method further includes determining a size of the I/O request, identifying a queue group based on the size of the I/O request and the virtual port, where the queue group includes submission queues and is associated with the virtual port. The method further includes identifying a submission queue, sending the I/O request to a storage controller over the physical port, where the queue group is located in memory operatively connected to the storage controller and where the storage controller is configured to place the I/O request in the submission queue.

Claims (40)

1. A method for writing data to submission queues in a storage controller, comprising:

receiving a first input/output (I/O) request from a client application, wherein the client application is associated with a virtual port and wherein the virtual port is associated with a physical port;

determining a size of the first I/O request;

identifying a queue group based on the size of the first I/O request and the virtual port, wherein the queue group consists of a plurality of submission queues, wherein the queue group is associated with the virtual port;

identifying a submission queue in the plurality of submission queues, wherein the submission queue is not full and wherein identifying the submission queue comprises:

making a first determination that reordering of the first I/O request is permitted;

based on the first determination, making a second determination about which of the plurality of submission queues are non-full to obtain a set of non-full submission queues; and

based on the second determination, selecting one of the set of non-full submission queues, wherein the submission queue is one of the set of non-full submission queues;

sending the first I/O request to a storage controller over the physical port, wherein the queue group is located in memory operatively connected to the storage controller, wherein the storage controller is configured to place the first I/O request in the submission queue.

2. The method of claim 1 , further comprising:

receiving a second I/O request from a second client application, wherein the second client application is associated with a second virtual port;

determining a size of the second I/O request;

identifying a second queue group based on the size of the second I/O request and the second virtual port, wherein the second queue group consists of a second plurality of submission queues, wherein the second queue group is associated with the second virtual port;

identifying a second submission queue in the second plurality of submission queues, wherein the second submission queue is not full;

sending the second I/O request to the storage controller over the physical port, wherein the second queue group is located in the memory operatively connected to the storage controller, wherein the storage controller is configured to place the second I/O request in the second submission queue, and wherein the second virtual port is associated with the physical port.

3. The method of claim 1 , further comprising:

prior to receiving the first I/O request:

receiving, by the client, a virtual port handle associated with the first virtual port, wherein the client application provides the virtual port handle with the first I/O request.

4. The method of claim 1 , wherein determining the size of the first I/O request comprises determining at least one selected from a group consisting of an amount of data to be read to complete the first I/O request and an amount of data to be written to complete the first I/O request.

5. The method of claim 1 , wherein the submission queue is located in a region of the memory that is mapped to a client application address space, wherein the first I/O request is stored in the submission queue using submission queue information, and wherein the submission queue information specifies a memory address in the client application address space corresponding to a physical location in the region of memory.

6. The method of claim 1 , wherein the submission queue is located in a region of the memory, wherein sending the first I/O request to the storage controller comprises directly storing the first I/O request in the region of the memory, wherein the first I/O request is stored in the submission queue using submission queue information, and wherein the submission queue information specifies a memory address in a client application address space corresponding to a physical location in the region of memory.

7. The method of claim 1 , wherein the submission queue is located in a region of the memory, wherein sending the first I/O request to the storage controller comprises directly storing the first I/O request in the region of the memory and updating a hardware register in the storage controller with a new memory address, wherein the new memory address specifies a next available memory address in the submission queue in which to store a subsequent I/O request for the submission queue, and wherein the new memory address is in a client application address space.

8. The method of claim 1 , wherein selecting one of the set of non-full submission queues comprises at least one selected from a group consisting of selecting the submission queue using a round robin algorithm, arbitrarily selecting one of the set of non-full submission queues, and selecting the submission queue as the submission queue in the set of non-full submission queues that includes a least number of queued I/O requests.

9. A method for writing data to submission queues in a storage controller, comprising:

receiving an input/output (I/O) request from a client application, wherein the client application is associated with a virtual port and wherein the virtual port is associated with a physical port;

determining a size of the I/O request;

identifying a queue group based on the size of the I/O request and the virtual port, wherein the queue group consists of a plurality of submission queues, wherein the queue group is associated with the virtual port;

identifying a submission queue in the plurality of submission queues, wherein the submission queue is not full and wherein identifying the submission queue comprises:

making a determination that reordering of the I/O request is not permitted;

based on the determination:

hashing at least one selected from a group consisting of an object ID and an offset ID to obtain a hashed value, wherein the I/O request specifies data associated with the object ID and the offset ID, and

selecting the submission queue using the hashed value; and

sending the I/O request to a storage controller over the physical port, wherein the queue group is located in memory operatively connected to the storage controller, wherein the storage controller is configured to place the I/O request in the submission queue.

10. The method of claim 9 , further comprising:

prior to receiving the I/O request:

receiving, by the client, a virtual port handle associated with the virtual port, wherein the client application provides the virtual port handle with the I/O request.

11. The method of claim 9 , wherein determining the size of the I/O request comprises determining at least one selected from a group consisting of an amount of data to be read to complete the I/O request and an amount of data to be written to complete the I/O request.

12. The method of claim 9 , wherein the submission queue is located in a region of the memory that is mapped to a client application address space, wherein the I/O request is stored in the submission queue using submission queue information, and wherein the submission queue information specifies a memory address in the client application address space corresponding to a physical location in the region of memory.

13. The method of claim 9 , wherein the submission queue is located in a region of the memory, wherein sending the I/O request to the storage controller comprises directly storing the I/O request in the region of the memory, wherein the I/O request is stored in the submission queue using submission queue information, and wherein the submission queue information specifies a memory address in a client application address space corresponding to a physical location in the region of memory.

14. The method of claim 9 , wherein the submission queue is located in a region of the memory, wherein sending the I/O request to the storage controller comprises directly storing the I/O request in the region of the memory and updating a hardware register in the storage controller with a new memory address, wherein the new memory address specifies a next available memory address in the submission queue in which to store a subsequent I/O request for the submission queue, and wherein the new memory address is in a client application address space.

Assignments (11)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (045455/0001) Recorded May 20, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO ASAP SOFTWARE EXPRESS, INC.); DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC CORPORATION (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MAGINATICS LLC); EMC IP HOLDING COMPANY LLC (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MOZY, INC.); SCALEIO LLC
Reel/Frame 061753/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (040136/0001) Recorded Apr 26, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO ASAP SOFTWARE EXPRESS, INC.); DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC CORPORATION (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MAGINATICS LLC); EMC IP HOLDING COMPANY LLC (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MOZY, INC.); SCALEIO LLC
Reel/Frame 061324/0001 →
RELEASE OF SECURITY INTEREST Recorded Nov 3, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL, L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; WYSE TECHNOLOGY L.L.C.
Reel/Frame 058216/0001 →
SECURITY AGREEMENT Recorded Apr 22, 2020
From: CREDANT TECHNOLOGIES INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 053546/0001 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 29, 2016
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 040203/0001 →
SECURITY AGREEMENT Recorded Sep 21, 2016
From: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; SPANNING CLOUD APPS LLC; WYSE TECHNOLOGY L.L.C.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 040136/0001 →
SECURITY AGREEMENT Recorded Sep 21, 2016
From: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; SPANNING CLOUD APPS LLC; WYSE TECHNOLOGY L.L.C.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040134/0001 →
MERGER Recorded Sep 10, 2016
From: DSSD, INC.
To: EMC CORPORATION
Reel/Frame 039694/0912 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 12, 2012
From: SHAPIRO, MICHAEL W.
To: DSSD, INC.
Reel/Frame 029280/0432 →