Estimated prep. time | Estimated runtime |
---|---|
0h 2m | 0h 25m (manual) |
Libs/Apps | Patch size | Shared variables |
---|---|---|
lwip | +542/-275 | 23 |
uksched + ukschedcoop | +48/-8 | 5 |
ramfs + vfscore | +148/-37 | 12 |
uktime | +10/-9 | 0 |
redis | +279/-90 | 16 |
nginx | +470/-85 | 36 |
sqlite | +199/-145 | 24 |
iperf | +15/-14 | 4 |
Porting effort: size of the patch (including automatic gate replacements), number of shared variables.
These measurements are manual, but rather simple. For each repository or
subsystem, perform a git diff
with the last Unikraft commit, and count the
meaningful +/- lines. For the shared variables, grep for whitelist
and count
occurences.
Note that some libraries (mm, lwip, vfscore) include patches that are not part of FlexOS but not yet merged into the Unikraft master at the time when FlexOS was forked from Unikraft. We do not want to count these in the diff.
Here is a list of external, non-FlexOS patches applied:
- lwip: move
socket.c
to the glue code [link] - vfscore: CPIO support [link]
- mm: page table support [link]
Note that the iperf app was developed for this paper; you can use the
unikraft-baseline
branch as baseline for both the
application and the
library.
A similar situation affects sqlite; you can use this unmodified application as baseline.
In order to simply the operation, we provide a simple docker container that
clones all relevant repositories into /root/flexos
. You can build it with
make prepare
and bash it with make run
. The current directory is mounted in
/out
in order to ease the sharing of results with the host.