# US 6,880,062 B1 · Data mover mechanism to achieve SAN RAID at wire speed

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 6,880,062 B1
- Document ID: US6880062B1
- Status: Granted
- Kind: B1
- Application number: 10/224,618
- Filed: 2002-08-19
- Granted: 2005-04-12
- Earliest claimed: 2001-02-13
- Assignees: Candera, Inc.
- Inventors: Rahim Ibrahim; Nghiep Tran; Tuan Nguyen; Chan Ng
- Web page: https://patentgrep.com/patent/US6880062B1

## CPC

- G06F 3/0613: {in relation to throughput}
- G06F 3/0635: {by changing the path, e.g. traffic rerouting, path reconfiguration}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- H04L 67/1097: for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

A Virtual Storage Server is provided for transferring data between a source storage device and one or more destination storage devices. A write command is issued to the one or more destinations for an amount of data. In response, one or more Transfer Ready Responses are returned indicating the amount of data the destinations are prepared to receive. The Virtual Storage Server then sends a read command to the source for an amount of data based on the amounts of data in the Transfer Ready Responses. The data is then transferred from the source storage device through the Virtual Storage Server to the one or more destination storage devices. Because data is transferred only in amounts that the destination is ready to receive, the Virtual Storage Server does not need a large buffer, and can basically send data received at wire speed. This process continues until the amount of data in the write command is transferred to the one or more destination storage devices.

## Claims

### Claim 1

A Virtual Storage Server for transferring data in a storage environment from a source to one or more target destinations, the Virtual Storage Server including a processor memory comprising:
(a) code for issuing a write command for a target amount of data to the one or more target destinations;
(b) code for receiving one or more Transfer Ready Responses from the one or more target destinations for one or more amounts of data;
(c) code for after issuing the write command, issuing a read command for an amount of data to be transferred to the source that is determined from the one or more amounts of data;
(d) code for transferring the amount of data from the source to the one or more target destinations; and
(e) code for repeating steps (b)-(d) until the target amount of data has been transferred to the one or more target destinations.

### Claim 2 (depends on 1)

The Virtual Storage Server of claim 1, wherein the processor memory further comprises code for transferring the amount of data using an amount of buffer space less than said amount of data.

### Claim 3 (depends on 1)

The Virtual Storage Server of claim 1, wherein the processor memory further comprises code for receiving the amount of data to be transferred from the source.

### Claim 4 (depends on 1)

The Virtual Storage Server of claim 1, wherein the processor memory further comprises code for determining a minimum amount of data from the one or more amounts of data in the one or more Transfer Ready Responses.

### Claim 5 (depends on 4)

The Virtual Storage Server of claim 4, wherein code for issuing a read command for the amount of data comprises code for issuing a read command for the determined minimum amount of data.

### Claim 6 (depends on 1)

The Virtual Storage Server of claim 1, wherein the processor memory further comprises code for issuing a read span lock command to the source.

### Claim 7 (depends on 6)

The Virtual Storage Server of claim 6, wherein the processor memory further comprises code for removing the read span lock command after receiving a write command status ending command from the one or more target destinations.

### Claim 8 (depends on 1)

The Virtual Storage Server of claim 1, wherein the processor memory further comprises for issuing a write span lock command to the one or more target destinations.

### Claim 9 (depends on 8)

The Virtual Storage Server of claim 8, wherein the processor memory further comprises code for removing the write span lock command after receiving a read command status ending command from the source.

### Claim 10

A Virtual Storage Server for transferring data in a storage environment from a source to a plurality of target destinations, the Virtual Storage Server including processor memory comprising:
(a) code for issuing a write command for a target amount of data to the plurality of target destinations;
(b) code for receiving a Transfer Ready Response from each target destination in the plurality of target destinations, each Transfer Ready Response for an amount of data;
(c) code for determining a minimum amount of data from the amounts of data for the Transfer Ready Responses;
(d) code for after issuing the write command, issuing a read command for the minimum amount of data to the source;
(e) code for transferring the minimum amount of data to the plurality of target destinations; and
(f) code for repeating steps (b)-(e) until the target amount of data has been transferred to the plurality of target destinations.

