Measure UDP and TCP flow latency for both IPv4 and IPv6 using eBPF.
This repo is the companion to my blog posts about eBPF at https://thegraynode.io/tags/flat/.
You can install flat in two ways.
- Download the pre-compiled binary
- Compile from source
Download and unpack the binary with the default garbage collection algorithm:
wget https://github.com/pouriyajamshidi/flat/releases/latest/download/flat.tar.gz
tar xvf flat.tar.gzOr with the new green tea garbage collection algorithm:
wget https://github.com/pouriyajamshidi/flat/releases/latest/download/flat-greenteagc.tar.gz
tar xvf flat-greenteagc.tar.gzThen check out the examples.
You will need Go, clang, and the libbpf and Linux kernel headers (on Debian/Ubuntu: sudo apt install clang libbpf-dev linux-libc-dev).
Clone the repository:
git clone https://github.com/pouriyajamshidi/flatChange directory to flat:
cd flatTip
Simply run make and you will have all you need. If you do not want to use make, keep on reading.
While at the root of project directory, to compile the C code and generate the helper functions, run:
go generate ./...Compile the Go program:
go build -ldflags "-s -w" -o flat cmd/flat.goRun it with elevated privileges:
# Replace eth0 with your desired interface name
sudo ./flat -i eth0
# Or
sudo ./flat -i eth0 -ip 1.1.1.1
# Or
sudo ./flat -i eth0 -port 53
# Or
sudo ./flat -i eth0 -ip 1.1.1.1 -port 53When both -ip and -port are given, a flow must match both.
flat supports four flags at the moment:
| flag | Description |
|---|---|
| -i | interface to attach the probe to |
| -ip | IP address to filter on (optional) |
| -port | Port number to filter on (optional) |
| -h | Show help message |
Heavily inspired by flowlat.
