IP Library Granted Patent US 9,886,313
Granted Patent B2
US 9,886,313 · App. 14/816,480 · Granted Feb 6, 2018

NUMA-aware memory allocation

Inventors: Mehul Wagle (Pune, IN); Daniel Booss (Wiesloch, DE); Ivan Schreter (Malsch, DE)
Assignee: SAP SE
G06F9/5016
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,886,313
App. No.
14/816,480
Granted
Feb 6, 2018
Kind
B2
Abstract

A system includes a first node including a first processor and a first memory, and a second node including a second processor and a second memory. A worker thread of the first processor calls an allocation API to allocate a portion of the first memory, and calls a first allocator of a first memory manager associated with the first node to allocate a specified size of the first memory. The first memory manager calls an operating system function to reserve a memory segment of the specified size, sets a first Non-Uniform Memory Access policy of the first node to preferred, binds the reserved memory segment to the first node, adds the memory segment to a global freelist, and returns an address pointer of the reserved memory segment to the worker thread.

Claims (77)

1. A computing system comprising:

a first node comprising a first processor and a first memory; and

a second node comprising a second processor and a second memory,

wherein a worker thread of the first processor:

calls an allocation application program interface to allocate the first memory; and

calls a first allocator of a first memory manager associated with the first node to allocate a specified size of the first memory, and

wherein the first memory manager:

calls an operating system function to reserve a memory segment of the specified size;

sets a first Non-Uniform Memory Access policy of the first node to preferred;

binds the reserved memory segment to the first node;

sets a second Non-Uniform Memory Access policy of the first node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the first node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the first node;

adds the memory segment to a global freelist; and

returns, in response to the worker thread's call of the allocation application program interface to allocate the first memory, an address pointer of the reserved memory segment to the worker thread, wherein the global freelist is shared by multiple threads and partitioned based on nodes.

2. A computing system according to claim 1 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

3. A computing system according to claim 1 , wherein a worker thread of the second processor:

calls an allocation application program interface to allocate the second memory; and

calls a second allocator of a second memory manager associated with the second node to allocate a second specified size of the second memory, and

wherein the second memory manager:

calls an operating system function to reserve a second memory segment of the second specified size;

sets a first Non-Uniform Memory Access policy of the second node to preferred;

binds the reserved second memory segment to the second node;

sets a second Non-Uniform Memory Access policy of the second node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the second node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the second node;

adds the second memory segment to a second global freelist; and

returns, in response to the worker thread's call of the allocation application program interface to allocate the second memory, a second address pointer of the second reserved memory segment to the worker thread of the second processor, wherein the second global freelist is shared by multiple threads and partitioned based on nodes.

4. A computing system according to claim 1 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

5. A method executable by a computing device in response to execution of processor-executable program code, the method comprising:

executing a worker thread of a first processor of a first node to:

call an allocation application program interface to allocate a first memory of the first node, and

call a first allocator of a first memory manager associated with the first node to allocate a specified size of the first memory, and

executing a first memory manager to:

call an operating system function to reserve a memory segment of the specified size;

set a first Non-Uniform Memory Access policy of the first node to preferred;

bind the reserved memory segment to the first node;

set a second Non-Uniform Memory Access policy of the first node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the first node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the first node

add the memory segment to a global freelist; and

return, in response to the worker thread's call of the allocation application program interface to allocate the first memory, an address pointer of the reserved memory segment to the worker thread, wherein the global freelist is shared by multiple threads and partitioned based on nodes.

6. A method according to claim 5 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

7. A method according to claim 5 , further comprising executing a worker thread of a second processor of a second node to:

call an allocation application program interface to allocate a second memory of the second node; and

call a second allocator of a second memory manager associated with the second node to allocate a second specified size of the second memory, and

wherein the second memory manager is executed to:

call an operating system function to reserve a second memory segment of the second specified size;

set a first Non-Uniform Memory Access policy of the second node to preferred;

bind the reserved second memory segment to the second node;

set a second Non-Uniform Memory Access policy of the second node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the second node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the second node;

add the second memory segment to a second global freelist; and

return, in response to the worker thread's call of the allocation application program interface to allocate the second memory, a second address pointer of the second reserved memory segment to the worker thread of the second processor, wherein the second global freelist is shared by multiple threads and partitioned based on nodes.

8. A method according to claim 5 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

9. A non-transitory computer-readable medium storing program code, the program code executable by a computing system to cause the computing system to:

execute a worker thread of a first processor of a first node to:

call an allocation API to allocate a first memory of the first node, and

call a first allocator of a first memory manager associated with the first node to allocate a specified size of the first memory, and

execute a first memory manager to:

call an operating system function to reserve a memory segment of the specified size;

set a first Non-Uniform Memory Access policy of the first node to preferred;

bind the reserved memory segment to the first node;

set a second Non-Uniform Memory Access policy of the second node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the second node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the second node;

add the memory segment to a global freelist; and

return, in response to the worker thread's call of the allocation application program interface to allocate the first memory, an address pointer of the reserved memory segment to the worker thread, wherein the global freelist is shared by multiple threads and partitioned based on nodes.

10. A non-transitory computer-readable medium according to claim 9 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

11. A non-transitory computer-readable medium according to claim 9 , further comprising executing a worker thread of a second processor of a second node to:

call an allocation application program interface to allocate a second memory of the second node; and

call a second allocator of a second memory manager associated with the second node to allocate a second specified size of the second memory, and

wherein the second memory manager is executed to:

call an operating system function to reserve a second memory segment of the second specified size;

set a first Non-Uniform Memory Access policy of the second node to preferred;

bind the reserved second memory segment to the second node;

set a second Non-Uniform Memory Access policy of the second node as an automatic fallback policy to the first Non-Uniform Memory Access policy of the second node, the second Non-Uniform Memory Access policy being different from the first Non-Uniform Memory Access policy and being associated with a low memory or out of memory condition for the specified size of the allocated memory on the second node;

add the second memory segment to a second global freelist; and

return, in response to the worker thread's call of the allocation application program interface to allocate the second memory, a second address pointer of the second reserved memory segment to the worker thread of the second processor, wherein the second global freelist is shared by multiple threads and partitioned based on nodes.

12. A non-transitory computer-readable medium according to claim 9 , wherein the memory manager identifies a portion of the reserved memory segment, a size of the identified portion corresponding to the specified size, and

wherein the returned address pointer corresponds to the identified segment.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 3, 2015
From: WAGLE, MEHUL; BOOSS, DANIEL; SCHRETER, IVAN
To: SAP SE
Reel/Frame 036238/0688 →
Continuity (1)
Related Publication 20160371194A1 · Dec 22, 2016