<div dir="ltr">Hello to all,<div><br></div><div>As always, the most up-to-date info can be found in our support chat:</div><div><a href="https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/">https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/<br></a></div><div><br></div><div>Let's start with <b>v1.5 Beta 1 Progress notes </b>from Herbert, and see <b>LibreQoS as a part of Network measurements at Callio FutureMINE in Finland </b>below!</div><div><br></div><div>"Wanted to give you guys an update. We just finished merging in all of the feature branches into develop for 1.5 - except for the one that actually updates the version number (we do that last so you don't see "Upgrade available" before there is, in fact, an upgrade available).<br>We're still going through a bunch of testing on different systems, so far it looks good (we've tested all the parts separately, integration testing sometimes finds some gaps at the edges)." Herbert Wolverson:</div><div><br><b><u>Draft Changelog Since 1.4</u></b></div><div><br><b>Unified Configuration System<br></b> * Replace `ispConfig.py` with a singular `/etc/lqos.conf`<br>* Automatically migrate previous configuration<br>* In-memory cache system (load the config once and share it, detect changes)<br>* Shared configuration between Python and Rust</div><div><br><b>Dynamic Binpacking<br></b>* It was a common problem for the CPU-queue assignment (in tree mode) to allocate too many resources<br>  to a single CPU.<br><br>* Each circuit is assigned a "weight". If you have Long-Term Stats, then the weight is calculated based on<br>  past usage AND assigned speed plan. Without LTS, it's just assigned speed plan.<br><br>* The total weight - at this time of day - is then calculated for each top-level entry.<br>* A "binpacking" algorithm then attempts to equalize load between CPUs.<br>* Significant performance improvement on many networks.</div><div><br><b>Per-Flow Tracking System<br></b>* "Flows" are detected as TCP connections, UDP connections that reuse a source/destination and ICMP between a source/destination.<br>* Rather than just track per-host statistics, statistics are attached to a flow.<br>* Flows maintain a rate estimation at all times, in-kernel.<br>* Flows calculate Round-Trip Time (RTT) continuously.<br>* Flows spot timestamp duplications indicating TCP Retry (or duplicate).<br>* Much of the kernel code moved from the TC part of eBPF to the XDP part, giving a modest speed-up and improvement in<br>  overall throughput.</div><div><br><b>Per-Flow Userland/Kernel Kernel-Userland System<br></b>* Rather than reporting RTT via a giant data structure, individual reports are fed to the kernel through a userspace callback<br>  system.<br><br>* Flows "closing" (clean closure) results in a kernel-userspace notify.<br>* Flows also expire on a periodic tick if no data has arrived in a given time period.<br>* This decreased *kernel side* overhead significantly (eBPF kernel to userspace is non-blocking send).<br>* This increased userspace CPU usage very slightly, but removed the processing overhead from the packet-flow execution path.</div><div><br><b>Per-Flow Reporting System<br></b>* RTT is compiled per-flow into a ringbuffer. Results from very-low (mostly idle) flows are ignored. RTT is calculated from a median of the last<br>  hundred reports. Significant accuracy improvement.<br><br><b>* Per-flow TCP retries are recorded.<br></b>* When flows "close", they are submitted for additional analysis.<br>* Simple protocol naming system maps ethertype/port to known protocols.</div><div><br><b><u>Export Flow Data in netflow version 5 and 9 (IPFIX)</u></b></div><div><br><b>Closed Flow Reporting System<br></b>* Created "geo.bin", a compiled list of by-ASN and by IP geolocations.<br>* `lqosd` will download a refreshed `geo.bin` periodically.<br>* Closed flows are mapped to an ASN, giving per-ASN performance reports.<br>* Closed flows are mapped to a geolocation, giving geographic performance reports.<br>* Closed flows are mapped to ethertype and protocol.<br>* User interface expanded in `lqos_node_manager` to display all of this.</div><div><br><b>Preflight checks for lqosd<br></b>* Prior to startup, common configuration and hardware support issues are checked.<br>* Single-queue NICs now get a proper error message.<br>* If the user tries to run both a Linux bridge and an XDP bridge on the same interface pair,<br>  the XDP bridge is disabled and a warning emitted.</div><div><br><b>XDP "Hot Cache"<br></b>* Much CPU time was spent running a longest-prefix match check on every ISP-facing IP address.<br>* Added a least-recently-used cache that matches IP adddresses to circuits with a much less<br>  expensive fast lookup.<br><br>* Added a "negative cache" entry to speed up "this IP still isn't mapped"<br>* Added cache invalidation code to handle the IP mappings changing<br>* This resulted in a 20-30% CPU usage reduction under heavy load.</div><div><br><b>Config UI<br></b>* `lqos_node_manager` is now aware of the entire configuration system.<br>* All configuration items may be edited.<br>* `ShapedDevices.csv` can be edited from the web UI.<br>* `network.json` can be edited from the web UI.<br>* Heavy validation, ensuring that devices have matching network.json entries, IPs aren't duplicated, etc.</div><div><br><b>LQTop<br></b>* New `lqtop` CLI tool with much prettier text UI and support for flows.<br>UISP Integration 2<br>* An all-new, massively faster UISP Integration system.<br>* Includes much better network map traversal.</div><div><br><b>Support Tools<br></b>* CLI tool for running a "sanity check" on common issues.<br>* Gather configuration into a bundle for sending.<br>* View the bundle.<br>* Submit the bundle to LibreQoS for analysis.<br>* A web UI (`lqos_node_manager`) version of the same thing, using shared code.</div><div><br><b>Misc<br></b>* Improvements and fixes to all integrations, especially Spylnx.<br>* Update back-end code to latest versions.<br>Our lines-of-code counts are approximately:<br>-----------------------------------<br>Language                       code<br>Rust                          18251<br>Python                         5859<br>-----------------------------------<br></div><div><br></div><div>And I forgot one: if you're running the 6.x kernel line, XDP metadata kicks in and you get another decent performance boost - but it still works with the older kernels (just without the boost).</div><div><br>Also... with all of these improvements stacked, we've cracked the 10gbps single-flow </div><div>barrier on Payne.</div><div><br></div><div><img src="cid:ii_lxhrvrfx0" alt="image.png" width="487" height="225"><br></div><div><br></div><div><br><b>"Payne" (the test server at Equinix) is:</b></div><div><br>16 cores<br>Intel(R) Xeon(R) E-2378G CPU @ 2.80GHz<br>16 mb cache<br>It has an Intel 25gbps NIC</div><div><br>The number of cores won't matter much for single-flow throughput (obviously, you still need to have enough for your traffic load).</div><div><br>That test was without other traffic also trying to take resources, so it's hard to say exactly what's required until we've got a bit more hardware under our belt.<br></div><div><br></div><div><br></div><div>And now for <b>LibreQoS as a part of Network measurements at Callio FutureMINE in Finland!</b></div><div><b><br></b></div><div><div dir="auto" style="white-space:pre-wrap;font-family:system-ui,-apple-system,BlinkMacSystemFont,".SFNSText-Regular",sans-serif;color:rgb(5,5,5);font-size:15px">Read about it on Twitter/X:</div><div dir="auto" style="white-space:pre-wrap;font-family:system-ui,-apple-system,BlinkMacSystemFont,".SFNSText-Regular",sans-serif;color:rgb(5,5,5);font-size:15px"><span class="gmail-html-span gmail-xdj266r gmail-x11i5rnm gmail-xat24cr gmail-x1mh8g0r gmail-xexx8yu gmail-x4uap5 gmail-x18d9i69 gmail-xkhd6sd gmail-x1hl2dhg gmail-x16tdsg8 gmail-x1vvkbs" style="margin:0px;text-align:inherit;padding:0px;font-family:inherit"><a class="gmail-x1i10hfl gmail-xjbqb8w gmail-x1ejq31n gmail-xd10rxx gmail-x1sy0etr gmail-x17r0tee gmail-x972fbf gmail-xcfux6l gmail-x1qhh985 gmail-xm0m39n gmail-x9f619 gmail-x1ypdohk gmail-xt0psk2 gmail-xe8uvvx gmail-xdj266r gmail-x11i5rnm gmail-xat24cr gmail-x1mh8g0r gmail-xexx8yu gmail-x4uap5 gmail-x18d9i69 gmail-xkhd6sd gmail-x16tdsg8 gmail-x1hl2dhg gmail-xggy1nq gmail-x1a2a7pz gmail-x1sur9pj gmail-xkrqix3 gmail-x1fey0fg" href="https://x.com/sksauli/status/1802122743434875069?fbclid=IwZXh0bgNhZW0CMTAAAR2qnL6A8QCDTaX5ZDpxlRABx8jn3d5GWLZreOqPZjx1tuRPG0TEJAIUs3U_aem_ZmFrZWR1bW15MTZieXRlcw" rel="nofollow noreferrer" role="link" tabindex="0" target="_blank" style="text-decoration:none;outline:currentcolor;list-style:none;margin:0px;text-align:inherit;border-style:none;padding:0px;border-width:0px;box-sizing:border-box;display:inline;font-family:inherit">https://x.com/sksauli/status/1802122743434875069</a> </span></div><div dir="auto" style="white-space:pre-wrap;font-family:system-ui,-apple-system,BlinkMacSystemFont,".SFNSText-Regular",sans-serif;color:rgb(5,5,5);font-size:15px"><span class="gmail-html-span gmail-xdj266r gmail-x11i5rnm gmail-xat24cr gmail-x1mh8g0r gmail-xexx8yu gmail-x4uap5 gmail-x18d9i69 gmail-xkhd6sd gmail-x1hl2dhg gmail-x16tdsg8 gmail-x1vvkbs" style="margin:0px;text-align:inherit;padding:0px;font-family:inherit"><br></span></div><div dir="auto" style="white-space:pre-wrap;font-family:system-ui,-apple-system,BlinkMacSystemFont,".SFNSText-Regular",sans-serif;color:rgb(5,5,5);font-size:15px"><span class="gmail-html-span gmail-xdj266r gmail-x11i5rnm gmail-xat24cr gmail-x1mh8g0r gmail-xexx8yu gmail-x4uap5 gmail-x18d9i69 gmail-xkhd6sd gmail-x1hl2dhg gmail-x16tdsg8 gmail-x1vvkbs" style="margin:0px;text-align:inherit;padding:0px;font-family:inherit">or </span>on LinkedIn:</div></div><div style="white-space:pre-wrap;font-family:system-ui,-apple-system,BlinkMacSystemFont,".SFNSText-Regular",sans-serif;color:rgb(5,5,5);font-size:15px"><a href="https://www.linkedin.com/pulse/network-measurements-callio-futuremine-delta-cygni-labs-dqhdf/">https://www.linkedin.com/pulse/network-measurements-callio-futuremine-delta-cygni-labs-dqhdf/<br></a></div><div><b><br></b></div><div><img src="cid:ii_lxhrzblt1" alt="1718487787971.jpeg" width="487" height="274"><br></div><img src="cid:ii_lxhrzbn62" alt="1718489068506.jpeg" width="487" height="407"><br><div><img src="cid:ii_lxhrzbo13" alt="1718489172381.jpeg" width="326" height="487"><br></div><img src="cid:ii_lxhrzbok4" alt="1718489216151.jpeg" width="487" height="365"><br><div><span class="gmail-message_sender" style="overflow:hidden;text-overflow:ellipsis;display:flex;margin-top:3px;color:rgba(255,255,255,0.75);font-family:"Source Sans 3 VF",sans-serif;font-size:14px"><span class="gmail-sender_info_hover gmail-sender_name" role="button" tabindex="0" style="display:inline-flex;font-weight:700;column-gap:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:normal;outline:0px"><span class="gmail-view_user_card_tooltip gmail-sender_name_text" style="overflow:hidden;display:inline-flex"><span class="gmail-user-name" style="overflow:hidden;text-overflow:ellipsis"><img src="cid:ii_lxhrzbph5" alt="1718490403924.jpeg" width="367" height="487"><br></span></span></span></span></div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><br></div><div><br></div><div>All the best,</div><div><br></div><div><p class="MsoNormal" style="color:rgb(34,34,34)">Frank<u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)"><u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)">Frantisek (Frank) Borsik<u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)"><a href="https://www.linkedin.com/in/frantisekborsik" style="color:rgb(17,85,204)" target="_blank">https://www.linkedin.com/in/frantisekborsik</a><u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)">Signal, Telegram, WhatsApp: +421919416714 <u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)">iMessage, mobile: +420775230885<u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)">Skype: casioa5302ca<u></u><u></u></p><p class="MsoNormal" style="color:rgb(34,34,34)"><a href="mailto:frantisek.borsik@gmail.com" style="color:rgb(17,85,204)" target="_blank">frantisek.borsik@gmail.com</a></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>