IP Library › Granted Patent US 9,361,042
Granted Patent B2
US 9,361,042 · App. 14/519,966 · Granted Jun 7, 2016

Accelerating internet small computer system interface (iSCSI) proxy input/output (I/O)

Inventor: Andrew J. Spry (Wichita, KS)
Assignee: NETAPP, INC.
G06F3/0655G06F3/067G06F3/0608H04L67/1097
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,361,042
App. No.
14/519,966
Granted
Jun 7, 2016
Kind
B2
Abstract

The present invention is a method for accelerating proxy Input/Output (proxyI/O). The method includes the step of receiving a command at a primary target storage system. The primary target storage system may be part of a clustered storage array. The command may be a command which was transmitted by an initiator system via a storage area network, and may include a request for data. The method further includes the step of forwarding the command to a session layer of the primary target storage system. Further, when a virtualization layer of the primary target storage system determines that a portion of the data requested in the data request is not stored by the primary target storage system, but is stored by a proxy target storage system included in the plurality of storage systems, the method further includes providing a proxyIO request to a proxy initiator of the primary target storage system. Further, the method may further include, based on the proxyIO request, generating a proxyDataIn request and providing the proxyDataIn request to an I/O controller for the primary target storage system.

Claims (59)

1. A method for accelerating proxy Input/Output (proxy I/O), comprising:

receiving a command including a request for data from an initiator system at a primary target storage system, the primary target storage system comprising:

a first I/O controller communicatively coupled to the initiator system; and

a second I/O controller communicatively coupled to a proxy target storage system;

forwarding the command to a session layer of the primary target storage system;

when the primary target storage system determines that a portion of the data requested in the data request is not stored by the primary target storage system, providing a proxyDataIn request from the session layer of the primary target storage system to the second I/O controller;

using the second I/O controller, requesting the portion of the data from the proxy target storage system; and

providing, to the initiator system, a received response to the requesting, wherein the providing includes routing the response from the second I/O controller to the first I/O controller by a connection layer command.

2. The method of claim 1 wherein the requesting of the portion of the data includes:

creating a Small Computer Systems Interface (SCSI) command via the second I/O controller, the SCSI command including a proxy SCSI request for the portion of the data.

3. The method of claim 2 , wherein the requesting of the portion of the data further includes:

transmitting the SCSI command from the second I/O controller to the proxy target storage system.

4. The method of claim 3 , wherein the requesting of the portion of the data further includes:

receiving the SCSI command at the proxy target storage system and forwarding the SCSI command to a SCSI layer of the proxy target storage system.

5. The method of claim 1 further comprising, based on the proxyDataIn request, creating a command context via the second I/O controller, the command context being indexed by proxy task ID.

6. The method of claim 1 , wherein the providing of the proxyDataIn request includes:

providing a proxyIO request to a proxy initiator of the primary target storage system; and

based on the proxyIO request, generating the proxyDataIn request.

7. The method of claim 1 further comprising:

providing a list of buffers containing the portion of the requested data via a SCSI layer of the proxy target storage system.

8. The method of claim 7 further comprising:

providing a sendDataIn operation from the SCSI layer of the proxy target storage system to an internet SCSI (iSCSI) layer of the proxy target storage system.

9. The method of claim 8 further comprising:

providing a dataIn operation from an iSCSI session layer of the proxy target storage system to a connection layer of the second I/O controller, the dataIn operation including the list of buffers.

10. The method of claim 9 further comprising:

generating an iSCSI Data-In Protocol Distribution Unit (iSCSI Data-In PDU) via an I/O controller for the proxy target storage system.

11. The method of claim 1 , wherein the requesting of the portion of the data includes:

receiving an iSCSI Data-In Protocol Distribution Unit (PDU) received from the proxy target storage system in response to the proxyDataIn request; and

routing the iSCSI Data-In PDU from the second I/O controller of the primary target storage system to the first I/O controller of the primary target storage system, wherein the routing is performed entirely at the connection layer.

12. The non-transitory machine readable medium of claim 11 , comprising further machine executable code that causes the machine to:

receive an iSCSI Data-In Protocol Distribution Unit (PDU) from the second storage system in response to the proxyDataIn request; and

route the iSCSI Data-In PDU from the second I/O controller of the first storage system to the first I/O controller of the first storage system, wherein the routing is performed entirely at the connection layer.

13. A non-transitory machine readable medium having stored thereon instructions for performing a method for accelerating proxy Input/Output (proxy I/O), which when executed by at least one machine, causes the machine to:

receive a command from an initiator system at a first I/O controller of a first storage system, wherein the command includes a request for data;

forward the command to a session layer of the first storage system;

when the first storage system determines that a portion of the data requested in the command is not stored by the first storage system, but is stored by a second storage system to which a second I/O controller of the first storage system is communicatively coupled, provide a proxyIO request to a proxy initiator of the first storage system;

based on the proxyIO request, generate a proxyDataIn request and provide the proxyDataIn request from the session layer of the first storage system to the second I/O controller; and

request the portion of the data from the second storage system.

14. The non-transitory machine readable medium of claim 13 comprising further machine executable code that causes the machine to:

provide, to the initiator system, a received response to the requesting, wherein the providing includes routing the response from the second I/O controller to the first I/O controller by a connection layer command.

15. The non-transitory machine readable medium of claim 14 , comprising further machine executable code that causes the machine to:

create a Small Computer Systems Interface (SCSI) command via the second I/O controller, the SCSI command including a proxy SCSI request for the portion of the data.

16. The non-transitory machine readable medium of claim 15 , comprising further machine executable code that causes the machine to:

transmit the SCSI command from the second I/O controller to the second storage system.

17. The non-transitory machine readable medium of claim 16 , comprising further machine executable code that causes the machine to:

receive the SCSI command at the second storage system and forward the SCSI command to a SCSI layer of the second storage system.

18. A storage system comprising:

a first input/output (I/O) controller communicatively coupled to an initiator via a storage area network and operable to communicate with the initiator using at least an iSCSI protocol;

a second input/output (I/O) controller communicatively coupled to a target storage system and operable to communicate with the target storage system using at least an iSCSI protocol;

a memory containing machine readable medium comprising machine executable code having stored thereon instructions for performing a method of accelerating proxy Input/Output (proxy I/O); and

at least one processor coupled to the memory, the at least one processor configured to execute the machine executable code to:

receive a command including a request for data from the initiator at the first I/O controller;

upon determining that a portion of the data requested in the data request is not stored by the storage system, provide a proxyDataIn request from a session layer of the storage system to the second I/O controller;

using the second I/O controller, request the portion of the data from the target storage system; and

provide, to the initiator, a received response by routing the response from the second I/O controller to the first I/O controller by a connection layer command.

19. The storage system of claim 18 , wherein the at least one processor is further configured to execute the machine executable code to:

create a Small Computer Systems Interface (SCSI) command via the second I/O controller, wherein the SCSI command includes a proxy SCSI request for the portion of the data.

20. The storage system of claim 19 , wherein the at least one processor is further configured to execute the machine executable code to:

transmit the SCSI command from the second I/O controller to the target storage system.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 1, 2015
From: LSI CORPORATION
To: NETAPP, INC.
Reel/Frame 035758/0197 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 29, 2015
From: SPRY, ANDREW J
To: LSI CORPORATION
Reel/Frame 035744/0885 →
Continuity (2)
Continuation 12317151 · Dec 19, 2008
Related Publication 20150039792A1 · Feb 5, 2015