IP Library Granted Patent US 9,769,288
Granted Patent B2
US 9,769,288 · App. 13/858,002 · Granted Sep 19, 2017

Systems and methods for dynamic receive buffering

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,769,288
App. No.
13/858,002
Granted
Sep 19, 2017
Kind
B2
Abstract

The present disclosure relates to methods and systems for dynamically changing an advertised window for a transport layer connection. A device can receive data from a server destined for an application. The device identifies the size of the application buffer corresponding to the application and advertises the application buffer size as a window size to the server. The device stores the data in the device memory. The device then determines the memory usage by comparing the memory usage to one or more predetermined thresholds. If the device determines that the memory usage is below a first predetermined threshold, the device can implement an aggressive dynamic receive buffering policy in which the device increases the advertised window size by a first increment. If the device determines that the memory usage is above the first threshold and below a second threshold, the device executes a more conservative dynamic receive buffering policy.

Claims (38)

1. A method for dynamically changing an advertised window for a transport layer connection, the method comprising:

(a) receiving, by a device intermediary to a client and a server, a request from an application to establish a transport layer connection with the server, the application advertising a first window size for the transport layer connection;

(b) establishing, by the device, the transport layer connection with the server, the device advertising a second window size to the server, the second window size set to the first window size, the transport layer connection having a maximum segment size;

(c) storing, by the device, in a dynamic receive buffer allocated from memory of the device to service the transport layer connection, data received from the server via the transport layer connection;

(d) determining, by the device, memory usage of the device is below a first predetermined threshold;

(e) increasing, by the device responsive to the determination in (d), the second window size advertised to the server by a first predetermined increment of the maximum segment size;

(f) increasing, by the device responsive to receiving additional data from the server, by a first amount, an amount of memory allocated to the dynamic receive buffer to store the additional data received from the server;

(g) determining, by the device, memory usage of the device is above the first threshold and below a second predetermined threshold greater than the first threshold;

(h) increasing, by the device responsive to the determination in (g), the increased second window size advertised to the server by a second predetermined increment of the maximum segment size; and

(i) increasing, by the device responsive to receiving additional data from the server, by a second amount, the increased amount of memory allocated to the dynamic receive buffer to store the additional data received from the server.

2. The method of claim 1 , wherein step (a) further comprises receiving, by the device, a first window size comprising a buffer size requested by an application executing on the device.

3. The method of claim 1 , wherein step (b) further comprises establishing, by the device, a second transport layer connection with the application and linking the second transport layer connection with the transport layer connection to the server, the device advertising a window size to the application for the second transport layer connection different than the first window size.

4. The method of claim 1 , wherein step (b) further comprises comparing, by the device, the first window size to a size specified by a policy for the transport layer connection and advertising the second window size as the first window size.

5. The method of claim 1 , wherein step (c) further comprises decrementing, by the device, the second window size advertised to the server by an amount of data received from the server.

6. The method of claim 1 , wherein step (d) further comprises determining, by the device, that the memory usage of the device is below the first predetermined threshold comprising a percentage of available memory.

7. The method of claim 1 , wherein step (d) further comprises determining, by the device, that the memory usage of the memory used for the transport layer connection is below the first predetermined threshold.

8. The method of claim 1 , wherein step (e) further comprises incrementing, by the device, the second window size by the first predetermined increment of four times the maximum segment size.

9. The method of claim 1 , wherein step (e) further comprises incrementing, by the device, the second window size only for packets with a non-zero payload length.

10. The method of claim 1 , further comprising determining, by the device, that the memory usage of the device is above the second predetermined threshold and decrementing the second window size advertised to the server by a predetermined decrement.

11. A method for dynamically changing an advertised window for a transport layer connection, the method comprising:

(a) receiving, by a device intermediary to a client and a server, a request from an application to establish a transport layer connection with the server, the application advertising a first window size for the transport layer connection;

(b) establishing, by the device, the transport layer connection with the server, the device advertising a second window size to the server, the second window size set to the first window size, the transport layer connection having a maximum segment size;

(c) storing, by the device, in a dynamic receive buffer allocated from memory of the device to service the transport layer connection, data received from the server via the transport layer connection;

(d) determining, by the device, that memory usage of the device is below a first predetermined threshold;

(e) increasing, by the device responsive to the determination in (d), the second window size advertised to the server by a first predetermined increment of the maximum segment size;

(f) increasing, by the device responsive to receiving additional data from the server, by a first amount, an amount of memory allocated to the dynamic receive buffer to store the additional data received from the server;

(g) determining, by the device, that a packet has been dropped via the transport layer connection;

(h) increasing, by the device responsive to the determination in (g), the second window size advertised to the server by a second predetermined increment of the maximum segment size; and

(i) increasing, by the device responsive to receiving additional data from the server, by a second amount, the increased amount of memory allocated to the dynamic receive buffer to store the additional data received from the server.

12. The method of claim 11 , wherein step (a) further comprises receiving, by the device, a first window size comprising a buffer size requested by an application executing on the device.

13. The method of claim 11 , wherein step (b) further comprises establishing, by the device, a second transport layer connection with the application and linking the second transport layer connection with the transport layer connection to the server, the device advertising a window size to the application for the second transport layer connection different than the first window size.

14. The method of claim 11 , wherein step (c) further comprises increasing, by the device, the second window size responsive to receiving an acknowledgement from the application of receipt of data forwarded by the device to the application.

15. The method of claim 11 , wherein step (g) further comprises determining, by the device that the packet has been dropped and that the memory usage is below the predetermined threshold.

16. The method of claim 11 , wherein step (g) further comprises determining, by the device, that the memory usage is above a second predetermined threshold comprising a percentage of available memory.

17. The method of claim 11 , wherein step (h) further comprises incrementing, by the device, the second window size by the predetermined increment of two times the maximum segment size.

18. The method of claim 11 , wherein step (h) comprising calculating, by the device, a bandwidth delay product for the application's transport layer connection to the server.

19. The method of claim 18 , further comprising incrementing the second window size if the bandwidth delay product is less than a predetermined factor of the bandwidth delay product.

20. The method of claim 11 , further comprises setting, by the device the second window size to a buffer size requested by an application responsive to determining that the memory usage exceeds a second predetermined threshold greater than the first predetermined threshold.

Assignments (9)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 11, 2013
From: TANEJA, VARUN; MYLARAPPA, MAHESH; ANNAMALAISAMI, SARAVANA
To: CITRIX SYSTEMS, INC.
Reel/Frame 031181/0512 →