IP Library Granted Patent US 9,021,125
Granted Patent B2
US 9,021,125 · App. 12/315,723 · Granted Apr 28, 2015

Control path I/O virtualisation

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 9,021,125
App. No.
12/315,723
Granted
Apr 28, 2015
Kind
B2
Abstract

There is disclosed a data switch in combination with a proxy controller, the data switch being configured for routing data traffic and control traffic between at least one input/output (I/O) device and at least one server including a memory having an address space including set of data buffers and a list of command/status descriptors. The data switch is configured to: i) distinguish between different types of traffic by examining packet headers; ii) route data traffic directly between the at least one I/O device and the at least one server; and iii) route control traffic by way of the proxy controller. In this way, I/O devices can be virtualized, since only the control traffic (which generally comprises less than 10% of the bandwidth) needs be processed by the proxy controller.

Claims (49)

1. A data switch in combination with a proxy controller, the data switch being configured for routing data traffic and control traffic between at least one input/output (I/O) device and at least one server including a memory having an address space including a set of data buffers and a list of command/status descriptors, the control traffic comprising transaction types:

a) commands from at least one server to the at least one input/output (I/O) device;

b) status reads by the at least one server of resources in the at least one I/O device;

c) reads by the at least one I/O device of command descriptors in the memory of the at least one server;

d) writes by the at least one I/O device of status descriptors in the memory of the at least one server; and

the data traffic comprising transaction type:

e) reads/writes by the at least one I/O device of data buffers in the memory of the at least one server;

wherein the proxy controller is configured to create a virtual address space for the at least one I/O device, the virtual address space including well-defined regions for command status descriptor lists of the at least one I/O device; and

wherein the data switch is configured to:

i) by examining packet headers, distinguish between transaction types a) and b) on the one hand and transaction types c), d), and e) on the other hand;

ii) by examining virtual address space addresses, distinguish between transaction types c) and d) on the one hand and e) on the other hand;

iii) route the data traffic directly between the at least one I/O device and the at least one server; and

iv) route only the control traffic by way of the proxy controller configured to process the control traffic to virtualise the at least one I/O device.

2. A data switch as claimed in claim 1 , wherein the proxy controller is configured to read and copy the descriptors and to distinguish in the virtual address space between a first class of pointers in the descriptors that are pointers to data buffers, and a second class of pointers in the descriptors that are pointers to subsequent descriptors.

3. A data switch as claimed in claim 2 , wherein to create the virtual address space the proxy controller is configured to modify its copies of the descriptors such that the first class of pointers and the second class of pointers are distinguishable from each other by the switch.

4. A data switch as claimed in claim 3 , wherein the proxy controller is configured to set one or more non-significant bits in the first class of pointers in a first configuration, and to set one or more non-significant bits in the second class of pointers in a second configuration.

5. A data switch as claimed in claim 4 , wherein additional non-significant bits in the first and/or second classes of pointers are set so as to provide an indication as to which of several servers contains the original non-modified descriptors and/or data buffers.

6. A data switch as claimed in claim 1 , wherein the proxy controller is configured to map the address space of the at least one server into the virtual address space in the proxy controller.

7. A data switch as claimed in claim 6 ,

wherein to create the virtual address space the proxy controller is configured to map the descriptors into a first set of regions of the virtual address space and to map the data buffers into a second set of regions of the virtual address space,

wherein the data switch is further configured to identify transaction types c) and d) as control traffic by determining virtual address space addresses in the control traffic are located within the first set of regions of the virtual address space, and

wherein the data switch is further configured to identify transaction type e) as data traffic by determining virtual address space addresses in the data traffic are located within the second set of regions of the virtual address space.

8. A data switch as claimed in claim 7 , wherein the first and second sets of regions are disjoint regions.

9. A data switch as claimed in claim 7 , wherein the first set and second sets of regions comprise, respectively, a single first region and a single second region.

10. A data switch as claimed in claim 7 , wherein the data switch is configured such that accesses to the first set of regions of the virtual address space, which comprise control traffic, are routed by way of the proxy controller, and wherein accesses to the second set of regions of the virtual address space, which comprise data traffic, are routed directly between the I/O device and the server.

11. A method of routing data traffic and control traffic between at least one input/output (I/O) device and at least one server by way of a data switch in combination with a proxy controller, wherein the server includes a memory having a set of data buffers and a list of command/status descriptors, the control traffic comprising transaction types:

a) commands from the at least one server to the at least one input/output (I/O) device;

b) status reads by the at least one server of resources in the at least one I/O device;

c) reads by the at least one I/O device of command descriptors in the memory of the at least one server;

d) writes by the at least one I/O device of status descriptors in the memory of the at least one server; and

the data traffic comprising transaction type:

e) reads/writes by the at least one I/O device of data buffers in the memory of the at least one server;

