Camil Demetrescu  over 8 years ago

Commit id: ca81fa29e76d3bf9a6f7429db98d111eb96b08c5

deletions | additions      

       

\usepackage{balance}  %%%%%%%%  \iffalse  \usepackage[firstpage]{draftwatermark}  \SetWatermarkText{\textsc{Confidential}}  \SetWatermarkScale{1.2}  \SetWatermarkColor[gray]{0.9}  \SetWatermarkFontSize{2cm}  \SetWatermarkAngle{45}  \fi  %%%%%%%%  \newcommand{\noauthorea}{}         

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  \appendix  \section{Artifact description} Description}  %Submission and reviewing guidelines and methodology: \\  %{\em http://cTuning.org/ae/submission-20151015.html} 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  \subsection{Abstract}  \osrkit\ is a library that enables On-Stack Replacement (OSR) at arbitrary places in LLVM IR code. The artifact supports exploring how \osrkit\ can instrument IR code to support OSR transitions in the LLVM MCJIT runtime environment. A running example is presented based on the \texttt{isord} case study discussed in Section 3. We also support repeating experiments Q1, Q2, and Q3 presented in Section 5. The artifact includes an interactive shell VM  called \texttt{tinyvm} \tinyvm\  for loading, inspecting, instrumenting, and executing IR code. It is distributed as a preconfigured Oracle VirtualBox VM. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%{\em Fill in whatever is applicable with some informal keywords and remove the rest}  {\small  \begin{itemize} \begin{itemize}[parsep=0pt]  %\item {\bf Algorithm: }  \item {\bf Program: } {\tt shootout} C benchmarks (included, Sep 2015). %and a number of MATLAB benchmarks (included)  \item {\bf Compilation: } LLVM 3.6.2 (release build). 

\end{itemize}  }  \subsubsection{How delivered} Delivered}  The artifact ships as an Oracle VirtualBox 5 Appliance.  The latest version of the code is available at \url{https://github.com/dcdelia/tinyvm}.  \subsubsection{Hardware dependencies} Dependencies}  The artifact requires an An  x86-64 platform. platform is required.  \subsubsection{Software dependencies} Dependencies}  The artifact was tested in Oracle VirtualBox 5.0.10.  

To install the artifact, just import the appliance in Oracle VirtualBox.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  \subsection{Experiment workflow} Workflow}  We propose two usage sessions. In the first session, we show how to generate and instrument an LLVM IR code based on the \texttt{isord} example presented in Section 3 of the paper. \mysection\ref{se:osr-llvm}.  The second session focuses on how to run the scripts used to generate the performance tables of Section 5 \mysection\ref{se:experiments}  related to questions Q1, Q2, and Q3. Question Q4 is based on additional third-party software (the MATLAB McVM runtime) and is not addressed in the artifact. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  \subsection{Evaluation and expected result} Expected Result}  The main component of the artifact is the interactive shell {\tt tinyvm} VM \tinyvm\  built on top of the LLVM MCJIT runtime environment and the \osrkit\ library. The shell VM  supports loading, inspecting, instrumenting, interactive invocation of LLVM IR functions either generated at run-time or loaded from disk. The main design goal behind \tinyvm\ is the creation of an interactive environment for IR manipulation and JIT-compilation of functions: for instance, it allows the user to insert OSR points in loaded functions, run optimization passes on them, display their CFGs, and repeatedly invoke a function for a specified amount of times. \tinyvm\ supports dynamic library loading and linking,  and executing includes a helper component for MCJIT that simplifies tasks such as handling multiple  IR code. modules, symbol resolution in presence of multiple versions of a function, and tracking native code and other machine-level generated objects such as Stackmaps.  \subsubsection{Session 1: OSR instrumentation in \osrkit}  \subsubsection{Session 2: Performance Figures}  The experiments can be repeated by executingthe  scripts on a selection of the \shootout\ benchmarks~\cite{shootout}. Each benchmark was compiled  in {\tt tinyvm/shootout/scripts}. clang} with both {\tt -O0} and {\tt -O1}. For each benchmark {\tt X}, the directory {\tt tinyvm/shootout/X/} contains:  \begin{itemize}[parsep=0pt]  \item {\tt C}: C code  \item {\tt bench.ll}: baseline IR code ({\tt -O0})  \item {\tt bench-O1.ll}: baseline IR code ({\tt -O1})  \end{itemize}  \noindent Each experiment runs 10 identical trials. We manually collected the figures from the console output and analyzed them, computing confidence intervals, etc.   \paragraph{Baseline.} The first step consists in generating figures for the baseline version of each benchmark.  \paragraph{Question Q1.} The purpose of the experiment is assessing the impact on code quality due to the presence of OSR points in the code by measuring how . points.  %[Q2] What is the run-time overhead of an OSR transition, for instance to a clone of the running function?  %[Q3] What is the overhead of \osrkit\ for inserting OSR points and creating a stub or a continuation function?         

%\fi  \paragraph{Live Version of this Paper.}  We complement the traditional scholarly article publication model by maintaining a live version of this paper at \url{https://www.authorea.com/users/55853/articles/66046}. {\small\url{https://www.authorea.com/users/55853/articles/66046}} and {\small\url{https://github.com/camild/article-llvm-osr}}.  The live version incorporates continuous feedback by the community, providing post-publication fixes, improvements, and extensions.