### Claim 11 (depends on 10)

The Virtual Storage Server of claim 10, wherein the processor memory further comprises code for transferring the amount of data using a small amount of buffer space.

### Claim 12 (depends on 10)

The Virtual Storage Server of claim 10, wherein the processor memory further comprises code for receiving the minimum amount of data from the source.

### Claim 13 (depends on 10)

The Virtual Storage Server of claim 10, wherein the processor memory further comprises code for issuing a read span lock command to the source.

### Claim 14 (depends on 13)

The Virtual Storage Server of claim 13, wherein the processor memory further comprises code for removing the read span lock command after receiving a write command status ending command is received from the plurality of target destinations.

### Claim 15 (depends on 10)

The Virtual Storage Server of claim 10, wherein the processor memory further comprises code for issuing a write span lock command to the plurality of target destinations.

### Claim 16 (depends on 15)

The Virtual Storage Server of claim 15, wherein the processor memory further comprises code for removing the write span lock command after receiving a read command status ending command is received from the source.

### Claim 17

A Virtual Storage Server for transferring data in a storage environment among a host, a first destination, and a plurality of target destinations, the Virtual Storage Server including a processor memory comprising:
(a) code for receiving a write command from the host for a target amount of data;
(b) code for issuing a write command for the target amount of data to the first destination;
(c) code for issuing a write command for the target amount of data to the plurality of target destinations;
(d) code for receiving a Transfer Ready Response from each target destination in the plurality of target destinations, each Transfer Ready Response for an amount of data;
(e) code for determining a minimum amount of data from the amounts of data of the Transfer Ready Responses;
(f) code for after issuing the write command for the target amount of data, issuing a Transfer Ready Response for the minimum amount of data to the host;
(g) code for transferring the minimum amount of data to first destination;
(h) code for transferring the minimum amount of data to the plurality of target destinations; and
(i) code for repeating steps (b)-(h) until the target amount of data has been transferred to the target destination.

### Claim 18 (depends on 17)

The Virtual Storage Server of claim 17, wherein the processor memory further comprises code for transferring the amount of data using a small amount of buffer space.

### Claim 19 (depends on 17)

The Virtual Storage Server of claim 17, wherein the processor memory further comprises code for receiving the minimum amount of data from the host.

### Claim 20

A method of mirroring data in a virtual storage environment including a plurality of virtual logical units (VLUNs), the VLUNs arranged in a hierarchy, the method comprising:
sending a write command to a first VLUN and a second VLUN for an amount of data;
transferring the amount of data to the first VLUN;
transferring the amount of data to the second VLUN;
determining, at the first VLUN, the hierarchy of the virtual storage environment related to the first VLUN, wherein the determined hierarchy indicates a third VLUN in which at least a portion of the amount of data should be transferred; and
transferring the at least a portion of the amount of data to the third VLUN.

### Claim 21 (depends on 20)

The method of claim 20, further comprising:
determining, at the second VLUN, the hierarchy of the virtual storage environment related to the second VLUN, wherein the determined hierarchy indicates a fourth VLUN in which a second at least a portion of the amount of data should be transferred; and
transferring the second at least a part of the data to the fourth VLUN.

### Claim 22

A storage server for transferring data in a storage environment from a source to one or more target destinations, the storage server including a processor memory having a plurality of instructions configured to perform a set of steps comprising:
(a) issuing a write command for a target amount of data to the one or more target destinations;
(b) receiving one or more Transfer Ready Responses from the one or more target destinations for one or more amounts of data;
(c) after issuing the write command, issuing a read command for an amount of data to be transferred to the source that is determined from the one or more amounts of data;
(d) transferring the amount of data from the source to the one or more target destinations; and
(e) repeating steps (b)-(d) until the target amount of data has been transferred to the one or more target destinations.

