1 / 11

A Note on malloc() and Slab Allocation

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)

Download Presentation

A Note on malloc() and Slab Allocation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  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

  7. 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

  8. 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

  9. Slab Allocation (illustrated) Note on malloc() and slab allocation

  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

  11. Questions? Note on malloc() and slab allocation

More Related