# US 2017/0286013 A1 · Method and system for optimistic flow control for push-based input/output with buffer stealing

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

- Number: US 2017/0286013 A1
- Document ID: US20170286013A1
- Status: Published application
- Kind: A1
- Application number: 15/087,727
- Filed: 2016-03-31
- Published: 2017-10-05
- Earliest claimed: 2016-03-31
- Assignees: EMC Corporation
- Applicants: EMC Corporation
- Inventors: Michael W. Shapiro
- Web page: https://patentgrep.com/patent/US20170286013A1

## CPC

- G06F 3/0656: {Data buffering arrangements}
- G06F 3/0608: {Saving storage space on storage systems}
- G06F 3/061: {Improving I/O performance}
- G06F 3/0673: {Single storage device}
- G06F 3/0683: {Plurality of storage devices}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

In general, embodiments of the technology relate to writing data to storage appliances. More specifically, embodiments of the technology are directed to writing data to storage media using a push-based mechanism in which clients provide the data to write to the storage media and then subsequently provide a command to write the data to the storage media.

## Claims

### Claim 1

A method for writing data by a storage appliance, comprising:
receiving a data packet comprising data from a client;
in response to receiving the packet, creating a temporary buffer binding between a physical buffer location and a virtual buffer location associated with the data packet; and
storing the data in the physical buffer location.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
receiving, from the client, a command packet associated with the virtual buffer location;
in response to receiving the command packet, initiating the writing of the data stored in the physical buffer location to persistent storage.

### Claim 3 (depends on 1)

The method of claim 1, wherein the physical buffer location is a region of physical memory.

### Claim 4 (depends on 1)

The method of claim 1, wherein creating the temporary buffer binding comprises:
selecting the physical buffer location, wherein a state of the physical buffer location is free; and
setting, after the selecting, the state of the physical buffer location to filling.

### Claim 5 (depends on 4)

The method of claim 4, further comprising:
after storing the data packet;
receiving, from the client, a command packet associated with the virtual buffer location;
in response to receiving the command packet:
setting the state of the physical buffer location to draining; and
initiating the writing of the data in the physical buffer location to persistent storage.

### Claim 6 (depends on 5)

The method of claim 5, further comprising:
after all data stored in the physical buffer location has been written to the persistent storage, setting the state of the physical buffer location to free.

### Claim 7 (depends on 1)

The method of claim 1, further comprising:
receiving a second data packet comprising second data from the client;
in response to receiving the second data packet:
making a first determination that no physical buffer locations in a physical buffer pool have a state of free, wherein the physical buffer location is in the physical buffer pool;
based on the first determination, identifying a second physical buffer location in the physical buffer pool, wherein the second physical buffer location has a state of filling;
setting a flag associated with a second temporary buffer binding between the second physical buffer location and a second virtual buffer location;
creating a third temporary buffer binding between the second physical buffer location and a third virtual buffer location associated with the second data packet; and
storing the second data in the second physical buffer location.

### Claim 8 (depends on 7)

The method of claim 7, further comprising:
receiving a third data packet from a second client, wherein the third data packet is associated with the second virtual buffer location;
in response to receiving the third data packet:
making a second determination that the flag associated with the second temporary buffer binding is set;
based on the second determination, issuing a resend notification to the second client;
removing the second temporary buffer binding from a translation table.

### Claim 9 (depends on 7)

The method of claim 7, wherein identifying the second physical buffer location in the physical buffer pool comprises:
identifying all physical buffer locations in the physical buffer pool that have a state of filling to obtain a set of physical buffer locations;
identifying the second physical buffer location from the set of physical buffer locations based on at least one selection criterion.

### Claim 10 (depends on 1)

The method of claim 1, wherein the data packet comprises an address generated using a virtual function associated with the client, wherein the address is associated with the virtual buffer location.

### Claim 11

A storage appliance, comprising:
a fabric;
a storage module controller comprising a physical buffer pool and operatively connected to the fabric and programmed to:
receive a data packet comprising data from a client;
in response to receiving the data packet, create a temporary buffer binding between a physical buffer location and a virtual buffer location associated with the data packet, wherein the physical buffer location is in the physical buffer pool; and
store the data in the physical buffer location.

### Claim 12 (depends on 11)

The storage appliance of claim 11, wherein the physical buffer pool corresponds to a region of physical memory in the storage module controller.

### Claim 13 (depends on 11)

The storage appliance of claim 11, wherein the data packet is received from the client from via the fabric.

### Claim 14 (depends on 11)

The storage appliance of claim 11, further comprising:
persistent storage,
wherein the storage module controller is further configured to write the data stored in the physical buffer location to persistent storage.

### Claim 15 (depends on 14)

The storage appliance of claim 14, wherein the persistent storage comprises solid state memory.

### Claim 16 (depends on 11)

The storage appliance of claim 11, wherein the storage module controller comprises a buffer table, wherein the buffer table tracks a state of each physical buffer location in the physical buffer pool.

### Claim 17 (depends on 16)

The storage appliance of claim 16, wherein the state of at least one physical buffer location in the physical buffer pool is one selected from a group consisting of free, filling, and draining.

### Claim 18 (depends on 11)

The storage appliance of claim 11, wherein creating the temporary buffer binding comprises:
selecting the physical buffer location, wherein a state of the physical buffer location is free;
setting, after the selecting, the state of the physical buffer location to filling; and
storing the temporary buffer binding in a translation table.

### Claim 19 (depends on 11)

The storage appliance of claim 11, wherein the data packet comprises an address generated using a virtual function associated with the client and wherein the address is associated with the virtual buffer location.

### Claim 20

A non-transitory computer readable medium comprising instructions to:
receive a data packet from a client;
in response to receiving the data packet, create a temporary buffer binding between a physical buffer location and a virtual buffer location associated with the data packet; and
store the data in the physical buffer location.
