140 likes | 372 Views
This presentation is best viewed in PowerPoint as a “slide show” (Press F5 key). A Note on malloc() and Slab Allocation. CS-502, Operating Systems Fall 2009 (EMC)
E N D
This presentation is best viewed in PowerPoint as a “slide show” (Press F5 key) 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) Note on malloc() and slab allocation
Heap Typical Implementation of malloc() free • 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 descriptor allocated descriptor free descriptor allocated descriptor allocated descriptor Note on malloc() and slab allocation
Heap Implementation of malloc() (continued) free • 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 descriptor allocated descriptor free descriptor allocated descriptor allocated descriptor Note on malloc() and slab allocation
Heap … allocated 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 free allocated descriptor Note on malloc() and slab allocation
Heap … allocated free descriptor allocated … 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 free free allocated descriptor Note on malloc() and slab allocation
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
No common term for this concept 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 Note on malloc() and slab allocation
Misuse of word cache 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 Note on malloc() and slab allocation
Slab Allocation (illustrated) Note on malloc() and slab allocation
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
Questions? Note on malloc() and slab allocation