FlowBundler is a high speed software traffic shaping (aka, rate-limiting or pacing) scheme.
It achieves high-efficient traffic shaping by batching packets from different flows. More details of FlowBundler can be found in our INFOCOM'23 paper "Burst can be Harmless: Achieving Line-rate Software Traffic Shaping by Inter-flow Batching".
This repo contains our kernel and userspace implementations of FlowBundler prototype.
kernel/sch_dfb
: kernel module of FlowBundler.kernel/sch_eiffel
: kernel module of Eiffelkernel/sch_carousel
: kernel module of Carouselbess
: BESS implementation of FlowBundler
- Linux 5.4.0
- Kernel headers
./kernel/sch_dfb/reenable-sch.sh DEVICE_NAME
where DEVICE_NAME
is the name of network device (e.g., eth0
) to enable FlowBundler.
./kernel/sch_dfb/disable-sch.sh
In our kernel implementation, we take advantage of Early Departure Time (EDT) model to achieve rate-limiting. In other words, we assume that the expected departure time of a packet has already been determined when the packet arrives at the kernel module.
Thus, to make our kernel module work correctly, one may need to explictly specify pacing rate in their applications.
For iperf3
, one needs to set the --fq-rate
parameter.
For customized applications, one needs to set the SO_MAX_PACING_RATE
socket option.
See README
If you have any questions, contact Danfeng Shan.