diff --git a/report/fiche_synthese.tex b/report/fiche_synthese.tex index b8fff10..b11ff43 100644 --- a/report/fiche_synthese.tex +++ b/report/fiche_synthese.tex @@ -4,6 +4,8 @@ %% Attention: pas plus d'un recto-verso! % Ne conservez pas les questions +\section*{Internship synthesis} + \subsection*{The general context} The standard debugging data format for ELF binary files, DWARF, contains a lot @@ -26,7 +28,7 @@ needs to perform a whole lot of stack unwindings. Even worse, exception handling relies on stack unwinding in order to find a suitable catch-block! The most widely used library used for stack unwinding, -\texttt{libunwind}~\cite{libunwind}, essentially makes use of aggressive but +\prog{libunwind}~\cite{libunwind}, essentially makes use of aggressive but fine-tuned caching and optimized code to mitigate this problem. \subsection*{The research problem} @@ -62,17 +64,17 @@ frame), and having a lot of samples is quite complex, since one must avoid unwinding the same frame over and over again, which would only benchmark the caching mechanism. The other problem is to distribute evenly the unwinding measures across the various program positions, including directly into the -loaded libraries (\eg{} the \texttt{libc}). +loaded libraries (\eg{} the \prog{libc}). -The solution eventually chosen was to modify \texttt{perf}, the standard +The solution eventually chosen was to modify \prog{perf}, the standard profiling program for Linux, in order to gather statistics and benchmarks of -its unwindings, and produce an alternative version of \texttt{libunwind} using -the compiled debugging data, in order to interface it with \texttt{perf}, -allowing to benchmark \texttt{perf} with both the standard stack unwinding data +its unwindings, and produce an alternative version of \prog{libunwind} using +the compiled debugging data, in order to interface it with \prog{perf}, +allowing to benchmark \prog{perf} with both the standard stack unwinding data and the alternative experimental compiled format. As a free and enjoyable side-effect, the experimental unwinding data is perfectly interfaced with -\texttt{libunwind}, and thus interfaceable at practically no cost with any -existing project using the common library \texttt{libunwind}. +\prog{libunwind}, and thus interfaceable at practically no cost with any +existing project using the common library \prog{libunwind}. % What is your solution to the question described in the last paragraph? % @@ -94,13 +96,13 @@ in this report), the compiled version is up to 25 times faster than the DWARF version, while it remains only around 2.5 times bigger than the original data. Even though the implementation is more a research prototype than a release -version, is still reasonably robust, compared to \texttt{libunwind}, which is +version, is still reasonably robust, compared to \prog{libunwind}, which is built for robustness. Corner cases are frequent while analyzing stack data, and even more when analyzing them through a profiler; yet the prototype fails only -on around 200 cases more than libunwind on a 27000 samples test (1099 failures, -against 885 for libunwind). +on around 200 cases more than \prog{libunwind} on a 27000 samples test (1099 +failures, against 885 for \prog{libunwind}). -The prototype, unlike libunwind, does not support $100\,\%$ of the DWARF +The prototype, unlike \prog{libunwind}, does not support $100\,\%$ of the DWARF instruction present in the DWARF5 standard~\cite{dwarf5std}. It is also limited to the x86\_64 architecture, and relies to some extent on the Linux operating system. But none of those limitations are real problems in practice. As argued @@ -119,7 +121,7 @@ programs, particularly if one wants to profile many times in order to analyze the impact of multiple changes. It can also be useful for exception-heavy programs~\qtodo{cite Stephen's software?}. Thus, it might be interesting to implement a more stable version, and try to interface it cleanly with -mainstream tools, such as \texttt{perf}. +mainstream tools, such as \prog{perf}. It might also be interesting to investigate whether it is possible to reach even greater speeds by using some more complex compilation process that would @@ -136,3 +138,4 @@ used to shrink the compiled unwinding data. % What is the good \emph{next} question? \pagestyle{plain} +\newpage diff --git a/report/report.tex b/report/report.tex index e6c9176..330eb9e 100644 --- a/report/report.tex +++ b/report/report.tex @@ -2,9 +2,9 @@ \author{Théophile Bastian\\ Under supervision of Francesco Zappa-Nardelli\\ -{\textsc{parkas}, École Normale Supérieure de Paris}} +{\textsc{parkas}, \'Ecole Normale Supérieure de Paris}} -\date{August 20, 2018} +\date{March -- August 2018\\August 20, 2018} \documentclass[11pt]{article} @@ -26,10 +26,123 @@ Under supervision of Francesco Zappa-Nardelli\\ \addbibresource{../shared/report.bib} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} + +%% Main title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \maketitle +%% Fiche de synthèse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \input{fiche_synthese} +%% Abstract %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{abstract} + \todo{Is there a need for an abstract, given the presence above of the + ``fiche de synthèse''?} +\end{abstract} + +%% Table of contents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\tableofcontents + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Main text content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Stack unwinding data presentation} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Stack frames and unwinding} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{DWARF format} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{DWARF functioning} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{How big are FDEs?} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Unwinding usage and frequency} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Unwinding state-of-the-art} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{General statistics} +\todo{} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Stack unwinding data compilation} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Compilation: \ehelfs} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{First results} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Space optimization} +\todo{} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Benchmarking} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Requirements} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Presentation of \prog{perf}} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Benchmarking with \prog{perf}} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Other explored methods} +\todo{} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Results} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Measured time performance} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Measured compactness} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Instructions coverage} +\todo{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% End main text content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Bibliography %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \printbibliography{} + \end{document} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/shared/specific.sty b/shared/specific.sty index a89da8f..5b1709d 100644 --- a/shared/specific.sty +++ b/shared/specific.sty @@ -1,5 +1,9 @@ %% Specific commands for this project +\newcommand{\prog}[1]{\texttt{#1}} +\newcommand{\ehelf}{\texttt{eh\_elf}} +\newcommand{\ehelfs}{\texttt{eh\_elfs}} + %% DWARF semantics \newcommand{\dwcfa}[1]{\texttt{DW\_CFA\_#1}} \newcommand{\reg}[1]{\%#1} @@ -27,5 +31,3 @@ \newcommand{\extrarrow}[1]{\xrightarrow{\text{#1}}} \newcommand{\contsem}[1]{\semI{d}{s}\left(#1\right)} - -\newcommand{\ehelf}{\texttt{EH\_ELF}}