A system, comprising: a first host and a second host connected over a network, the second host being connected to a storage device; a sending process executable in the first host for communicating data to a receiving process executable in the second host in order for the receiving process to write the data to the storage device, wherein the sending process is configured to send data to the receiving process at a specified variable data transfer rate x(t) at any time t, wherein the receiving process is configured to store data received in a ring buffer before writing it to the storage device; a storage rate controller incorporated into the receiving process, wherein the storage rate controller is configured to: 1) measure the current occupancy of the ring buffer, 2) in response to the measured buffer occupancy, p(t), exceeding minimum threshold, ρ min, calculate an updated data transfer rate x'(t) as a function of the current data transfer rate x(t), the measured current occupancy, the total ring buffer size, and a specified target occupancy value, and 3) communicate the updated data transfer rate to the sending process, wherein the storage rate controller is configured to compute and communicate an updated data transfer rate x' (t) from one of a first function as: a) x ' t = x t + γ dist / T t. ρ ' B − ρ t B or, b) x ' t = x t + γ dist / T t ρ ' B − x t ρ t τ t when the current occupancy p(t) is greater than or equal to a predetermined value ρ min, where ρ' is a specified target occupancy, γ dist is a weighting factor, B is a measure to the total data capacity of the ring buffer, τ(t) = (B/write_size)*w(t) where write_size is a measure of the amount of data written during the most recent write operation and w(t) is the duration of the most recent write operation, and T(t) is the time duration since the current data transfer rate was last updated; and wherein the sending process is configured to adjust the data transfer rate x(t) to the updated data transfer rate x'(t). second host being connected to a storage device; a sending process executable in the first host for communicating data to a receiving process executable in the second host in order for the receiving process to write the data to the storage device, wherein the sending process is configured to send data to the receiving process at a specified variable data transfer rate x(t) at any time t, wherein the receiving process is configured to store data received in a ring buffer before writing it to the storage device; a storage rate controller incorporated into the receiving process, wherein the storage rate controller is configured to: 1) measure the current occupancy of the ring buffer, 2) in response to the measured buffer occupancy, p(t), exceeding minimum threshold, ρ min, calculate an updated data transfer rate x'(t) as a function of the current data transfer rate x(t), the measured current occupancy, the total ring buffer size, and a specified target occupancy value, and 3) communicate the updated data transfer rate to the sending process, wherein the storage rate controller is configured to compute and communicate an updated data transfer rate x' (t) from one of a first function as: a) x ' t = x t + γ dist / T t. ρ ' B − ρ t B or, b) x ' t = x t + γ dist / T t ρ ' B − x t ρ t τ t when the current occupancy p(t) is greater than or equal to a predetermined value ρ min, where ρ' is a specified target occupancy, γ dist is a weighting factor, B is a measure to the total data capacity of the ring buffer, τ(t) = (B/write_size)*w(t) where write_size is a measure of the amount of data written during the most recent write operation and w(t) is the duration of the most recent write operation, and T(t) is the time duration since the current data transfer rate was last updated; and a) x ' t = x t + γ dist / T t. ρ ' B − ρ t B or, b) x ' t = x t + γ dist / T t ρ ' B − x t ρ t τ t wherein the sending process is configured to adjust the data transfer rate x(t) to the updated data transfer rate x'(t).