LibreQoS v1.3.1 to v1.4 Change Summary

Version 1.4 is a huge milestone. A whole new back-end, new GUI, 30%+ performance improvements, support for single-interface mode.

Some Statistics

  • 564 Commits since 1.3.1

  • 28,399 Lines of Code

    • 10,142 lines of Rust

    • 5,448 lines of HTML & JavaScript

    • 3,126 lines of Python

    • 2,023 lines of C

Peak Performance (So Far)

  • Tested single-stream performance of just under 10 gbit/s on a 16-core Xeon Gold (single interface architecture, using 8 cores for each direction). The flow was shaped with Cake, and retained good (<10 ms RTT latency) performance.

  • Tested 25 gbit/s total throughput on the same system. CPU was not saturated—we didn’t have a bigger network to test!

  • Running live at ISPs with 11 gbit/s of real customer performance and plenty of room to grow.

New Architecture

  • Rust-based back-end provides:

    • lqosd - a daemon that manages:

      • Loading/setup/unloading eBPF programs.

      • Gathers statistics directly from eBPF.

      • Provides a local “bus” for transporting data between components.

      • Sets “tunables”, replacing the need for a separate offloading service.

    • lqtop - a console-based utility for viewing current activity.

    • lqos_node_manager - a web-based GUI that:

      • Monitors current activity.

      • Monitors system status.

      • Provides “best/worst” summaries of RTT.

      • Provides visibility into the working of queues.

      • Categorizes traffic to match your network hierarchy, letting you quickly find the bottlenecks.

      • Let’s you browse and search your shaped devices.

      • Lists “unknown IP addresses” that are passing through the shaper but do not have a rule associated.

      • Allows you to view and edit the LibreQoS configuration.

    • lqos_python - provides Python access to the bus system.

    • lqos_setup - builds enough configuration files to get you started.

    • lqos_users - authentication for the GUIs.

  • High-performance Python script:

    • Batches TC commands for fast execution.

    • Batches bus-transactions to associate IP subnets with users for fast execution.

    • Improved scheduler for InfluxDB graphing.

High Performance Bridge (Bifrost)

  • Optionally replace the Linux bridge system with an XDP-based bridge accelerator.

  • Throughput is 30% higher in this mode.

Packet and Flow Analysis (Heimdall)

  • Viewing a circuit in the web UI displays a summary of IP traffic flows for that circuit.

  • A “capture” button will capture packet headers, and allow nanosecond-level analysis of traffic data.

  • You can download the packet captures in libpcap format, for analysis in Wireshark and similar tools.

  • Configure the capture delay in /etc/lqos.conf

Single-interface Mode

  • Operate with a single network interface and VLANs for “in” and “out”.

Graphs

  • Graph current throughput, shaped and unshaped.

  • Graph CPU and RAM performance.

  • Graph individual Cake shaper tins, backlog, delays.

  • TCP “round trip time” histogram showing overall network latency performance.

  • Per-network node traffic graph.

  • Per-network node RTT latency histogram, to let you zero-in on troublespots.

Miscellaneous

  • build_rust.sh builds the entire package from a Git update, with minimal (<1 second) downtime.

  • build_dpkg.sh assembles the entire system into an Ubuntu/Debian .deb installer.

  • Sample .service files for systemd integration.

  • Real-time adjustment to tunables.

  • Redact text into Klingon to allow screenshots without sharing customer data.

  • Preliminary support for reading IP data inside MPLS packets, as long as they are ordered “VLAN->MPLS->VPLS” and not the other way around.

  • Automatically trim network trees that exceed 9 levels deep.

  • Very accurate timing functions for better statistics.

  • Greatly improved documentation.

  • Improved rejection of TCP round-trip-time outliers (from long-polled connections).

  • Improved Spylnx and UISP integrations.

Better Distribution

This is in alpha testing. It has worked on some test setups, but needs production testing.

Installation via apt-get and LibreQoS’s own repo. Add the libreqos repo, and you can use apt-get to install/update the traffic shaper. This doesn’t get you the development toolchain.

sudo echo "deb http://stats.libreqos.io/ubuntu jammy main" > /etc/apt/sources.list.d/libreqos.list
wget -O - -q http://stats.libreqos.io/repo.asc | apt-key add -
apt-get update
apt-get install libreqos

You will be asked some questions about your configuration, and the management daemon and webserver will automatically start. Go to http://<your_ip>:9123/ to finish installation.