### Claim 23 (depends on 22)

The storage server of claim 22, further comprising transferring the amount of data using an amount of buffer space less than said amount of data.

### Claim 24 (depends on 22)

The storage server of claim 22, further comprising receiving the amount of data to be transferred from the source.

### Claim 25 (depends on 22)

The storage server of claim 22, further comprising determining a minimum amount of data from the one or more amounts of data in the one or more Transfer Ready Responses.

### Claim 26 (depends on 25)

The storage server of claim 25, wherein issuing a read command for the amount of data comprises issuing a read command for the determined minimum amount of data.

### Claim 27 (depends on 22)

The storage server of claim 22, further comprising issuing a read span lock command to the source.

### Claim 28 (depends on 27)

The storage server of claim 27, further comprising removing the read span lock command after receiving a write command status ending command from the one or more target destinations.

### Claim 29 (depends on 22)

The storage server of claim 22, further comprising issuing a write span lock command to the one or more target destinations.

### Claim 30 (depends on 29)

The storage server of claim 29, further comprising removing the write span lock command after receiving a read command status ending command from the source.

### Claim 31

A storage server for transferring data in a storage environment from a source to a plurality of target destinations, the storage server including processor memory having a plurality of instructions configured to perform a set of steps comprising:
(a) issuing a write command for a target amount of data to the plurality of target destinations;
(b) receiving a Transfer Ready Response from each target destination in the plurality of target destinations, each Transfer Ready Response for an amount of data;
(c) determining a minimum amount of data from the amounts of data for the Transfer Ready Responses;
(d) after issuing the write command, issuing a read command for the minimum amount of data to the source;
(e) transferring the minimum amount of data to the plurality of target destinations; and
(f) repeating steps (b)-(e) until the target amount of data has been transferred to the plurality of target destinations.

### Claim 32 (depends on 31)

The storage server of claim 31, further comprising transferring the amount of data using a small amount of buffer space.

### Claim 33 (depends on 31)

The storage server of claim 31, further comprising receiving the minimum amount of data from the source.

### Claim 34 (depends on 31)

The storage server of claim 31, further comprising issuing a read span lock command to the source.

### Claim 35 (depends on 34)

The storage server of claim 34, further comprising removing the read span lock command after receiving a write command status ending command is received from the plurality of target destinations.

### Claim 36 (depends on 31)

The storage server of claim 31, further comprising issuing a write span lock command to the plurality of target destinations.

### Claim 37 (depends on 36)

The storage server of claim 36, wherein the processor memory further comprises removing the write span lock command after receiving a read command status ending command is received from the source.

### Claim 38

A storage server for transferring data in a storage environment among a host, a first destination, and a plurality of target destinations, the storage server including a processor memory having a plurality of instructions configured to perform a set of steps comprising:
(a) receiving a write command from the host for a target amount of data;
(b) issuing a write command for the target amount of data to the first destination;
(c) issuing a write command for the target amount of data to the plurality of target destinations;
(d) receiving a Transfer Ready Response from each target destination in the plurality of target destinations, each Transfer Ready Response for an amount of data;
(e) determining a minimum amount of data from the amounts of data of the Transfer Ready Responses;
(f) after issuing the write command for the target amount of data, issuing a Transfer Ready Response for the minimum amount of data to the host;
(g) transferring the minimum amount of data to first destination;
(h) transferring the minimum amount of data to the plurality of target destinations; and
(i) repeating steps (b)-(h) until the target amount of data has been transferred to the target destination.

### Claim 39 (depends on 38)

The storage server of claim 38, further comprising for transferring the amount of data using a small amount of buffer space.

### Claim 40 (depends on 38)

The storage server of claim 38, further comprising receiving the minimum amount of data from the host.
