libpuddles
Creators
Description
Artifact for Eurosys 2024
----
Puddles: Application-Independent Recovery and Location-Independent Data for Persistent Memory
Puddles is a new persistent memory programming abstraction that provides support for PM data that is easily mappable into a process address space, shareable across processes, shippable between machines, consistent after a crash, and accessible to legacy code with fast, efficient pointers as first-class abstractions.
Requirements
- Ubuntu 20.04 with no existing PMDK installation[^1]
- g++ and gcc version 10
- clang and clang++ version 10
- libboost-system-dev
- libarchive-dev
- cmake
- make
- Intel Optane DC-PMM mounted at
/mnt/pmem0/
- Root access
Evaluation
Using Docker Containers
The artifact can be run inside a docker container but needs access to host's /mnt/pmem0
and /dev/shm
.
# Build the docker image and the artifact
docker build -t libpuddles .
# Start the docker container
docker run --privileged -v /mnt/pmem0/:/mnt/pmem0 --ipc=host -it libpuddles:latest
# Run evaluation from inside the docker container
./setup-and-run.sh --skip-deps
Access to an Optane DC-PMM Docker Container
If needed, we can provide an empty docker container with access to Intel Optane DC-PMM. Please contact the authors for the login information. Instructions for running in an empty docker container are the same as evaluating the artifact on a bare metal machine (see next section).
Using a Bare Metal Machine
To set up dependencies and run the benchmark, execute the following script:
./setup-and-run.sh
NOTE: To skip dependency installation, the
setup-and-run.sh
script can be passed an optional--skip-deps
argument:./setup-and-run.sh --skip-deps # Run evaluation only
Although libpuddles is automatically compiled by this script, to manually compile it, checkout artifact-root/libpuddles/README.md
.
Major Claims
The artifact provided reproduces the following claims from the paper:
- Figure 9. Puddles’ performance against PMDK and Romulus for singly linked list.
- Figure 10. Performance of Puddles, PMDK, and Romulus’s implementation of an order 8 Btree.
- Figure 11. KV Store implementation using different PM programming libraries, evaluated using YCSB workloads.
Artifact Directory Structure
artifact
├── libpuddles
│ ├── src # Libpuddles src and Implementation
│ └── eval
│ ├── go # GoPMEM Implementation
│ ├── atlas # Atlas KVStore Implementation
│ └── romulus # Romulus's KVStore Implementation
├── libpuddles-scripts
│ └── run # Evaluation scripts
├── OneFile-romulus # Romulus LinkedList and Tree Implementations
│ └── ...
├── setup-and-run.sh # Main script
├── requirements.txt # Requirements file for python dependencies
├── plot-fig-10.py # Plot Figure 10, called from setup-and-run.sh
├── plot-fig-9.py # Plot Figure 9, called from setup-and-run.sh
└── plot-fig-11.py # Plot Figure 11, called from setup-and-run.sh
Notes on libpuddles-scripts/run/*.sh
Scripts
Each of these scripts automatically starts an instance of the puddle daemon (puddled
), cleans up any persistent files, and runs a specific workload.
These scripts, however, rely on certain environment variables:
LIBPUDDLES_PUDDLED_PORT
: Port to use for the puddled daemonLIBPUDDLES_DIR
: Directory with libpuddles' source (artifact-root/libpuddles
for this artifact)ROMULUS_DIR
: Directory with Romulus's source (artifact-root/OneFile-romulus
for this artifact)
Execution Flow (setup-and-run.sh
)
The setup-and-run.sh
script automatically runs the following steps:
- Setup the environment variables:
LIBPUDDLES_PUDDLED_PORT
LIBPUDDLES_DIR
ROMULUS_DIR
- Install all dependencies.
- Compile all sources.
- Enable userfaultfd:
echo 1 | sudo tee /proc/sys/vm/unprivileged_userfaultfd
- Run
libpuddles-scripts/run/linkedlist.sh
and write results tolibpuddles-scripts/data/linkedlist.csv
. - Plot Figure 9 using linkedlist data and write to
plots/ae/fig9.pdf
andplots/ae/fig9.pdf
- Run
libpuddles-scripts/run/btree.sh
and write results tolibpuddles-scripts/data/btree.csv
. - Plot Figure 10 using btree data and write to
plots/ae/fig10.pdf
andplots/ae/fig10.pdf
- Run
libpuddles-scripts/run/simplekv.sh
and write results tolibpuddles-scripts/data/simplekv.csv
. - Plot Figure 11 using simplekv data and write to
plots/ae/fig10.pdf
andplots/ae/fig11.pdf
[^1]: To uninstall existing PMDK installation, please remove the apt-get version (if installed) using sudo apt-get purge 'libpmem*'
and source compiled version cd pmdk-directory; sudo make uninstall
.
Files
Files
(552.0 MB)
Name | Size | Download all |
---|---|---|
md5:8146c9d75560f4c63883210ce220d29c
|
552.0 MB | Download |