diff options
| author | Manuel Traut <manut@linutronix.de> | 2010-10-17 19:08:49 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@linutronix.de> | 2010-10-17 19:08:49 +0200 |
| commit | dfa18101f1836fa73518971020cede43de539f7d (patch) | |
| tree | 60b9281b4603afce918f12adfbdd67e39cfe3833 /linux-basics | |
| parent | 58d2d02a1382d3b385584d543e6f8129920f8c25 (diff) | |
mv mm-basics to kernel-devel
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'linux-basics')
4 files changed, 0 insertions, 304 deletions
diff --git a/linux-basics/linux-mm-basics/Makefile b/linux-basics/linux-mm-basics/Makefile deleted file mode 100644 index 4663d52..0000000 --- a/linux-basics/linux-mm-basics/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -all: - for pdf in `ls -1 *.tex` ; do \ - pdflatex $$pdf; \ - pdflatex $$pdf; \ - done - -clean: - rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out - diff --git a/linux-basics/linux-mm-basics/handout_linux-mm-basics_en.tex b/linux-basics/linux-mm-basics/handout_linux-mm-basics_en.tex deleted file mode 100644 index 4c391b2..0000000 --- a/linux-basics/linux-mm-basics/handout_linux-mm-basics_en.tex +++ /dev/null @@ -1,17 +0,0 @@ -\documentclass{article} -\usepackage{german} -\usepackage[utf8]{inputenc} - -\begin{document} - -\section*{Titel} - -\subsection*{Abschnitt1} - -Text - -\subsection*{Abschnitt2} - -Text - -\end{document} diff --git a/linux-basics/linux-mm-basics/hints_linux-mm-basics_en.tex b/linux-basics/linux-mm-basics/hints_linux-mm-basics_en.tex deleted file mode 100644 index b2b8a2b..0000000 --- a/linux-basics/linux-mm-basics/hints_linux-mm-basics_en.tex +++ /dev/null @@ -1,25 +0,0 @@ -\documentclass{article} -\usepackage{german} -\usepackage[utf8]{inputenc} - -\begin{document} - -\section*{Block \lq Linux-Prozesse\rq} - -\subsection*{Lernziele} -\begin{itemize} -\item Begriffe Prozess und Thread -\item Bedeutung von User-/Group-IDs, Executable-Flag -\item Verstehen, wie Prozesse unter Linux erzeugt werden -\item Kennenlernen der wichtigsten Tools -\end{itemize} - -\subsection*{Unterrichts-Ablauf} - -Hinweise zur Präsentation, Zeitplanung, etc. - -\subsection*{Ăœbungen bei vorhandener Hardware} - -Tools ps, top, kill - -\end{document} diff --git a/linux-basics/linux-mm-basics/pres_linux-mm-basics_en.tex b/linux-basics/linux-mm-basics/pres_linux-mm-basics_en.tex deleted file mode 100644 index 8ff0da7..0000000 --- a/linux-basics/linux-mm-basics/pres_linux-mm-basics_en.tex +++ /dev/null @@ -1,253 +0,0 @@ -\documentclass{beamer} -\usetheme{linutronix} -\usepackage{german} -\usepackage[utf8]{inputenc} -\usepackage{pgf} -\usepackage{graphicx} - -\title{Linux Memory Management basics} -\institute{Linutronix GmbH} - -\begin{document} - -\maketitle -\begin{frame} -\frametitle{Overview} -\tableofcontents -\end{frame} - -\section{Basics} -\subsection{Overview} -\begin{frame} -\frametitle{Overview} -\begin{itemize} -\item over-committing -\item Copy-On-Write -\item Page relocation -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{over-committing} -\begin{itemize} -\item Comparable to those low-cost airlines ;) -\pause -\item ...selling more tickets than available seats -\pause -\item ...hoping not everyone will come ;) -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{over-commit settings} -\begin{verbatim} -/proc/sys/vm/overcommit_memory -\end{verbatim} -Possible settings are: -\begin{itemize} -\item 0: Heuristic overcommit handling (default) -\item 1: Always overcommit -\item 2: Don't overcommit -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{The OOM Killer} -...is invoked if you ask for more memory than available.\\ -\pause -\textbf{Result}: The kernel kills a task -\end{frame} - -\begin{frame} -\frametitle{Copy-On-Write} -\begin{itemize} -\item completely transparently for userspace -\item you don't need the same data twice -\item only updated if one virtual memory area is updated -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Page relocation} -\begin{itemize} -\item AKA paging or swapping -\item Linux can move a page to / from swap -\item also completely transparently for userspace -\end{itemize} -\end{frame} - -\subsection{The stack} -\begin{frame} -\frametitle{The stack} -\begin{itemize} -\item Grows top - down -\item Configurable stack size -\item Stack grows on demand. Access beyond current size ends up in a -''Stackfault'' which is handled by the kernel -\item ulimit -a shows the current maximum stack size -\item ulimit -s \emph{size} sets the maximum stack size -\item Default maximum stack size is 8MiB -\end{itemize} -\end{frame} - -\subsection{The heap} - -\begin{frame} -\frametitle{The heap: Userland handling} -\begin{itemize} -\item Memory is allocated using malloc() -\item Memory is freed using free() -\item malloc() uses the mmap() and the sbrk() system calls -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{The heap: Userland handling} -\begin{itemize} -\item For small junks, malloc() allocates memory from the heap and adjusts the -size using sbrk() -\item For larger blocks (larger than defined in MMAP\_THRESHOLD) the memory is -allocated as private, anonymous mapping -\item MMAP\_THRESHOLD is 128kb by default -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{malloc()} -\begin{itemize} -\item Keep over-commit in mind! -\item If over-commit is enabled: A non-null return value from malloc() doesn't -guarantee that the memory really is available. -\end{itemize} -\end{frame} - -\section{Do's and Dont's} -\subsection{The heap} -% fragmentation -% check return value -% ulimit (limit memory consumption) -\begin{frame} -\frametitle{Return value} -Always check malloc's return value!! -\end{frame} - -\begin{frame} -\frametitle{How to avoid heap fragmentation} -\begin{itemize} -\item GLIBCs malloc() itself tries to avoid fragmentation -\item The allocator can't avoid fragmentation caused by a bad application -design! -\item Try to re-use memory pools -\item free memory you don't need anymore! -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{How to limit memory consumption} -ulimit: -\begin{itemize} -\item ulimit -d sets a limit for the data segment -\item ulimit -v sets a limit for the virtual memory -\item Check limits with ulimit -a -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{ulimit example} -\scriptsize -\begin{verbatim} -$ ulimit -a -core file size (blocks, -c) 0 -data seg size (kbytes, -d) unlimited -scheduling priority (-e) 20 -file size (blocks, -f) unlimited -pending signals (-i) 16382 -max locked memory (kbytes, -l) 64 -max memory size (kbytes, -m) unlimited -open files (-n) 1024 -pipe size (512 bytes, -p) 8 -POSIX message queues (bytes, -q) 819200 -real-time priority (-r) 0 -stack size (kbytes, -s) 8192 -cpu time (seconds, -t) unlimited -max user processes (-u) unlimited -virtual memory (kbytes, -v) unlimited -file locks (-x) unlimited -\end{verbatim} -\end{frame} - -\section{Realtime} -\subsection{General} -\begin{frame}[fragile] -\frametitle{Locking the memory} -\begin{verbatim} -/* Lock memory */ -if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) { - perror("mlockall failed"); - exit(-2); -} -\end{verbatim} -\end{frame} -\subsection{Stack} -\begin{frame}[fragile] -\frametitle{Stack prefaulting} -\begin{verbatim} -#define MAX_SAFE_STACK (8*1024) - -void stack_prefault(void) { - unsigned char dummy[MAX_SAFE_STACK]; - - memset(&dummy, 0, MAX_SAFE_STACK); - return; -} -\end{verbatim} -\end{frame} - -\subsection{Heap} -\begin{frame} -\frametitle{Allocations from Realtime context} -\begin{itemize} -\item If possible, avoid memory allocations from Realtime context -\item Try to use a pre-allocated buffer -\end{itemize} -\end{frame} - - -\begin{frame}[fragile] -\frametitle{Disable malloc trimming and mmap usage} -\begin{verbatim} -mallopt(M_TRIM_THRESHOLD, -1); -mallopt(M_MMAP_MAX, 0); -\end{verbatim} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Reserve process memory} -\begin{verbatim} -static void reserve_process_memory(int size) -{ - int i; - char *buffer; - - buffer = malloc(size); - - /* Touch each page in this piece of - * memory to get it mapped into RAM */ - for (i = 0; i < size; i += sysconf(_SC_PAGESIZE)) - buffer[i] = 0; - - free(buffer); -} -\end{verbatim} -\end{frame} - -\section*{sources} -\begin{frame} -\frametitle{sources} -\begin{thebibliography}{1} -\bibitem{mmm} http://cftw.wordpress.com/2009/11/02/introduction-to-the-linux-memory-management/ -\bibitem{mmm} http://rt.wiki.kernel.org/ -\end{thebibliography} -\end{frame} - -\end{document} |
