a note on malloc() and slab allocation
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 PresentationTRANSCRIPT
![Page 1: A Note on malloc() and Slab Allocation](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/9.jpg)
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 9
Slab Allocation (illustrated)
![Page 10: A Note on malloc() and Slab Allocation](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071717/56812a68550346895d8deab1/html5/thumbnails/11.jpg)
Note on malloc() and slab allocation
CS-502 (EMC) Fall 2009 11
Questions?