This repository contains the experiments for Table 2 (ABI compatibility). Since these experiments have a heavy size, we decided to host the zip archive which contains the setup on another server. If the server is down you can download it from the backup server.
APPROXIMATIVE EXECUTION TIME=2h
NOTE THAT THIS EXPERIMENT REQUIRES SOME DISK SPACE (+/-2GB in the /tmp folder)
You can automatically run all the experiment by running the make all
command. This command will:
- Prepare the environment by executing the
./setup.sh
script. Note that this script takes a long time... - Run the ABI compatibility experiment by running the
./run_all.sh
script and then the./merge.sh
script. CSV table will be saved into the current repository asmerged.csv
. - Generate the table as a figure by running the
plot.py
script.
You can also test manually by executing the following procedure.
In order to setup the environment for these experiments, please
execute first the ./setup.sh
script. This script will setup all the
environment to test the ABI compatibility. Once the setup is done, you
have three possibilities. Note that the setup takes time since each
application must be compiled with Unikraft.
After this setup go to /tmp/abi
for the remaining procedures.
To test with musl
, enter the following commands from the experiment
folder:
cp script_abi/script_run.sh abi/apps_musl_compat/
cd abi/apps_musl_compat/
./script_run.sh musl-compat
cp script_abi/script_check.sh abi/apps_musl_std/
cd abi/apps_musl_std/
./script_check.sh musl-std
The first part will compute the size of all unikernels when the compatibility layer is enabled. The second part will display a checkmark (V) or a fail (V) when the compatibility is disabled. A checkmark means that the application has been successfully built. Otherwise, it will display a fail.
Info of all entries will be computed automatically by the script and
will be printed on stdout. In addition, there are also saved into
CSV files respectively called musl-compat.csv
(in the folder
apps_musl_compat/
) and musl-std.csv
(in the folder
apps_musl_std/
).
To test with newlib
, enter the following commands from the experiment
folder:
cp script_abi/script_run.sh abi/apps_newlib_compat/
cd abi/apps_newlib_compat/
./script_run.sh newlib-compat
cp script_abi/script_check.sh abi/apps_newlib_std/
cd abi/apps_newlib_std/
./script_check.sh newlib-std
The first part will compute the size of all unikernels when the compatibility layer is enabled. The second part will display a checkmark (V) or a fail (X) when the compatibility is disabled. A checkmark means that the application has been successfully built. Otherwise, it will display a fail.
Info of all entries will be computed automatically by the script and
will be printed on stdout. In addition, there are also saved into
CSV files respectively called newlib-compat.csv
(in the folder
apps_newlib_compat/
) and newlib-std.csv
(in the folder
apps_newlib_std/
).
To get the #LoC which is displayed on Table 2, enter the following commands from the experiment folder:
cp script_abi/script_cloc.sh abi/apps_loc/
cd abi/apps_loc/
./script_cloc.sh
Output will be displayed on stdout and saved into a CSV file
cloc.csv
and located at apps_loc/
.
Once all the results are generated, run the ./merge.sh
script to
generate the table 2 as a CSV file. This one will be generated in the
results
folder with the following name: merged.csv
. If you also want
to generate the table as a figure, please run the plot.py
script.
The archive contains different folders:
apps_loc
: this folder contains the Unikraft application sources as well as the experiments to count the number of lines of glue code which is necessary to port an application (from its sources) to Unikraft. We use the cloc tool to count the number of lines.apps_musl_compat
: this folder contains applications which use musl as libc as well as the compat. layer which is calledlib-compat
.apps_musl_std
: this folder contains applications which use musl as libc. The compat. layer is not used in that case.apps_newlib_compat
: this folder contains application which uses newlib as libc as well as the compat. layer which is calledlib-compat
.apps_newlib_std
: this folder contains applications which use newlib as libc. The compat. layer is not used in that case.libs
: this folder contains Unikraft microlibs and more especially all the microlibs which contains the objects built from their native build system. These ones are prefixed with thelib-objects-
keyword. Within eachlib-object
folder, there is aobjs
folder which contains the object files of the application (built with their native build system using gcc and glibc). In addition, source files are also included.unikraft
: this folder contains the main unikraft code.