Presentation is loading. Please wait.

Presentation is loading. Please wait.

Kernel Memory Allocation 1 Chapter 12. Kernel Memory Allocation Introduction Resource Map Allocator Simple Power-of-Two Free Lists Mckusick-Karels Allocator.

Similar presentations

Presentation on theme: "Kernel Memory Allocation 1 Chapter 12. Kernel Memory Allocation Introduction Resource Map Allocator Simple Power-of-Two Free Lists Mckusick-Karels Allocator."— Presentation transcript:

1 Kernel Memory Allocation 1 Chapter 12. Kernel Memory Allocation Introduction Resource Map Allocator Simple Power-of-Two Free Lists Mckusick-Karels Allocator Buddy System Mach-OSF/1 Zone Allocator Solaris 2.4 Slab Allocator

2 Kernel Memory Allocation 2 Introduction Page-level allocator –Paging system Supports virtual memory system –Kernel memory allocator Provides odd-sized buffers of memory to various kernel subsystems Kernel frequently needs chunks of memory of various sizes usually for short periods of time

3 Kernel Memory Allocation 3 Introduction (cont) Users of the kernel memory allocator –pathname translation routine –allocb( ) allocates STREAMs buffers of arbitrary size –In SVR4, the kernel allocates many objects (proc structures, vnodes, file descriptor blocks) dynamically when needed

4 Kernel Memory Allocation 4 Introduction (cont) Page-level allocator Paging system kernel memory allocator network buffers proc structures inodes, file descriptors user processes block buffer cache physical memory

5 Kernel Memory Allocation 5 Kernel Memory Allocator (KMA) Functional requirements –Page-level allocator pre-allocates part of main memory to KMA, which must use this memory pool efficiently –KMA also have to monitor which part of its pool are allocated and which are free Evaluation criteria –Utilization factor –KMA must be fast Both average and worst-cast latency are important –Interaction with the paging system

6 Kernel Memory Allocation 6 Resource Map Allocator Resource map –set of for free memory First fit, Best fit, Worst bit policies Advantages –Easy to implement –Not restricted to memory allocation –Allocates the exact numbers of bytes requested –Client is not constrained to release the exact region it has allocated –Allocator coalesces adjacent free regions

7 Kernel Memory Allocation 7 Resource Map Allocator (cont) Drawbacks –Map may become highly fragmented –As the fragmentation increases, so does the size of the map –Sorting for coalescing adjacent regions is expensive –Linear search to find a free region

8 Kernel Memory Allocation 8 Simple Power-of-Two Free List 32 64 128 256 512 1024 list headers free buffers allocated blocks

9 Kernel Memory Allocation 9 Simple Power-of-Two Free List (cont) Used frequently to implement malloc( ), and free( ) in the user-level C library One-word header for each buffer Advantages –Avoids the lengthy linear search of the resource map method –Eliminates the fragmentation problem

10 Kernel Memory Allocation 10 Simple Power-of-Two Free List (cont) Drawbacks –Rounding of requests to the next power of two results in poor memory utilization –No provision for coalescing adjacent free buffer to satisfy larger requests –No provision to return surplus free buffers to the page-level allocator

11 Kernel Memory Allocation 11 Mckusick-Karels Allocator 32 64 128 256 512 freelistaddr[ ] free buffers allocated blocks 3251264F32128F32 25664F2KF128 freepages kmemsizes[ ]

12 Kernel Memory Allocation 12 Mckusick-Karels Allocator (cont) Used in 4.4BSD, Digital UNIX Requires that –a set of contiguous pages –all buffers belonging to the same page to be the same size States of each page –Free corresponding element of kmemsizes[ ] contains a pointer to the element for the next free page –Divided into buffers of a particular size kmemsizes[ ] element contains the size

13 Kernel Memory Allocation 13 Mckusick-Karels Allocator (cont) –Part of a buffer that spanned multiple pages kmemsizes[ ] element corresponding to the first page of the buffer contains the buffer size Improvement over simple power-of-two –Faster, wastes less memory, can handle large and small request efficiently Drawbacks –No provision for moving memory from one list to another –No way to return memory to the paging system

14 Kernel Memory Allocation 14 Buddy System Basic idea –Combines free buffer coalescing with a power- of-two allocator –When a buffer is split, each buffer is called the buddy of the other Advantages –Coalescing adjacent free buffers –Easy exchange of memory between the allocator and the paging system Disadvantages –Performance degradation due to coalescing –Program interface needs the size of the buffer

