Attention une mise à jour du service Gitlab va être effectuée le mardi 18 janvier (et non lundi 17 comme annoncé précédemment) entre 18h00 et 18h30. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes.

Commit aa4af56a authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

article: Write about getting and building the code.

* article/guix.scm <top level>: Include ../guix.scm.
(article.pdf): Add symlink to BENCHMARK-CHARTS.
* article/content.tex (Getting the Source Code)
(Building the Source Code): Fill in.
(Running the Benchmarks): Include charts.
* article/bibliography.bib: Augment.
parent 16de4d9a
......@@ -8,5 +8,17 @@
address = {Coimbra, Portugal},
pages = {129--138},
publisher = {{IEEE CS Press}},
url = http://www.laas.fr/mosaic/,
url = {http://www.laas.fr/mosaic/},
}
@misc{courtes20:libchop,
author = {Courtès, Ludovic},
url = {https://nongnu.org/libchop},
year = 2020
}
@misc{lord06:gnu-arch,
author = {Lord, Tom},
url = {https://www.gnu.org/software/gnu-arch/},
year = 2020
}
......@@ -6,10 +6,108 @@ Mobile Devices}\supercite{courtes06:storage}, an article published in
capture the complete dependency graph of this article and the software
and data it refers to, making it fully reproducible.
\subsubsection{Getting the Source Code}
\section{Getting the Source Code}
\subsubsection{Building the Source Code}
The first author's younger self, a PhD student, would follow good
practices: the libchop library\supercite{courtes20:libchop} benchmarked
in the article and the article itself were under version control.
However, those repositories had never been published, which is
not-so-good practice. Thus, the first task in replicating this analysis
was to find the initial repositories.
\subsubsection{Running the Benchmarks}
Luckily, the repositories were found on a dusty hard disk drive.
However, they were repositories for the GNU~Arch version control system,
also known as \texttt{tla}\supercite{lord06:gnu-arch}---one of the first
free software distributed version control systems, which saw its last
release in 2006, around the time Git started to get momentum.
\subsubsection{Reproducing this Article}
Having deployed \texttt{tla}, the author was able to convert the
following repositories, thanks to the \texttt{git archimport} command,
still distributed with Git:
\begin{itemize}
\item \url{https://gitlab.inria.fr/lcourtes-phd/edcc-2006} contains the
source code of the paper itself. It turned out to not be useful for
this replication.
\item \url{https://gitlab.inria.fr/lcourtes-phd/chop-eval} contains the
scripts used to run the benchmarks that led to Figure~5 of the
paper\supercite{courtes06:storage}.
\end{itemize}
The code of libchop itself was published as free software in 2007 and
continued to evolved in the following
years\supercite{courtes20:libchop}. As of these writings, there have
been no changes its source code since 2016.
\section{Building the Source Code}
Libchop is written in C and accessible from Scheme thanks to bindings
for GNU~Guile, an implementation of the Scheme programming language.
The benchmarking scripts mentioned above rely on those Scheme bindings.
\subsection{Dependencies}
In addition to Guile, it has a number of dependencies, among which:
\begin{itemize}
\item the GNU~DBM key/value database (\textit{gdbm});
\item the GNU~Libgcrypt cryptography library;
\item the zlib, bzip2, and lzo compression libraries;
\item support for ONC~Remote Procedure Calls (RPC), formerly provided as
part of the GNU~C Library (\textit{glibc}), but nowadays available
separately as part of TI-RPC;
\item G-Wrap, a now defunct binding generator for Guile.
\end{itemize}
Additionally, libchop uses the GNU ``Autotools'' as its build system:
Autoconf, Automake, and Libtool.
\subsection{Choosing a Revision}
Should we run the latest revision of libchop, dated 2016, or should we
rather run the 2006 revision that was used at the time the paper was
written? The latest \texttt{libchop} revision is available as a
GNU~Guix package. Unfortunately, the benchmarking scripts mentioned
above are stuck in 2006--2007, so to speak: they require libchop
programming interface that changed after that time, and they also
require interfaces specific to Guile~1.8, the version that was current
at the time (the latest version of Guile today is 3.0.2; it has
seen \textit{three} major versions since 2006).
The author set out to use libchop, Guile, and G-Wrap from 2006, but
reusing as much as possible of today's software packages apart from
these. The good thing with the Autotools is that a user building from a
source tarball does not need to install the Autotools. However, no
release of libchop had been published as a source tarball back then, and
building from a version-control checkout \emph{does} require the
Autotools. The author quickly found out that building the 2006 libchop
would \emph{also} require building versions of Autoconf, Automake, and
Libtool that were current back then since today's versions are
incompatible. Fortunately, the ``downgrade cascade'' stops here.
The Guix-Past channel for GNU~Guix was developed to provide
reproducible, unambiguous definitions for all these software
packages: \url{https://gitlab.inria.fr/guix-hpc/guix-past}. It provides
a 2006 revision of libchop, along with 2006 versions of the
aforementioned software. This channel can be used with today's Guix,
bringing software from the past to the present. The libchop revision
was chosen as dating to right before the submission of the paper for
the European Dependable Computing Conference (EDCC), where it was
eventually presented.
\section{Running the Benchmarks}
\begin{figure}[ht!]
\label{fig:throughput}
\caption{Throughput}
\includegraphics[width=.7\paperwidth]{charts/throughput.pdf}
\end{figure}
\begin{figure}[ht!]
\label{fig:size}
\caption{Size}
\includegraphics[width=.7\paperwidth]{charts/size.pdf}
\end{figure}
\section{Reproducing this Article}
......@@ -80,6 +80,9 @@
(string-suffix? ".bib" file)
(string-suffix? ".cls" file)))))
;; Include the top-level file, which provides charts.
(include "../guix.scm")
(define article.pdf
;; Building the PDF. Adapted from the ReScience template makefile.
(let ()
......@@ -102,6 +105,9 @@
(string-join '(#$texlive #$biber)
"/bin:" 'suffix))
;; Provide the charts (PDF files) in the chart/ sub-directory.
(symlink #$benchmark-charts "charts")
(invoke "latexmk" "-pdf"
"-pdflatex=xelatex -interaction=nonstopmode"
"-use-make" "article.tex")
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment