IP Library Granted Patent US 9,965,385
Granted Patent B2
US 9,965,385 · App. 15/268,226 · Granted May 8, 2018

Memory allocation accelerator

Inventor: Yan Solihin (Raleigh, NC)
Assignee: EMPIRE TECHNOLOGY DEVELOPMENT LLC
G06F12/0292G06F3/061G06F3/0625G06F3/0631G06F3/0644G06F3/0673G06F12/023G06F12/0223
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,965,385
App. No.
15/268,226
Filed
Sep 16, 2016
Granted
May 8, 2018
Kind
B2
Art Unit
3634
USPC
710/1
Abstract

Technologies are generally described for methods and systems effective to implement a memory allocation accelerator. A processor may generate a request for allocation of a requested chunk of memory. The request may be received by a memory allocation accelerator configured to be in communication with the processor. The memory allocation accelerator may process the request to identify an address for a particular chunk of memory corresponding to the request and may return the address to the processor.

Claims (76)

1. A method to allocate memory for a processor core, the method comprising:

storing, by a memory allocation accelerator configured to be in communication with the processor core, pre-allocation data, wherein the pre-allocation data includes a pointer to an available chunk of memory;

storing, by the memory allocation accelerator, metadata related to memory available to be allocated for the processor core, wherein the metadata includes pointers to starting addresses in a list, and wherein the list identifies chunks of cache memory configured to be in communication with the processor core;

after storing the pre-allocation data and the metadata, receiving a request, by the memory allocation accelerator, for allocation of a requested chunk of memory;

in response to the request, analyzing, by the memory allocation accelerator, the pre-allocation data;

determining that the pointer to the available chunk, responsive to the requested chunk, is included in the pre-allocation data;

returning, by the memory allocation accelerator, an address identified by the pointer and that corresponds to the responsive chunk;

identifying, by the memory allocation accelerator, a new address in the metadata for a chunk size corresponding to the responsive chunk; and

modifying the metadata based on the chunk size.

2. The method of claim 1 , wherein storing the metadata includes storing metadata that includes pointers to starting addresses in a free list, and wherein the free list identifies de-allocated chunks of memory.

3. The method of claim 2 , wherein modifying the metadata comprises:

changing, by the memory allocation accelerator, an address of one of the pointers in the free list to a different address based on the chunk size; and

identifying in the metadata, by the memory allocation accelerator, a number of available chunks of the chunk size.

4. The method of claim 1 , wherein storing the metadata includes storing metadata that includes pointers to starting addresses in a pool list, and wherein the pool list identifies available chunks of memory in a pool.

5. The method of claim 1 , wherein:

storing the metadata includes storing metadata that includes pointers to starting addresses in a pool list, wherein the pool list identifies available chunks of memory in a pool; and

modifying the metadata comprises:

changing, by the memory allocation accelerator, an address of one of the pointers in the pool list to a different address based on the chunk size; and

identifying in the metadata, by the memory allocation accelerator, a number of available chunks of the chunk size.

6. The method of claim 5 , wherein:

the pool list includes indications of numbers of available chunks of respective chunk sizes, and

the method further comprises decrementing the number of available chunks of the chunk size of the requested chunk.

7. The method of claim 1 , further comprising:

storing, by the memory allocation accelerator, an address for the metadata in a region related to a program executed by the processor core.

8. The method of claim 1 , further comprising:

assigning a page in memory to the memory allocation accelerator; and

determining, by the memory allocation accelerator, available chunks in the page.

9. A method to allocate memory for a processor core, the method comprising:

storing, by a memory allocation accelerator configured to be in communication with the processor core, metadata related to memory available to be allocated for the processor core, wherein the metadata includes pointers to starting addresses in a list, and wherein the list identifies chunks of cache memory configured to be in communication with the processor core;

after storing the metadata, receiving, by the memory allocation accelerator, a request generated by the processor core for allocation of a requested chunk of memory of a chunk size;

processing the request, by the memory allocation accelerator, to identify an address for a particular available chunk of memory corresponding to the request;

returning the address, by the memory allocation accelerator, to the processor core;

receiving, by the memory allocation accelerator, a de-allocation request for de-allocation of the requested chunk; and

processing the de-allocation request, by the memory allocation accelerator, to update the list to point to the requested chunk.

10. The method of claim 9 , wherein storing the metadata includes storing metadata that includes pointers to starting addresses in a free list, and wherein the free list identifies de-allocated chunks of memory.

11. The method of claim 10 , wherein processing the de-allocation request further comprises:

