L4S Gear: Technical Evaluations for Low Latency Networks

Build and test L4S-capable systems with Raspberry Pi for experimental, wired & wireless testing purposes.

Get Started

About L4S

L

Low Latency

L4S provides consistently low latency, even when the network is congested, making it ideal for real-time applications.

L

Low Loss

L4S minimizes packet loss by informing senders when they need to slow down to avoid queue overflow.

S

Scalable Throughput

L4S achieves high throughput while maintaining low latency across varying network conditions and scales.

Disclaimer: This is not an endorsement of L4S but provides resources for technical evaluations. These devices are intended for experimental, wired & wireless testing purposes and not for production networks.

Diagram

Raspberry Pi 5 Network with Ethernet Bridge and L4S marking plane

Hardware Requirements

Required Hardware

  • Raspberry Pi 5 (bcm2712) or Pi 4B (bcm2711) - two or more, 8G RAM is suggested
  • Multiport power supply, e.g. min 5V 3A or 15W per port for RPi, 60W for laptop
  • USB A to C cords for RPi power, 1ft or so
  • 64G Micro SD card(s)
  • Micro HDMI cable(s)
  • HDMI monitor
  • USB keyboard and mouse
  • USB adapter (or equivalent) for micro SD card
  • Ethernet switch

Optional Hardware

  • USB 2.5G ethernet adapters (two for the forwarding plane)
  • NVME hat with SSD card
  • 8 port VLAN switch (e.g Netgear ProSAFE GS108E)
  • USB C cord with power switch
  • RPi 4B case
  • GPS hat for pulse per second (not documented here)
  • SD card holder/case

Software Requirements

Required Software

  • Linux dd (or Raspberry Pi Imager)
  • gzip & gunzip
  • Internet access to the RPi
  • Build tools (detailed in the build guide)

L4S Build Guide

1. System Setup

Create a full Debian Bullseye system with 64-bit support using a 64G micro SD card:

  1. Download the Bullseye image from our site or from Debian.
  2. Use Raspberry Pi Imager to write to a 64G card (this will destroy all existing data).
  3. Install the card into a Raspberry Pi 4 with wired ethernet attached.
  4. Boot card and follow initial setup including creating a user ID and system updates.
  5. Reboot, set root password with sudo passwd.
  6. Optionally install Firefox ESR: sudo apt-get install firefox-esr.
  7. Optionally enable SSH: systemctl start ssh & systemctl enable ssh.

2. Install Build Tools

sudo apt install raspberrypi-kernel-headers build-essential bc git wget bison flex libssl-dev make libncurses-dev
sudo apt install emacs automake

3. Build Kernel

Get the source code and build the kernel:

git clone https://github.com/minuscat/rpi-6.6.y.git
cd rpi-6.6.y/

Review the guide on building RPi kernels.

4. RPI config

Set up the RPI environment:

KERNEL=kernel_2712_l4s 
rpi4: cp arch/arm64/configs/bcm2711_defconfig .config (rpi4)
rpi5: cp arch/arm64/configs/bcm2712_defconfig .config (rpi5)
		

Enable Prague and BBR Congestion Control

use make menuconfig, navigate to the following path:

Networking support --->
    Networking options --->
        TCP: advanced congestion control --->
	[*] TCP: advanced congestion control
	<M> or <*> BBR TCP congestion control
	<M> or <*> BBR2 TCP congestion control  
	<M> or <*> Prague TCP congestion control
	      

Specific options to enable:

  • CONFIG_TCP_CONG_ADVANCED=y
  • CONFIG_TCP_CONG_BBR=m (or =y)
  • CONFIG_TCP_CONG_BBR2=m (or =y)
  • CONFIG_TCP_CONG_PRAGUE=m (or =y)

Enable PIE and Dual Queue PIE Options

use make menuconfig, navigate to the following path:

Networking support --->
    Networking options --->
        QoS and/or fair queueing --->
	    [*] QoS and/or fair queueing
	    <M> or <*> PIE packet scheduler
	    <M> or <*> Dual Queue PIE packet scheduler (DualPI2)
	      

Specific options to enable:

  • CONFIG_NET_SCH_PIE=m (or =y)
  • CONFIG_NET_SCH_DUALPI2=m (or =y)

You may also want to enable related options:

  • CONFIG_NET_SCH_FQ_PIE=m - Flow Queue PIE packet scheduler

Continue with the build:

CONFIG_LOCALVERSION="-l4s-kernel"
make -j6 Image.gz modules dtbs
make -j6 modules_install
	      
sudo sysctl -a | grep avail # Should show prague in available congestion control

5. Configuration for Testing

Enabling Accurate ECN

sysctl net.ipv4.tcp_ecn=3

Enabling BBRv2 CC with Accurate ECN

sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=bbr2

Enabling TCP Prague CC with Accurate ECN

sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=prague

Enabling CUBIC CC with Accurate ECN

sysctl net.ipv4.tcp_ecn=3 net.ipv4.tcp_congestion_control=cubic

Enabling CUBIC CC without Accurate ECN

sysctl net.ipv4.tcp_ecn=0 net.ipv4.tcp_congestion_control=cubic

6. Install Testing Tools

Installing iPerf2

cd /usr/local/src
git clone https://git.code.sf.net/p/iperf2/code iperf2-code
cd iperf2-code
optionally: git checkout udp-l4s
./configure --enable-udp-l4s
make -j
make install

Installing Go for Network Quality Testing

wget https://go.dev/dl/go1.20.6.linux-arm64.tar.gz
tar -C /usr/local -xzf go1.20.6.linux-arm64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version  # Verify installation

Building Network Quality Tool

cd goresponsiveness/
go mod download
go build networkQuality.go

Network Configurations

Network Optimization Scripts

To help you get the most out of your L4S testing setup, we provide specialized scripts for network tuning and traffic shaping. These scripts can help you achieve optimal performance and accurate test results with your Raspberry Pi L4S testbed.

Network Tuner Script

Optimize your network settings for high throughput by adjusting system buffer sizes and configuring network interfaces for optimal performance.

  • Increases network buffer sizes
  • Configures traffic control with Fair Queuing
  • Disables problematic network offloading features
Download bash script for tuning

Traffic Shaper with Dual PI² Support

Shape network traffic with asymmetric rate support and optional dual PI² queuing for improved latency under load.

  • Independent download/upload rate limiting
  • Automatic burst size calculation
  • Support for dual PI² queuing discipline
Download bash script for CE marking

Script Usage

For detailed usage instructions and advanced configuration options for our network optimization scripts, visit our Network Scripts page. This resource includes:

  • Command line usage examples for different network scenarios
  • Parameter descriptions for fine-tuning performance
  • Technical details about buffer optimization and traffic shaping

Packet Inspections with ECN

Downloads

Contact Us

For questions, support, or to contribute to the L4S project, please reach out to us.

Email Us