wherein the proxy controller is configured to create a virtual address space for the at least one I/O device, the virtual address space including well-defined regions for command status descriptor lists of the at least one I/O device; and

wherein the data switch:

i) by examining packet headers, distinguishes between transaction types a) and b) on the one hand and transaction types c), d), and e) on the other hand;

ii) by examining virtual address space addresses, distinguishes between transaction types c) and d) on the one hand and e) on the other hand;

iii) routes the data traffic directly between the at least one I/O device and the at least one server; and

iv) routes only the control traffic by way of the proxy controller configured to process the control traffic to virtualise the at least one I/O device.

12. A method according to claim 11 , wherein the proxy controller reads and copies the descriptors and distinguishes in the virtual address space between a first class of pointers in the descriptors that are pointers to data buffers, and a second class of pointers in the descriptors that are pointers to subsequent descriptors.

13. A method according to claim 12 , wherein to create the virtual address space the proxy controller modifies its copies of the descriptors such that the first class of pointers and the second class of pointers are distinguishable from each other by the switch.

14. A method according to claim 13 , wherein the proxy controller sets one or more non-significant bits in the first class of pointers in a first configuration, and sets one or more non-significant bits in the second class of pointers in a second configuration.

15. A method according to claim 14 , wherein additional non-significant bits in the first and/or second classes of pointers are set so as to provide an indication as to which of several servers contains the original non-modified descriptors and/or data buffers.

16. A method according to claim 11 , wherein the proxy controller maps the address space of the at least one server into a virtual address space in the proxy controller.

17. A method according to claim 16 , wherein to create the virtual address space the proxy controller maps the descriptors into a first set of regions of the virtual address space and maps the data buffers into a second set of regions of the virtual address space,

wherein the data switch identifies transaction types c) and d) as control traffic by determining virtual address space addresses in the control traffic are located within the first set of regions of the virtual address space, and

wherein the data switch identifies transaction type e) as data traffic by determining virtual address space addresses in the data traffic are located within the second set of regions of the virtual address space.

18. A method according to claim 17 , wherein the first and second sets of regions are disjoint regions.

19. A method according to claim 17 , wherein the first set and second sets of regions each comprise, respectively, a single first region and a single second region.

20. A method according to claim 17 , wherein accesses to the first set of regions of the virtual address space, which comprise control traffic, are routed by way of the proxy controller, and wherein accesses to the second set of regions of the virtual address space, which comprise data traffic, are routed directly between the I/O device and the at least one server.

Assignments (11)
RELEASE OF SECURITY INTEREST Recorded Nov 12, 2019
From: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
To: MICRON TECHNOLOGY, INC.; MICRON SEMICONDUCTOR PRODUCTS, INC.
Reel/Frame 051028/0001 →
RELEASE OF SECURITY INTEREST Recorded Oct 9, 2019
From: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
To: MICRON TECHNOLOGY, INC.
Reel/Frame 050937/0001 →
RELEASE OF SECURITY INTEREST Recorded Aug 23, 2018
From: U.S. BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: MICRON TECHNOLOGY, INC.
Reel/Frame 047243/0001 →
SECURITY INTEREST Recorded Jul 13, 2018
From: MICRON TECHNOLOGY, INC.; MICRON SEMICONDUCTOR PRODUCTS, INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 047540/0001 →
CORRECTIVE ASSIGNMENT TO CORRECT THE REPLACE ERRONEOUSLY FILED PATENT #7358718 WITH THE CORRECT PATENT #7358178 PREVIOUSLY RECORDED ON REEL 038669 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE SECURITY INTEREST. Recorded Jun 8, 2017
From: MICRON TECHNOLOGY, INC.
To: U.S. BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 043079/0001 →
PATENT SECURITY AGREEMENT Recorded Jun 2, 2016
From: MICRON TECHNOLOGY, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 038954/0001 →
SECURITY INTEREST Recorded May 12, 2016
From: MICRON TECHNOLOGY, INC.
To: U.S. BANK NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 038669/0001 →
RELEASE OF SECURITY INTEREST Recorded May 18, 2012
From: KREOS CAPITAL III (LUXEMBOURG) S.A.R.L
To: MICRON TECHNOLOGY, INC
Reel/Frame 028233/0608 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 12, 2012
From: VIRTENSYS LIMITED
To: MICRON TECHNOLOGY, INC
Reel/Frame 028037/0001 →
SECURITY AGREEMENT Recorded Oct 13, 2010
From: VIRTENSYS LIMITED
To: KREOS CAPITAL III (LUXEMBOURG) S.A.R.L.
Reel/Frame 025126/0776 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 13, 2009
From: PIEKARSKI, MAREK
To: VIRTENSYS LIMITED
Reel/Frame 022099/0723 →