Patent ID: 8533374

Claim:
A method for adaptive data transfer comprising: receiving a write request at an application protocol layer; buffering the write request; transferring to electronic storage a first portion of data of the buffered write request using a first setting value in a range; measuring, using at least one computer processor, a transfer rate of the first portion of transferred data; varying the first setting value by a first amount in a first direction to identify a second setting value, wherein the first amount is within a specified percentage; transferring to electronic storage a second portion of data of the buffered write request using the second setting value; measuring a transfer rate of the second portion of transferred data; replacing the first setting value with the second setting value if the transfer rate of the second portion of transferred data is greater than the transfer rate of the first portion of transferred data; varying the first setting value by a second amount in a second direction if the transfer rate of the second portion of transferred data is less than the transfer rate of the first portion of transferred data to identify a third setting value; varying the first setting value by a third amount in either the first direction or the second direction in response to at least one of: a specified period of time elapsing, a specified amount of data being transferred, a specified number of transfers completed, and a network condition detected, wherein the third amount is greater than the first amount and wherein the third amount is greater than the second amount; transferring to electronic storage a third portion of data of the buffered write request using the varied setting value; measuring a transfer rate of the third portion of transferred data; and replacing the first setting value with the varied setting value if the transfer rate of the third portion of transferred data is greater than the transfer rate of a portion of transferred data associated with the first setting value.