15 Kernel Memory Allocation 15 Buddy System (e.g.) 11111111111111000000000000000000 3264128256512 bitmap free list headers BCDD’A’ 0256384448512 C’ B’ A freein use allocate(256)  allocate(128)  allocate(64) 1023

16 Kernel Memory Allocation 16 Buddy System (e.g.) 11111111000011001111000000000000 3264128256512 bitmap free list headers BCDD’F 0256384448512 C’ B’ A  allocate(128)  release(C, 128) F’E’ 640768 1023 E A’

17 Kernel Memory Allocation 17 Buddy System (e.g.) 11111111000000001111000000000000 3264128256512 bitmap free list headers BB’F 0256512 C’ A  release(D, 64) F’E’ 640768 1023 E

18 Kernel Memory Allocation 18 SVR4 Lazy Buddy System Basic idea –Defer coalescing until it becomes necessary, and then to coalesce as many buffers as possible Lazy coalescing –N buffers, A buffers are active, L are locally free, G are globally free –N = A + L + G –slack = N - 2L - G = A - L

19 Kernel Memory Allocation 19 SVR4 Lazy Buddy System (cont) Lazy state (slack = 0) –buffer consumption is in a steady state and coalescing is not necessary Reclaiming state (slack = 1) –consumption is borderline, coalescing is needed Accelerated state (slack = 2 or more) –consumption is not in a steady state, and the allocator must coalesce faster

20 Kernel Memory Allocation 20 Mach-OSF/1 Zone Allocator zone of zones... struct zone active zones free_elements next_zone free objects struct obj1 struct objn first_zone last_zone

21 Kernel Memory Allocation 21 Mach-OSF/1 Zone Allocator (cont) Basic idea –Each class of dynamically allocated objects is assigned to its own size, which is simply a pool of free objects of that class –Any single page is only used for one zone –Free objects of each zone are maintained on a linked list, headed by a struct zone –Allocation and release involve nothing more than removing objects from and returning objects to the free list –If an allocation request finds the free list empty, it asks the page-level allocator for alloc( ) more bytes

22 Kernel Memory Allocation 22 Mach-OSF/1 Zone Allocator (cont) Garbage collection –Free pages can be returned to the paging system and later recovered for other zones Analysis –Zone allocator is fast and efficient –No provision for releasing only part of the allocated object –Zone objects are exactly the required size –Garbage collector provides a mechanism for memory reuse

23 Kernel Memory Allocation 23 Hierarchical Allocator for Multiprocessors main freelist aux freelist target = 3 global freelist bucket list target = 3 per-pages freelists Coalesce-to- Page layer Global layer Per-CPU cache

24 Kernel Memory Allocation 24 Solaris 2.4 Slab Allocator Better performance and memory utilization than other implementation Main issues –Object reuse advantage of caching and reusing the same object, rather than allocating and initializing arbitrary chunks of memory –Hardware cache utilization Most kernel objects have their important, frequently accessed fields at the beginning of the object

25 Kernel Memory Allocation 25 Solaris 2.4 Slab Allocator –Allocator footprint Footprint of a allocator is the portion of the hardware cache and the translation lookaside buffer (TLB) that is overwritten by the allocator itself Large footprint causes many cache and TLB misses, reducing the performance of the allocator Large footprint: resource maps, buddy systems Smaller footprint: Mckusick-Karels, zone Design –slab allocator is a variant of the zone method and is organized as a collection of object caches

26 Kernel Memory Allocation 26 Solaris 2.4 Slab Allocator (cont) page-level allocator vnode cache proc cache mbuf cache msgb cache... active vnodes active procs active mbufs active msgbs back end front end

27 Kernel Memory Allocation 27 Solaris 2.4 Slab Allocator (cont) Implementation freeactivefreeactive freeactive NULL coloring area (unused) slab data unused space extra space for linkage linked list of slabs in same cache freelist pointers

28 Kernel Memory Allocation 28 Solaris 2.4 Slab Allocator (cont) Analysis –Space efficient –Coalescing scheme results in better hardware cache and memory bus utilization –Small footprint (only one slab for most requests)

Download ppt "Kernel Memory Allocation 1 Chapter 12. Kernel Memory Allocation Introduction Resource Map Allocator Simple Power-of-Two Free Lists Mckusick-Karels Allocator."

Similar presentations

Ads by Google