IP Library Granted Patent US 11,907,206
Granted Patent B2
US 11,907,206 · App. 17/379,269 · Granted Feb 20, 2024

Memory pooling in high-performance network messaging architecture

Inventor: Eric Tesse (New York, NY)
Assignee: CHARLES SCHWAB & CO., INC.
G06F16/2379G06F12/0223G06F16/2255G06F16/2264G06F16/2358G06F16/24562G06F16/90344H04L69/324G06F2212/1041
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 11,907,206
App. No.
17/379,269
Granted
Feb 20, 2024
Kind
B2
Abstract

A memory management system implements instructions including maintaining multiple pool data structures, each associated with a linked list of objects and including a head pointer pointing to the first element in the linked list. The instructions include, in response to a first object no longer being needed, recycling the first object by identifying a first pool data structure that corresponds to the first object and inserting the first object into the linked list without deallocating the memory for the first object. The instructions include, in response to a new object request, identifying a second pool data structure according to a feature of the new object. If the corresponding linked list is empty, memory is allocated for the new object and the new object is assigned to the second pool data structure. If the linked list is not empty, the first object is removed from the linked list and returned.

Claims (102)

1. A memory management system comprising:

memory hardware configured to store instructions; and

processing hardware configured to execute the instructions stored by the memory hardware, wherein the instructions include:

maintaining a plurality of pool data structures, wherein each pool data structure of the plurality of pool data structures:

is associated with a respective linked list of objects, and

includes a head pointer configured to point to a first element in the linked list of objects;

in response to a first object no longer being needed, recycling the first object by:

identifying a first pool data structure, from the plurality of pool data structures, that corresponds to the first object, and

inserting the first object into a beginning position of the linked list associated with the first pool data structure without deallocating memory for the first object; and

in response to a request for a new object from a requestor:

identifying a second pool data structure from the plurality of pool data structures according to a feature of the new object,

determining whether the linked list associated with the second pool data structure is empty,

in response to the linked list associated with the second pool data structure being empty:

allocating memory for the new object,

assigning the new object to the second pool data structure, and

returning the new object to the requestor, and

in response to the linked list associated with the second pool data structure not being empty:

selecting a head object from the linked list associated with the second pool data structure,

removing the head object from the linked list associated with the second pool data structure, and

returning the head object to the requestor as the new object, wherein a state of the head object is cleared prior to the head object being returned.

2. The memory management system of claim 1 wherein the first pool data structure is identified based on a data field of the first object.

3. The memory management system of claim 2 wherein the data field is an object reference to the first pool data structure.

4. The memory management system of claim 2 wherein:

each pool data structure of the plurality of pool data structures is associated with a unique identifier; and

the data field stores the unique identifier associated with the first pool data structure.

5. The memory management system of claim 1 wherein inserting the first object into a beginning position of the linked list includes:

reading the head pointer of the first pool data structure,

configuring a pointer of the first element to be equal to the head pointer of the first pool data structure, and

selectively updating the head pointer of the first pool data structure to point to the first object.

6. The memory management system of claim 5 wherein selectively updating the head pointer is an atomic operation performed only in response to the head pointer still being equal to the pointer of the first object.

7. The memory management system of claim 1 wherein:

selecting the head object includes reading the head pointer of the second pool data structure and identifying a target of the head pointer as the head object; and

removing the head object from the linked list includes:

reading a pointer value of the head object, and

selectively updating the head pointer of the first pool data structure to be equal to the pointer value.

8. The memory management system of claim 7 wherein selectively updating the head pointer is an atomic operation performed only in response to the head pointer still pointing to the head object.

9. The memory management system of claim 1 wherein the determining whether the linked list associated with the second pool data structure is empty is based on the head pointer of the second pool data structure such that the head pointer being null indicates the linked list is empty.

10. The memory management system of claim 1 wherein:

the plurality of pool data structures includes a plurality of sets of pool data structures; and

each of the plurality of sets of pool data structures corresponds to a respective object type.

11. The memory management system of claim 1 wherein:

the first object is an instantiation of a first class of a plurality of classes;

the plurality of pool data structures includes a plurality of sets of pool data structures; and

each of the plurality of sets of pool data structures corresponds to a respective one of the plurality of classes.

