# 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. ```sh 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://:9123/` to finish installation. ## Gallery ### Node Manager - Dashboard ![image](https://user-images.githubusercontent.com/14896751/227727398-ff9e0321-cae3-4daf-a9f7-59fafaf30061.png) *The node manager displays current activity on your network* ### Node Manager - Circuit View ![image](https://user-images.githubusercontent.com/14896751/227727646-c6eaaece-f2f0-4667-9b66-5cb08a7f4eb8.png) *Find out exactly what's going on inside each circuit, monitoring all of the queue stats - you can even view the details of each category tin* ### Node Manager - Flow Analysis ![image](https://user-images.githubusercontent.com/14896751/227727691-e82bc021-4da4-436a-93af-0f7cd13824be.png) *Analyze what's going on for a specific client, viewing real-time traffic flow data. No need to run `torch` or equivalent on their router. Ideal for finding connectivity problems.* ### Node Manager - Packet Capture ![image](https://user-images.githubusercontent.com/14896751/227727755-e8c9bce6-58b2-4c50-a466-2e68b29a4b18.png) *Capture traffic and analyze per-packet in an intuitive, zoomable traffic analysis system. You can view down to nanosecond granularity to find performance problems, and see what's really going on with your traffic. Click "Download PCAP Dump" to analyze the same data in Wireshark.*