Thread local cache memory allocator in a multitasking operating system
First Claim
1. A method of allocating a block of memory in response to a memory allocation request from a thread in a multi-threaded operating system, comprising:
- providing a cache slot being private to said thread, said cache slot having cached therein said block of memory previously freed by said thread;
determining whether said memory allocation request can be satisfied out of said cache slot;
if said memory allocation request can be satisfied out of said cache slot, satisfying said memory allocation request out of said cache slot;
determining whether said block of memory has a block size not greater than a predetermined threshold size; and
satisfying said memory allocation request out of a small block cache portion of said cache slot if said block size is not greater than said predetermined threshold size.
2 Assignments
0 Petitions
Accused Products
Abstract
A memory allocator provides a cache blocks private to each thread of a multi-threaded application, and thereby minimizes performance losses associated with mutual exclusion (MUTEX) contention, MUTEX locking and/or coalescence operations. The memory allocator maintains thread local cache slots in a linked list of arrays. Upon a memory allocation request from a thread, blocks of the memory, which ordinarily require MUTEX locking, are cached in the local thread cache slot allocated to the requesting thread, and the request is satisfied from the cache slot allocated to the requesting thread. Each cache slot is private to the thread to which it is assigned, and thus does not require MUTEX locking. Further, the cache slots do not require defragmentation thereof, and thus require no coalescence operations. Thus, the performance of the multi-threaded application program is optimized.
108 Citations
18 Claims
-
1. A method of allocating a block of memory in response to a memory allocation request from a thread in a multi-threaded operating system, comprising:
-
providing a cache slot being private to said thread, said cache slot having cached therein said block of memory previously freed by said thread;
determining whether said memory allocation request can be satisfied out of said cache slot;
if said memory allocation request can be satisfied out of said cache slot, satisfying said memory allocation request out of said cache slot;
determining whether said block of memory has a block size not greater than a predetermined threshold size; and
satisfying said memory allocation request out of a small block cache portion of said cache slot if said block size is not greater than said predetermined threshold size. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9)
defining a structure of said cache slot;
wherein said structure comprises;
a local holding header defining an array of local holding headers for caching small blocks;
a first local free block pointer defining a linked list of free cache pointers for caching ordinary blocks;
a second local free block pointer defining an array of pointers to heads of a linked lists of cached ordinary blocks; and
a third local free block pointer defining an array of pointers to tails of said linked lists of cached ordinary blocks; and
wherein said second local free block pointer and said third local block pointer are indexed by buckets, each of said buckets having stored therein one or more memory blocks arranged in a descending order of size; and
wherein said heads of said linked lists of cached ordinary blocks contain largest blocks of each of respective buckets, and said tails of said linked lists of cached ordinary blocks contain smallest blocks of each of respective buckets.
-
-
3. The method of allocating a block of memory in accordance with claim 2, wherein:
-
said structure of said cache slot further comprises;
a initialized flag indicating whether said cache slot has been initialized;
a free flag indicating whether said cache slot is free;
an arena identification specifying an arena of said thread holding said cache slot;
a last used time indication indicating a last time said cache slot was used by said thread; and
a pointer to a next extent of cache slot, said extent of cache slot comprising a linked array of a plurality of cache slots.
-
-
4. The method of allocating a block of memory in accordance with claim 1, further comprising:
storing a pointer to said cache slot as a thread local storage variable of said thread.
-
5. The method of allocating a block of memory in accordance with claim 1, further comprising:
satisfying said memory allocation request out of a ordinary block cache portion of said cache slot if said block size is greater than said predetermined threshold size.
-
6. The method of allocating a block of memory in accordance with claim 5, wherein said step of satisfying said memory allocation request out of a ordinary block cache portion of said cache slot comprises:
-
finding a bucket corresponding to said block size;
finding a best fit block within said bucket, said best fit block being the smallest cached block in said bucket, which is large enough to satisfy said memory allocation request; and
returning a pointer to said best fit block to said thread.
-
-
7. The method of allocating a block of memory in accordance with claim 6, wherein said step of finding said bucket corresponding to said block size comprises:
-
determining an nth power of two bucket, said nth power of two bucket containing cached blocks in a size range 2n to (2(n+1)−
1) bytes, andwherein said block size being in said size range.
-
-
8. The method of allocating a block of memory in accordance with claim 7, wherein said step of finding said best fit block comprises:
traversing from a head of said bucket to a tail of said bucket to find said best fit block, which is just large enough to satisfy said memory allocation request.
-
9. The method of allocating a block of memory in accordance with claim 1, wherein said step of satisfying said memory allocation request out of said small block cache portion of said cache slot comprises:
-
calculating a local holding header index;
determining whether a local holding header corresponding to said local holding header index has at least one cached block; and
allocating a small block being pointed to by said local holding header index if said local holding header corresponding to said local holding header index has at least one cached block.
-
-
10. A computer readable storage medium having stored thereon a computer program for implementing a method of allocating a block of memory in response to a memory allocation request from a thread in a multi-threaded operating system, said computer program comprising a set of instructions for:
-
providing a cache slot being private to said thread, said cache slot having cached therein said block of memory previously freed by said thread;
determining whether said memory allocation request can be satisfied out of said cache slot;
if said memory allocation request can be satisfied out of said cache slot, satisfying said memory allocation request out of said cache slot; and
determining whether said block of memory has a block size not greater than a predetermined threshold size; and
satisfying said memory allocation request out of a small block cache portion of said cache slot if said block size is not greater than said predetermined threshold size. - View Dependent Claims (11, 12, 13, 14, 15, 16, 17, 18)
defining a structure of said cache slot;
wherein said structure comprises;
a local holding header defining an array of local holding headers for caching small blocks;
a first local free block pointer defining a linked list of free cache pointers for caching ordinary blocks;
a second local free block pointer defining an array of pointers to heads of a linked lists of cached ordinary blocks; and
a third local free block pointer defining an array of pointers to tails of said linked lists of cached ordinary blocks; and
wherein said second local free block pointer and said third local block pointer are indexed by buckets, each of said buckets having stored therein one or more memory blocks arranged in a descending order of size; and
wherein said heads of said linked lists of cached ordinary blocks contain largest blocks of each of respective buckets, and said tails of said linked lists of cached ordinary blocks contain smallest blocks of each of respective buckets.
-
-
12. The computer readable storage medium according to claim 11, wherein:
-
said structure of said cache slot further comprises;
a initialized flag indicating whether said cache slot has been initialized;
a free flag indicating whether said cache slot is free;
an arena identification specifying an arena of said thread holding said cache slot;
a last used time indication indicating a last time said cache slot was used by said thread; and
a pointer to a next extent of cache slot, said extent of cache slot comprising a linked array of a plurality of cache slots.
-
-
13. The computer readable storage medium according to claim 10, wherein said computer program further comprising one or more instructions for:
storing a pointer to said cache slot as a thread local storage variable of said thread.
-
14. The computer readable storage medium according to claim 10, wherein said computer program further comprising one or more instructions for:
satisfying said memory allocation request out of a ordinary block cache portion of said cache slot if said block size is greater than said predetermined threshold size.
-
15. The computer readable storage medium according to claim 14, wherein said computer program further comprising one or more instructions for:
-
finding a bucket corresponding to said block size;
finding a best fit block within said bucket, said best fit block being the smallest cached block in said bucket, which is large enough to satisfy said memory allocation request; and
returning a pointer to said best fit block to said thread.
-
-
16. The computer readable storage medium according to claim 15, wherein said computer program further comprising one or more instructions for:
-
determining an nth power of two bucket, said nth power of two bucket containing cached blocks in a size range 2n to (2(n+1)−
1) bytes, andwherein said block size being in said size range.
-
-
17. The computer readable storage medium according to claim 16, wherein said computer program further comprising one or more instructions for:
traversing from a head of said bucket to a tail of said bucket to find said best fit block, which is just large enough to satisfy said memory allocation request.
-
18. The computer readable storage medium according to claim 10, wherein said computer program further comprising one or more instructions for:
-
calculating a local holding header index;
determining whether a local holding header corresponding to said local holding header index has at least one cached block; and
allocating a small block being pointed to by said local holding header index if said local holding header corresponding to said local holding header index has at least one cached block.
-
Specification