Optimizing Malloc and Free

Slides:



Advertisements
Similar presentations
Dynamic Memory Management
Advertisements

Chapter 6: Memory Management
Chapter 12. Kernel Memory Allocation
Lecture 10: Heap Management CS 540 GMU Spring 2009.
KERNEL MEMORY ALLOCATION Unix Internals, Uresh Vahalia Sowmya Ponugoti CMSC 691X.
1 Optimizing Malloc and Free Professor Jennifer Rexford COS 217 Reading: Section 8.7 in K&R book
Fixed/Variable Partitioning
Allocating Memory.
Binghamton University CS-220 Spring 2015 Binghamton University CS-220 Spring 2015 Heap Management.
CPSC 388 – Compiler Design and Construction
Lab 3: Malloc Lab. “What do we need to do?”  Due 11/26  One more assignment after this one  Partnering  Non-Honors students may work with one other.
Memory Management Chapter 4. Memory hierarchy Programmers want a lot of fast, non- volatile memory But, here is what we have:
Memory Management Memory Areas and their use Memory Manager Tasks:
1 Optimizing Malloc and Free Professor Jennifer Rexford
Memory Management A memory manager should take care of allocating memory when needed by programs release memory that is no longer used to the heap. Memory.
Memory Management 1 CS502 Spring 2006 Memory Management CS-502 Spring 2006.
CS-3013 & CS-502, Summer 2006 Memory Management1 CS-3013 & CS-502 Summer 2006.
Computer Organization and Architecture
1 Inner Workings of Malloc and Free Professor Jennifer Rexford COS 217.
Memory Allocation CS Introduction to Operating Systems.
The memory allocation problem Define the memory allocation problem Memory organization and memory allocation schemes.
Dynamic Memory Allocation Questions answered in this lecture: When is a stack appropriate? When is a heap? What are best-fit, first-fit, worst-fit, and.
1 Memory Management Memory Management COSC513 – Spring 2004 Student Name: Nan Qiao Student ID#: Professor: Dr. Morteza Anvari.
1. Memory Manager 2 Memory Management In an environment that supports dynamic memory allocation, the memory manager must keep a record of the usage of.
Cosc 2150: Computer Organization Chapter 6, Part 2 Virtual Memory.
Subject: Operating System.
1 Memory Management Chapter 7. 2 Memory Management Subdividing memory to accommodate multiple processes Memory needs to be allocated to ensure a reasonable.
1 Advanced Memory Management Techniques  static vs. dynamic kernel memory allocation  resource map allocation  power-of-two free list allocation  buddy.
Chapter 17 Free-Space Management Chien-Chung Shen CIS, UD
CS 241 Discussion Section (11/17/2011). Outline Review of MP7 MP8 Overview Simple Code Examples (Bad before the Good) Theory behind MP8.
1 Memory Management Chapter 7. 2 Memory Management Subdividing memory to accommodate multiple processes Memory needs to be allocated to ensure a reasonable.
Memory Management -Memory allocation -Garbage collection.
Operating Systems ECE344 Ashvin Goel ECE University of Toronto Memory Management Overview.
Consider Starting with 160 k of memory do: Starting with 160 k of memory do: Allocate p1 (50 k) Allocate p1 (50 k) Allocate p2 (30 k) Allocate p2 (30 k)
Dynamic Memory Allocation II
Memory Management OS Fazal Rehman Shamil. swapping Swapping concept comes in terms of process scheduling. Swapping is basically implemented by Medium.
CS 241 Discussion Section (12/1/2011). Tradeoffs When do you: – Expand Increase total memory usage – Split Make smaller chunks (avoid internal fragmentation)
Lecture 7 Page 1 CS 111 Summer 2013 Dynamic Domain Allocation A concept covered in a previous lecture We’ll just review it here Domains are regions of.
CSE 351 Dynamic Memory Allocation 1. Dynamic Memory Dynamic memory is memory that is “requested” at run- time Solves two fundamental dilemmas: How can.
Dynamic Memory Management Jennifer Rexford 1. 2 Goals of this Lecture Dynamic memory management techniques Garbage collection by the run-time system (Java)
Memory Management Chapter 5 Advanced Operating System.
Memory Management I: Dynamic Storage Allocation Oct 8, 1998 Topics User-level view Policies Mechanisms class14.ppt Introduction to Computer Systems.
Memory Management What if pgm mem > main mem ?. Memory Management What if pgm mem > main mem ? Overlays – program controlled.
Storage Management Different-sized Items. Light blue indicates allocated items Heap Memory with Different-sized Items.
Chapter 17 Free-Space Management
Memory Management Chapter 7.
Section 10: Memory Allocation Topics
Memory Management Memory Areas and their use Memory Manager Tasks:
Jonathan Walpole Computer Science Portland State University
CPSC 231 Organizing Files for Performance (D.H.)
Memory Allocation The main memory must accommodate both:
CS703 - Advanced Operating Systems
Dynamic Domain Allocation
Dynamic Memory Allocation
Memory Management Memory Areas and their use Memory Manager Tasks:
PA1 is out Best by Feb , 10:00 pm Enjoy early
Linked Lists head One downside of arrays is that they have a fixed size. To solve this problem of fixed size, we’ll relax the constraint that the.
Main Memory Management
Lecture 10: Buffer Manager and File Organization
CS Introduction to Operating Systems
Memory Management Overview
Virtual Memory Hardware
Optimizing Dynamic Memory Management
Memory Allocation II CSE 351 Autumn 2017
Operating System Chapter 7. Memory Management
Memory Allocation II CSE 351 Winter 2018
Memory Management (1).
Memory Allocation II CSE 351 Winter 2018
Memory Management Memory Areas and their use Memory Manager Tasks:
COMP755 Advanced Operating Systems
Presentation transcript:

Optimizing Malloc and Free

Goals of This Lecture Brief review of K&R implementation Circular linked list of free chunks, with pointer and size in header Malloc: first-fit algorithm, with splitting Free: coalescing with adjacent chunks, if they are free Limitations Fragmentation of memory due to first-fit strategy Linear time to scan the list during malloc and free Optimizations related to assignment #6 Placement choice, splitting, and coalescing Faster free Size information in both header and footer Next and previous free-list pointers in header and footer Faster malloc Separate free list for free chunks of different sizes One bin per chunk size, or one bin for a range of sizes

Free Chunk: Pointer, Size, Data Free chunk in memory Pointer to the next chunk Size of the chunk User data header p (address returned to the user) user data size

Free List: Circular Linked List Free chunks, linked together Example: circular linked list Keep list in order of increasing addresses Makes it easier to coalesce adjacent free chunks Free list In use In use In use

Malloc: First-Fit Algorithm Start at the beginning of the list Sequence through the list Keep a pointer to the previous element Stop when reaching first chunk that is big enough Patch up the list Return a chunk to the user prev p prev p p

Malloc: First Case, A Perfect Fit Suppose the first fit is a perfect fit Remove the chunk from the list Link the previous free chunk with the next free chunk Return the current to the user (skipping header) p+1 prev p

Malloc: Second Case: Big Chunk Suppose the chunk is bigger than requested Divide the free chunk into two chunks Keep first (now smaller) chunk in the free list Allocate the second chunk to the user p p

Free User passes a pointer to the memory chunk void free(void *ap); Free function inserts chunk into the list Identify the start of entry Find the location in the free list Add to the list, coalescing entries, if needed bp ap

Free: Finding Location to Insert Start at the beginning Sequence through the list Stop at last entry before the to-be-freed element Free list p bp In use In use FREE ME

Free: Handling Corner Cases Check for wrap-around in memory To-be-freed chunk is before first entry in the free list, or To-be-freed chunk is after the last entry in the free list Free list bp p FREE ME In use In use

Free: Inserting Into Free List New element to add to free list Insert in between previous and next entries But, there may be opportunities to coalesce bp p p->s.ptr

Coalescing With Neighbors Scanning the list finds the location for inserting Pointer to to-be-freed element: bp Pointer to previous element in free list: p Coalescing into larger free chunks Check if contiguous to upper and lower neighbors Free list p bp In use In use FREE ME lower upper

Coalesce With Upper Neighbor Check if next part of memory is in the free list If so, make into one bigger chunk Else, simply point to the next free element p bp p->s.ptr upper p p->s.ptr

Coalesce With Lower Neighbor Check if previous part of memory is in the free list If so, make into one bigger chunk p bp p->s.ptr lower p p->s.ptr

K&R Malloc and Free Advantages Optimizations Limitations Simplicity of the code Optimizations Roving free-list pointer is left at the last place a chunk was allocated Splitting large free chunks to avoid wasting space Coalescing contiguous free chunks to reduce fragmentation Limitations Inefficient use of memory: fragmentation Best-fit policy can leave lots of “holes” of free chunks in memory Long execution times: linear-time overhead Malloc scans the free list to find a big-enough chunk Free scans the free list to find where to insert a chunk

Improvements: Placement Placement: reducing fragmentation Deciding which free chunk to use to satisfy a malloc() request K&R uses “first fit” (really, “next fit”) Example: malloc(8) would choose the 20-byte chunk Alternative: “best fit” or “good fit” to avoid wasting space Example: malloc(8) would choose the 8-byte chunk Free list In use In use In use 8 50 20