changing, by the memory allocation accelerator, an address of one of the pointers in the free list to a different address based on the chunk size; and

identifying, by the memory allocation accelerator, in the metadata a number of available chunks of the chunk size.

12. The method of claim 11 , wherein storing the metadata includes storing metadata that includes pointers to starting addresses in a pool list, and wherein the pool list identifies available chunks of memory in a pool.

13. The method of claim 11 , wherein:

storing the metadata includes storing metadata that includes pointers to starting addresses in a pool list, wherein the pool list identifies available chunks of memory in a pool; and

processing the de-allocation request comprises:

changing, by the memory allocation accelerator, an existing address of one of the pointers in the pool list to a different address based on the chunk size; and

identifying in the metadata, by the memory allocation accelerator, a number of available chunks of the chunk size.

14. The method of claim 13 , wherein:

the pool list includes indications of numbers of available chunks of respective chunk sizes, and

the method further comprises decrementing the number of available chunks of the chunk size of the requested chunk.

15. The method of claim 9 , further comprising:

storing, by the memory allocation accelerator, an address for the metadata in a region related to a program executed by the processor core.

16. The method of claim 9 , further comprising:

assigning a page in memory to the memory allocation accelerator; and

determining, by the memory allocation accelerator, available chunks in the page.

17. A memory allocation accelerator, comprising:

a controller configured to be in communication with a memory,

wherein the controller is configured to:

store pre-allocation data, wherein the pre-allocation data includes a pointer to an available chunk of memory;

store metadata related to memory available to be allocated for the processor core, wherein the metadata includes pointers to starting addresses in a list, and wherein the list identifies chunks of cache memory configured to be in communication with the processor core;

after storage of the pre-allocation data and the metadata, receive a request, by the memory allocation accelerator, for allocation of a requested chunk of memory;

in response to the request, analyze the pre-allocation data;

determine that the pointer to the available chunk, responsive to the requested chunk, is included in the pre-allocation data;

return an address identified by the pointer and that corresponds to the responsive chunk;

identify a new address in the metadata for a chunk size that corresponds to the responsive chunk; and

modify the metadata based on the chunk size.

18. The memory allocation accelerator of claim 17 , wherein to store the metadata, the controller is configured to store metadata that includes pointers to starting addresses in a free list, and wherein the free list identifies de-allocated chunks of cache memory configured to be in communication with the processor core.

19. The memory allocation accelerator of claim 18 , wherein to modify the metadata, the controller is configured to:

change an existing address of one of the pointers in the free list to a different address based on the chunk size; and

identify, in the metadata, a number of available chunks of the chunk size.

20. The memory allocation accelerator of claim 17 , wherein to store the metadata, the controller is configured to store metadata that includes pointers to starting addresses in a pool list, and wherein the pool list identifies available chunks of memory in a pool.

21. The memory allocation accelerator of claim 17 , wherein:

to store the metadata, the controller is configured to store metadata that includes pointers to starting addresses in a pool list, wherein the pool list identifies available chunks of memory in a pool; and

to modify the metadata, the controller is configured to:

change an existing address of one of the pointers in the pool list to a different address based on the chunk size; and

identify, in the metadata, a number of available chunks of the chunk size.

22. The memory allocation accelerator of claim 21 , wherein:

the pool list includes indications of numbers of available chunks of respective chunk sizes, and

the controller is further configured to decrement the number of available chunks of the chunk size of the requested chunk.

Assignments (3)
RELEASE OF SECURITY INTEREST IN PATENTS, RECORDED ON JANUARY 29, 2019, AT REEL/FRAME 048373/0217 Recorded Jun 22, 2026
From: CRESTLINE DIRECT FINANCE, L.P., AS COLLATERAL AGENT
To: EMPIRE TECHNOLOGY DEVELOPMENT LLC
Reel/Frame 075799/0053 →
RELEASE OF SECURITY INTEREST IN PATENTS, RECORDED ON JANUARY 29, 2019 AT REEL 048373 FRAME 0217 Recorded Sep 22, 2025
From: CRESTLINE DIRECT FINANCE, L.P., AS COLLATERAL AGENT
To: EMPIRE TECHNOLOGY DEVELOPMENT LLC
Reel/Frame 072936/0464 →
SECURITY INTEREST Recorded Jan 29, 2019
From: EMPIRE TECHNOLOGY DEVELOPMENT LLC
To: CRESTLINE DIRECT FINANCE, L.P.
Reel/Frame 048373/0217 →
Continuity (2)
Continuation 13982807
Related Publication 20170004079A1 · Jan 5, 2017