source: doc/theses/mubeen_zulfiqar_MMath/allocator.tex @ a953c2e3

ADTast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since a953c2e3 was a953c2e3, checked in by m3zulfiq <m3zulfiq@…>, 3 years ago

Added allocator design objectives

  • Property mode set to 100644
File size: 6.1 KB
Line 
1\chapter{Allocator}
2
3\noindent
4====================
5
6Writing Points:
7\begin{itemize}
8\item
9Objective of uHeapLmmm.
10\item
11Design philosophy.
12\item
13Background and previous design of uHeapLmmm.
14\item
15Distributed design of uHeapLmmm.
16
17----- SHOULD WE GIVE IMPLEMENTATION DETAILS HERE? -----
18
19\PAB{Maybe. There might be an Implementation chapter.}
20\item
21figure.
22\item
23Advantages of distributed design.
24\end{itemize}
25
26The new features added to uHeapLmmm (incl. @malloc_size@ routine)
27\CFA alloc interface with examples.
28\begin{itemize}
29\item
30Why did we need it?
31\item
32The added benefits.
33\end{itemize}
34
35
36%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% uHeapLmmm Design
39%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41
42\section{Objective of uHeapLmmm}
43UHeapLmmm is a lightweight memory allocator. The objective behind uHeapLmmm is to design a minimal concurrent memory allocator that has new features and also fulfills GNU C Library requirements (FIX ME: cite requirements).
44
45\subsection{Design philosophy}
46The objective of uHeapLmmm's new design was to fulfill following requirements:
47\begin{itemize}
48\item It should be concurrent to be used in multi-threaded programs.
49\item It should avoid global locks, on resources shared across all threads, as much as possible.
50\item It's performance (FIX ME: cite performance benchmarks) should be comparable to the commonly used allocators (FIX ME: cite common allocators).
51\item It should be a lightweight memory allocator.
52\end{itemize}
53
54%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55
56\section{Background and previous design of uHeapLmmm}
57uHeapLmmm was originally designed by X in X (FIX ME: add original author after confirming with Peter).
58(FIX ME: make and add figure of previous design with description)
59
60%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61
62\section{Distributed design of uHeapLmmm}
63uHeapLmmm's design was reviewed and changed to fulfill new requirements (FIX ME: cite allocator philosophy). For this purpose, following two designs of uHeapLmm were proposed:
64
65\paragraph{Design 1: Decentralized}
66Fixed number of heaps: shard the heap into N heaps each with a bump-area allocated from the @sbrk@ area.
67Kernel threads (KT) are assigned to the N heaps.
68When KTs $\le$ N, the heaps are uncontented.
69When KTs $>$ N, the heaps are contented.
70By adjusting N, this approach reduces storage at the cost of speed due to contention.
71In all cases, a thread acquires/releases a lock, contented or uncontented.
72\begin{cquote}
73\centering
74\input{AllocDS1}
75\end{cquote}
76Problems: need to know when a KT is created and destroyed to know when to assign/un-assign a heap to the KT.
77
78\paragraph{Design 2: Centralized}
79One heap, but lower bucket sizes are N-shared across KTs.
80This design leverages the fact that 95\% of allocation requests are less than 512 bytes and there are only 3--5 different request sizes.
81When KTs $\le$ N, the important bucket sizes are uncontented.
82When KTs $>$ N, the free buckets are contented.
83Therefore, threads are only contending for a small number of buckets, which are distributed among them to reduce contention.
84\begin{cquote}
85\centering
86\input{AllocDS2}
87\end{cquote}
88Problems: need to know when a kernel thread (KT) is created and destroyed to know when to assign a shared bucket-number.
89When no thread is assigned a bucket number, its free storage is unavailable. All KTs will be contended for one lock on sbrk for their initial allocations (before free-lists gets populated).
90
91Out of the two designs, Design 1 was chosen because it's concurrency is better across all bucket-sizes as design-2 shards a few buckets of selected sizes while design-1 shards all the buckets. Design-2 shards the whole heap which has all the buckets with the addition of sharding sbrk area.
92
93\subsection{Advantages of distributed design}
94The distributed design of uHeapLmmm is concurrent to work in multi-threaded applications.
95
96Some key benefits of the distributed design of uHeapLmmm are as follows:
97
98\begin{itemize}
99\item
100The bump allocation is concurrent as memory taken from sbrk is sharded across all heaps as bump allocation reserve. The lock on bump allocation (on memory taken from sbrk) will only be contended if KTs > N. The contention on sbrk area is less likely as it will only happen in the case if heaps assigned to two KTs get short of bump allocation reserve simultanously.
101\item
102N heaps are created at the start of the program and destroyed at the end of program. When a KT is created, we only assign it to one of the heaps. When a KT is destroyed, we only dissociate it from the assigned heap but we do not destroy that heap. That heap will go back to our pool-of-heaps, ready to be used by some new KT. And if that heap was shared among multiple KTs (like the case of KTs > N) then, on deletion of one KT, that heap will be still in-use of the other KTs. This will prevent creation and deletion of heaps during run-time as heaps are re-usable which helps in keeping low-memory footprint.
103\item
104It is possible to use sharing and stealing techniques to share/find unused storage, when a free list is unused or empty.
105\item
106Distributed design avoids unnecassry locks on resources shared across all KTs.
107\end{itemize}
108
109FIX ME: Cite performance comparison of the two heap designs if required
110
111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
112
113\section{Added Features}
114
115
116\subsection{Methods}
117Why did we need it?
118The added benefits.
119
120
121\subsection{Alloc Interface}
122Why did we need it?
123The added benefits.
Note: See TracBrowser for help on using the repository browser.