12. The memory management system of claim 10 wherein:

a first set of pool data structures corresponds to a message object type; and

a second set of pool data structures corresponds to an array object type.

13. The memory management system of claim 1 wherein:

a set of pool data structures of the plurality of pool data structures corresponds one-to-one to array sizes; and

the second pool data structure is further identified according to a requested size of the new object.

14. The memory management system of claim 13 wherein the second pool data structure is identified by searching through a subset of the set of pool data structures that correspond to array sizes greater than or equal to the requested size.

15. The memory management system of claim 14 wherein the second pool data structure is identified such that no other pool data structures of the set of pool data structures meet all three of the following criteria:

a corresponding array size of the other pool data structure is smaller than a corresponding array size of the second pool data structure;

the corresponding array size of the other pool data structure is greater than or equal to the requested size; and

the linked list associated with the other pool data structure is non-empty.

16. The memory management system of claim 1 wherein:

a set of pool data structures of the plurality of pool data structures corresponds one-to-one to processing threads; and

the second pool data structure is further identified according to an identity of a presently executing processing thread.

17. The memory management system of claim 1 wherein clearing the head object comprises:

iterating through top-level entries of the head object; and

setting a flag for each of the top-level entries to indicate that valid data is absent.

18. The memory management system of claim 17 wherein:

the top-level entries of the head object are stored in an array; and

iterating through the top-level entries of the head object includes iterating through the array of the top-level entries of the head object.

19. The memory management system of claim 17 wherein setting the flag for each entry of the entries includes setting a Boolean value of the entry to false.

20. The memory management system of claim 1 wherein clearing the head object is performed as the head object is recycled.

21. A method comprising:

maintaining a plurality of pool data structures, wherein each pool data structure of the plurality of pool data structures:

is associated with a respective linked list of objects, and

includes a head pointer configured to point to a first element in the linked list of objects;

in response to a first object no longer being needed, recycling the first object by:

identifying a first pool data structure, from the plurality of pool data structures, that corresponds to the first object, and

inserting the first object into a beginning position of the linked list associated with the first pool data structure without deallocating memory for the first object; and

in response to a request for a new object from a requestor:

identifying a second pool data structure from the plurality of pool data structures according to a feature of the new object,

determining whether the linked list associated with the second pool data structure is empty,

in response to the linked list associated with the second pool data structure being empty:

allocating memory for the new object,

assigning the new object to the second pool data structure, and

returning the new object to the requestor, and

in response to the linked list associated with the second pool data structure not being empty:

selecting a head object from the linked list associated with the second pool data structure,

removing the head object from the linked list associated with the second pool data structure, and

returning the head object to the requestor as the new object, wherein a state of the head object is cleared prior to the head object being returned.

22. A non-transitory computer-readable medium comprising instructions including:

maintaining a plurality of pool data structures, wherein each pool data structure of the plurality of pool data structures:

is associated with a respective linked list of objects, and

includes a head pointer configured to point to a first element in the linked list of objects;

in response to a first object no longer being needed, recycling the first object by:

identifying a first pool data structure, from the plurality of pool data structures, that corresponds to the first object, and

inserting the first object into a beginning position of the linked list associated with the first pool data structure without deallocating memory for the first object; and

in response to a request for a new object from a requestor:

identifying a second pool data structure from the plurality of pool data structures according to a feature of the new object,

determining whether the linked list associated with the second pool data structure is empty,

in response to the linked list associated with the second pool data structure being empty:

allocating memory for the new object,

assigning the new object to the second pool data structure, and

returning the new object to the requestor, and

in response to the linked list associated with the second pool data structure not being empty:

selecting a head object from the linked list associated with the second pool data structure,

removing the head object from the linked list associated with the second pool data structure, and

returning the head object to the requestor as the new object, wherein a state of the head object is cleared prior to the head object being returned.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 5, 2023
From: TD AMERITRADE IP COMPANY, INC.
To: CHARLES SCHWAB & CO., INC.
Reel/Frame 064807/0936 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 19, 2021
From: TESSE, ERIC, MR.
To: TD AMERITRADE IP COMPANY, INC.
Reel/Frame 056903/0160 →
Continuity (1)
Related Publication 20230026120A1 · Jan 26, 2023