Improvements: Splitting Splitting: avoiding wasted memory Subdividing a large free chunk, and giving part to the user K&R malloc() does splitting whenever the free chunk is too big Example: malloc(14) splits the 20-byte chunk Alternative: selective splitting, only when the savings is big enough Example: malloc(14) allocates the entire 20-byte chunk Free list In use In use In use 8 50 20

Improvements: Coalescing Coalescing: reducing fragmentation Combining contiguous free chunks into a larger free chunk K&R does coalescing in free() whenever possible Example: combine free chunk with lower and upper neighbors Alternative: deferred coalescing, done only intermittently Example: wait, and coalesce many entries at a time later Free list p bp In use In use FREE ME lower upper

Improvements: Faster Free Performance problems with K&R free() Scanning the free list to know where to insert Keeping track of the “previous” node to do the insertion Doubly-linked, non-circular list Header Size of the chunk (in # of units) Flag indicating whether the chunk is free or in use If free, a pointer to the next free chunk Footer in all chunks If free, a pointer to the previous free chunk h e a d f o t

Size: Finding Next Chunk Go quickly to next chunk in memory Start with the user’s data portion of the chunk Go backwards to the head of the chunk Easy, since you know the size of the header Go forward to the head of the next chunk Easy, since you know the size of the current chunk

Size: Finding Previous Chunk Go quickly to previous chunk in memory Start with the user’s data portion of the chunk Go backwards to the head of the chunk Easy, since you know the size of the header Go backwards to the footer of the previous chunk Easy, since you know the size of the footer Go backwards to the header of the previous chunk Easy, since you know the chunk size from the footer

Pointers: Next Free Chunk Go quickly to next free chunk in memory Start with the user’s data portion of the chunk Go backwards to the head of the chunk Easy, since you know the size of the header Go forwards to the next free chunk Easy, since you have the next free pointer

Pointers: Previous Free Chunk Go quickly to previous free chunk in memory Start with the user’s data portion of the chunk Go backwards to the head of the chunk Easy, since you know the size of the header Go forwards to the footer of the chunk Easy, since you know the chunk size from the header Go backwards to the previous free chunk Easy, since you have the previous free pointer

Efficient Free Before: K&R Scan the free list till you find the place to insert Needed to see if you can coalesce adjacent chunks Expensive for loop with several pointer comparisons After: with header/footer and doubly-linked list Coalescing with the previous chunk in memory Check if previous chunk in memory is also free If so, coalesce Coalescing with the next chunk in memory the same way Add the new, larger chunk to the front of the linked list

But Malloc is Still Slow… Still need to scan the free list To find the first, or best, chunk that fits Root of the problem Free chunks have a wide range of sizes Solution: binning Separate free lists by chunk size Implemented as an array of free-list pointers

Binning Strategies: Exact Fit Have a bin for each chunk size, up to a limit Advantages: no search for requests up to that size Disadvantages: many bins, each storing a pointer Except for a final bin for all larger free chunks For allocating larger amounts of memory For splitting to create smaller chunks, when needed 1 1 1 1 2 3 3 3 4 > 4 5 8

Binning Strategies: Range Have a bin cover a range of sizes, up to a limit Advantages: fewer bins Disadvantages: need to search for a big enough chunk Except for a final bin for all larger free chunks For allocating larger amounts of memory For splitting to create smaller chunks, when needed 1-2 1 2 1 3-4 5-6 6 5 7-8 > 8 10 14

Stupid Programmer Tricks Inside the malloc library if (size < 32) size = 32; else if (size > 2048) size = 4096 * ((size+4095)/4096); else if (size & (size-1)) { find next larger power-of-two }

Stupid Programmer Tricks Inside the malloc library Why 4096? Use mmap() instead of sbrk() Mmap (memory map) – originally intended to “map” a file into virtual address space Often better than malloc+read. Why? If no file specified, mapping becomes “anonymous” – temporary Map/unmap at finer granularity (within reason) Recycling – unmapped pages might get used by next sbrk()

Suggestions for Assignment #6 Debugging memory management code is hard A bug in your code might stomp on the headers or footers … making it very hard to understand where you are in memory Suggestion: debug carefully as you go along Write little bits of code at a time, and test as you go Use assertion checks very liberally to catch mistakes early Use functions to apply higher-level checks on your list E.g,. all free-list elements are marked as free E.g., each chunk pointer is within the heap range E.g., the chunk size in header and footer are the same Suggestion: draw lots and lots of pictures

Conclusions K&R malloc and free have limitations Optimizations Fragmentation of the free space Due to the first-first strategy Linear time for malloc and free Due to the need to scan the free list Optimizations Faster free Headers and footers Size information and doubly-linked free list Faster malloc Multiple free lists, one per size (or range of sizes)