a note on malloc() and slab allocation

11
Note on malloc() and slab allocati on CS-502 (EMC) Fall 2009 1 A Note on malloc() and Slab Allocation CS-502, Operating Systems Fall 2009 (EMC) (Slides include materials from Modern Operating Systems, 3 rd ed., by Andrew Tanenbaum and from Operating System Concepts, 7 th ed., by Silbershatz, Galvin, & Gagne) This presentation is best viewed in PowerPoint as a “slide show” (Press F5 key)

Upload: dalton-franks

Post on 30-Dec-2015

41 views

Category:

Documents


0 download

DESCRIPTION

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) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A Note on  malloc() and Slab Allocation

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)

Page 2: A Note on  malloc() and Slab Allocation

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

Page 3: A Note on  malloc() and Slab Allocation

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

Page 4: A Note on  malloc() and Slab Allocation

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

Page 5: A Note on  malloc() and Slab Allocation

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

Page 6: A Note on  malloc() and Slab Allocation

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

Page 7: A Note on  malloc() and Slab Allocation

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

Page 8: A Note on  malloc() and Slab Allocation

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

Page 9: A Note on  malloc() and Slab Allocation

Note on malloc() and slab allocation

CS-502 (EMC) Fall 2009 9

Slab Allocation (illustrated)

Page 10: A Note on  malloc() and Slab Allocation

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

Page 11: A Note on  malloc() and Slab Allocation

Note on malloc() and slab allocation

CS-502 (EMC) Fall 2009 11

Questions?