a note on malloc() and slab allocation
Post on 30-Dec-2015
41 Views
Preview:
DESCRIPTION
TRANSCRIPT
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 1
A Note on malloc()and Slab Allocation
CS-502, Operating SystemsFall 2009 (EMC)
(Slides include materials from Modern Operating Systems, 3rd ed., by Andrew Tanenbaum and from Operating System Concepts, 7th ed., by Silbershatz, Galvin, & Gagne)
This presentation is best viewed in PowerPoint as a “slide show”
(Press F5 key)
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 2
Typical Implementation of malloc()
• Heap comprises linked list of allocated and free blocks
• Each block is prefixed by a descriptor– Shows status
– Length
• Descriptors effectively form a linked list– Possibly doubly-linked
allocated
descriptor
descriptor
free
descriptor
allocated
descriptor
Heapallocated
descriptor
free
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 3
Implementation of malloc() (continued)
• Descriptors are not protected against program errors– Writing past block end
corrupts descriptor …
– … and messes up all future allocation!
• Many allocated blocks adjacent to each other
• Free blocks coalesced
allocated
descriptor
descriptor
free
descriptor
allocated
descriptor
Heapallocated
descriptor
free
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 4
free
free
descriptor
allocated
malloc()— Allocating New Object
• Traverse linked list until a large enough free block is found
• Carve off enough for request– length + sizeof(descriptor)
• Link remaining free portion
descriptor
descriptor Heap
allocated
…
allocated
…
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 5
freeallocated
free
descriptor
free()— Deallocating an Object
• Find descriptor from pointer
• Mark block as free
• If adjacent blocks are free, coalesce
• Note:– if bad pointer, heap becomes corrupted!
descriptor
descriptor Heap
allocated
…
allocated
…
free
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 6
Result — External Fragmentation
• After long operation, heap fills up with a lot of small, free spaces
• Too small for useful allocation
• Coalescence works, but not fast enough to recover large spaces
• Typical in 24×7 operation for days or weeks on end!
• Need something better
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 7
Slab Allocation
• Definition:– Slab. A separate memory pool for frequently created & deleted objects of same size.
• E.g, the task_struct in Linux kernel — i.e., the kernel data structure representing each process and thread — and other kernel objects
• Certain data structures in database applications
• Can be managed with bit-map allocator• Very fast; no pointer manipulation or coalescence
needed
No common term for this concept
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 8
Slab Allocation in Linux Kernel
• Maintain a separate “cache” for each major data type• E.g., task_struct, inode in Linux
• Slab: fixed number of contiguous physical pages assigned to one particular “cache”
• Upon kernel memory allocation request• Recycle an existing object if possible• Allocate a new one within a slab if possible• Else, create an additional slab for that cache
• When finished with an object• Return it to “cache” for recycling
• Benefits• Minimize fragmentation of kernel memory• Most kernel memory requests can be satisfied quickly
Misuse of
word cache
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 9
Slab Allocation (illustrated)
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 10
Summary
• Dynamic memory allocation is crucial to applications, system tools, & OS kernels
• Simple malloc() and free() are prone to a lot of fragmentation
• Especially during long, continuous operation
• Other allocators needed for more intelligent management of heap memory
• Slab allocators — one example of a better memory allocation tool
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 11
Questions?
top related