This eBPF program attempts to store timestamps in BPF maps and uses a control plane connected to Redis DB to store timestamp entries.
More information can be found at in our NSDI paper.
Also checkout Valinor super repository.
Tested on Linnux kernel 5.15.
- Install software requirements
- build-essential flex bison libncurses5-dev
- clang-10 llvm-10 gcc-multilib
- libevent-dev
- redis-server
- libpci-dev
- python3-pip
- Dowmload and install the latest version of
dwarves
package for your distribution. - Compile and install the kernel 5.15 or higher with eBPF BTF functionalities enabled.
- Run
git submodule init
andgit submodule update --recursive
to checkout three required repositories below. Then follow their installation steps. - Clone libbpf:
git clone https://github.com/libbpf/libbpf.git
(skip clone if runningsubmodule update
). Checkout tov0.8.1
, build and install. - Clone IProute2:
git clone https://github.com/shemminger/iproute2.git
(skip clone if runningsubmodule update
). Checkout tov5.18.0
. Build and install.- export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
- make sure libbpf is added to pkgconfig:
pkg-config --list-all
./configure
andmake -j
andmake install
- You might need to link
libbpf
as follows in order to get tc to work:sudo ln -s /usr/lib64/libbpf.so.0.8.1 /usr/lib/libbpf.so.0
- Clone, build, and install
hiredis
inext
subdirectory. - Modify you interfacce name in the
Makefile
. - Build Valinor-H:
- build the data plane:
make
- build the control plane:
make control_plane
- build the data plane:
- Load and run:
sudo make run KEY={x}
wherex
is the Redis key for current run.
Every time you execute make run
you should provide the key that will be used by Redis to store the timestamp items. This allows running multiple meausrements without unloading the dataplane. The measurement is triggered only when the control plane is running.
Erfan Sharafzadeh
2020-2023