Add general sections
This commit is contained in:
parent
4d0db5caad
commit
5d716351da
3 changed files with 135 additions and 17 deletions
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
|
|
@ -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}}
|
||||
|
|
Loading…
Reference in a new issue