Changeset 3a038fa for doc/theses/mubeen_zulfiqar_MMath/intro.tex
- Timestamp:
- Feb 23, 2022, 10:31:12 AM (4 years ago)
- Branches:
- ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
- Children:
- cc7bbe6
- Parents:
- f53afafb
- File:
-
- 1 edited
-
doc/theses/mubeen_zulfiqar_MMath/intro.tex (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/mubeen_zulfiqar_MMath/intro.tex
rf53afafb r3a038fa 1 1 \chapter{Introduction} 2 3 4 \section{Introduction}5 2 6 3 % Shared-memory multi-processor computers are ubiquitous and important for improving application performance. … … 9 6 % Therefore, providing high-performance, scalable memory-management is important for virtually all shared-memory multi-threaded programs. 10 7 8 \vspace*{-23pt} 11 9 Memory management takes a sequence of program generated allocation/deallocation requests and attempts to satisfy them within a fixed-sized block of memory while minimizing the total amount of memory used. 12 10 A general-purpose dynamic-allocation algorithm cannot anticipate future allocation requests so its output is rarely optimal. … … 16 14 17 15 18 \s ubsection{Memory Structure}16 \section{Memory Structure} 19 17 \label{s:MemoryStructure} 20 18 … … 25 23 Dynamic code/data memory is managed by the dynamic loader for libraries loaded at runtime, which is complex especially in a multi-threaded program~\cite{Huang06}. 26 24 However, changes to the dynamic code/data space are typically infrequent, many occurring at program startup, and are largely outside of a program's control. 27 Stack memory is managed by the program call-mechanism using simple LIFO management, which works well for sequential programs.25 Stack memory is managed by the program call-mechanism using a simple LIFO technique, which works well for sequential programs. 28 26 For multi-threaded programs (and coroutines), a new stack is created for each thread; 29 27 these thread stacks are commonly created in dynamic-allocation memory. … … 39 37 40 38 41 \s ubsection{Dynamic Memory-Management}39 \section{Dynamic Memory-Management} 42 40 \label{s:DynamicMemoryManagement} 43 41 44 42 Modern programming languages manage dynamic-allocation memory in different ways. 45 Some languages, such as Lisp~\cite{CommonLisp}, Java~\cite{Java}, Go~\cite{Go}, Haskell~\cite{Haskell}, provide explicit allocation but \emph{implicit} deallocation of data through garbage collection~\cite{Wilson92}.43 Some languages, such as Lisp~\cite{CommonLisp}, Java~\cite{Java}, Haskell~\cite{Haskell}, Go~\cite{Go}, provide explicit allocation but \emph{implicit} deallocation of data through garbage collection~\cite{Wilson92}. 46 44 In general, garbage collection supports memory compaction, where dynamic (live) data is moved during runtime to better utilize space. 47 45 However, moving data requires finding pointers to it and updating them to reflect new data locations. … … 58 56 However, high-performance memory-allocators for kernel and user multi-threaded programs are still being designed and improved. 59 57 For this reason, several alternative general-purpose allocators have been written for C/\CC with the goal of scaling in a multi-threaded program~\cite{Berger00,mtmalloc,streamflow,tcmalloc}. 60 This workexamines the design of high-performance allocators for use by kernel and user multi-threaded applications written in C/\CC.61 62 63 \s ubsection{Contributions}58 This thesis examines the design of high-performance allocators for use by kernel and user multi-threaded applications written in C/\CC. 59 60 61 \section{Contributions} 64 62 \label{s:Contributions} 65 63 66 64 This work provides the following contributions in the area of concurrent dynamic allocation: 67 \begin{enumerate} 68 \item 69 Implementation of a new stand-lone concurrent memory allocator ($\approx$1,200 lines of code) for C/\CC programs using kernel threads (1:1 threading), and specialized versions of the allocator for programming languages \uC and \CFA using user-level threads running over multiple kernel threads (M:N threading). 70 71 \item 72 Adopt the return of @nullptr@ for a zero-sized allocation, rather than an actual memory address, both of which can be passed to @free@. 73 Most allocators use @nullptr@ to indicate an allocation failure, such as full memory; 74 hence the need to return an alternate value for a zero-sized allocation. 75 The alternative is to abort the program on allocation failure. 76 In theory, notifying the programmer of a failure allows recovery; 77 in practice, it is almost impossible to gracefully recover from allocation failure, especially full memory, so adopting the cheaper return @nullptr@ for a zero-sized allocation is chosen. 78 79 \item 80 Extended the standard C heap functionality by preserving with each allocation its original request size versus the amount allocated due to bucketing, if an allocation is zero fill, and the allocation alignment. 65 \begin{enumerate}[leftmargin=*] 66 \item 67 Implementation of a new stand-lone concurrent low-latency memory-allocator ($\approx$1,200 lines of code) for C/\CC programs using kernel threads (1:1 threading), and specialized versions of the allocator for programming languages \uC and \CFA using user-level threads running over multiple kernel threads (M:N threading). 68 69 \item 70 Adopt returning of @nullptr@ for a zero-sized allocation, rather than an actual memory address, both of which can be passed to @free@. 71 72 \item 73 Extended the standard C heap functionality by preserving with each allocation its original request size versus the amount allocated, if an allocation is zero fill, and the allocation alignment. 81 74 82 75 \item … … 117 110 118 111 \item 119 Provide complete and fast allocation statistics to help understand program behaviour: 112 Provide mostly contention-free allocation and free operations via a heap-per-kernel-thread implementation. 113 114 \item 115 Provide complete, fast, and contention-free allocation statistics to help understand program behaviour: 120 116 \begin{itemize} 121 117 \item … … 129 125 130 126 \item 131 Provide mostly contention-free allocation and free operations via a heap-per-kernel-thread implementation. 132 133 \item 134 Provide extensive contention-free runtime checks to valid allocation operations and identify the amount of unfreed storage at program termination. 127 Provide extensive runtime checks to valid allocation operations and identify the amount of unfreed storage at program termination. 135 128 136 129 \item
Note:
See TracChangeset
for help on using the changeset viewer.