Shoal is a library that provides an array memory abstraction that
automatically employs replication, partitioning and distribution
according to memory access patterns given in shl__malloc_array
.
Shoal also uses hardware extensions such as DMA engines (Barrelfish) and large/hugepage support if present on the machine.
Currently, we provide two types of workloads:
- Streamcluster from the PARSEC benchmark suite, which we manually modified to use Shoal (see below)
- pagerank, triangle-count, hop-dist from the Green Marl graph language; here, we provide extensions to the Green Marl compiler to automatically extract memory access patterns from high-level languages and generate a low-level C representation of the Green Marl input program that uses Shoal's memory abstraction (available on github)
This is work presented at Usenix ATC'15.
The rest of this document describes how to install dependencies and how to acquire Shoal.
Currently, we support Ubuntu and the Barrelfish OS to run Shoal.
- On Ubuntu, install the following dependencies to compile Shoal:
apt-get install libpapi-dev liblua5.2-dev libpfm4-dev libnuma-dev
- Create a new directory for development with Shoal (
mkdir shoal-base
) and cd into it - Acquire Shoal:
git clone [email protected]:libshoal/shoal.git libshoal
. You should now have Shoal inshoal-base/libshoal
- Clone the Barrelfish source.
git clone git://git.barrelfish.org/git/barrelfish
- cd into
barrelfish/lib
and acquire Shoalgit clone [email protected]:libshoal/shoal.git shoal
- run Hake again.
- Add
tests/shl_simple
to your symbolic_targets
We provide a patch with our modifications to PARSEC's Streamcluster
benchmark as a patch in apps/
.
- Download PARSEC 3.0:
wget http://parsec.cs.princeton.edu/download/3.0/parsec-3.0-core.tar.gz
- Extract it:
tar -xf parsec-3.0-core.tar.gz
. - Copy the source:
cp -r parsec-3.0/pkgs/kernels/streamcluster/src streamcluster
. You should now see Streamcluster next to Shoal asshoal-base/streamcluster
. Change into the Streamcluster directory. - Apply the patch-file provided with the Shoal distribution:
patch -p1 < ../libshoal/apps/streamcluster.patch
- Compile Streamcluster:
make
- Setup environemnt:
export SHL_PARTITION=0; export SHL_HUGEPAGE=0; export SHL_CPU_AFFINITY=0-$(nproc)
- Execute Streamcluster:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../libshoal/shoal/ ./streamcluster
Shoal has build-in support for PAPI. However, it is disabled as
default to reduce the number of dependencies. To enable it, export PAPI=1
and execute a clean build.