Libunwind, formalisation, perf
This commit is contained in:
parent
0adff1d484
commit
9961ced06f
1 changed files with 40 additions and 41 deletions
|
@ -241,24 +241,6 @@ $1 = 84
|
|||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Compilation Strategy}
|
||||
|
||||
\begin{frame}{Interface: libunwind}
|
||||
\begin{itemize}
|
||||
\item \alert{libunwind}: \textit{de facto} standard library for
|
||||
unwinding
|
||||
\item Uses DWARF in background
|
||||
|
||||
\item \texttt{libunwind-eh\_elf}: alternative implementation using
|
||||
\ehelfs{}
|
||||
|
||||
\item{} Result: \alert{alternative implementation} of libunwind, nearly
|
||||
plug-and-play for existing projects!
|
||||
\begin{itemize}
|
||||
\item[$\leadsto$] It is \alert{easy} to use \ehelfs{}: just
|
||||
link against the right library!
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Compilation overview}
|
||||
\begin{itemize}
|
||||
\item Compiled to \alert{C code}
|
||||
|
@ -296,6 +278,24 @@ $1 = 84
|
|||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Interface: libunwind}
|
||||
\begin{itemize}
|
||||
\item \alert{libunwind}: \textit{de facto} standard library for
|
||||
unwinding
|
||||
\item Uses DWARF in background
|
||||
|
||||
\item \texttt{libunwind-eh\_elf}: alternative implementation using
|
||||
\ehelfs{}
|
||||
|
||||
\item{} Result: \alert{alternative implementation} of libunwind, nearly
|
||||
plug-and-play for existing projects!
|
||||
\begin{itemize}
|
||||
\item[$\leadsto$] It is \alert{easy} to use \ehelfs{}: just
|
||||
link against the right library!
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Outlining}
|
||||
|
@ -335,6 +335,19 @@ $1 = 84
|
|||
\lstinputlisting[language=C]{src/fib7/fib7.eh_elf_outline.c}
|
||||
\end{frame}
|
||||
|
||||
\subsection{A word on formalization}
|
||||
|
||||
\begin{frame}{A word on formalization}
|
||||
\begin{itemize}
|
||||
\item First task: \alert{writing semantics} for DWARF, written as
|
||||
mapping to C code.
|
||||
\item DWARF5 specification: \alert{plain English}, no proper semantics
|
||||
\item Compiled code is in substance equivalent to semantics
|
||||
\item What remains to prove is mostly \alert{simple or classic
|
||||
optimisations}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Benchmarking}
|
||||
|
||||
|
@ -358,34 +371,20 @@ $1 = 84
|
|||
\end{frame}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Unwinding using perf}
|
||||
|
||||
\begin{frame}{Presentation of perf}
|
||||
\textbf{A profiler is used to\ldots}
|
||||
\begin{itemize}
|
||||
\item get readings of the \alert{time spent in each function}
|
||||
\item detect ``hot paths'': functions you ought to optimize
|
||||
\item \ldots{}and \alert{benchmark \ehelfs{}}!
|
||||
\end{itemize}
|
||||
|
||||
\vspace{1em}\pause{}
|
||||
\textbf{How does it work?}
|
||||
\begin{itemize}
|
||||
\item{} \alert{Polling profiler}: stops at regular intervals to perform
|
||||
analyses
|
||||
\item{} Upon polling, \alert{dumps the stack} to a file
|
||||
\item{} In the analysis phase (after the program terminated),
|
||||
\alert{unwinds all the stacks gathered} to get call paths
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{perf instrumentation}
|
||||
\textbf{\alert{perf} is a polling profiler.}
|
||||
\begin{itemize}
|
||||
\item{} used to get readings of the time spent in each function
|
||||
\item{} works by regularly stopping the program, unwinding its stack,
|
||||
then aggregating the gathered data
|
||||
\end{itemize}
|
||||
|
||||
\pause{}\bigskip{}
|
||||
\textbf{Instrumenting perf matches all the requirements!}
|
||||
\vspace{1em}\pause{}
|
||||
|
||||
\begin{itemize}
|
||||
\item{} \alert{Plug \ehelfs{} into perf}: use \ehelfs{} instead of
|
||||
DWARF to analyze stack dumps
|
||||
DWARF to unwind the stack
|
||||
\item{} Implement \alert{unwinding performance counters} inside perf
|
||||
\bigskip{}
|
||||
|
||||
|
|
Loading…
Reference in a new issue