LibreQoS/v1.3
2022-11-23 11:04:55 +01:00
..
cpumap-pping@0d4df7f918 Pulled newest eversion of cpumap-pping 2022-11-20 01:28:34 -07:00
testdata Add INTEGRATION_HOWTO - providing documentation on how to create your own integration. 2022-10-31 08:47:06 -05:00
graphInfluxDB.py Standardize timestamps. Add CPU graphing 2022-11-20 09:13:38 -07:00
influxDBdashboardTemplate.json Revert to version compatible with InfluxDB 2.4 and prior 2022-11-20 20:02:25 -07:00
INTEGRATION_HOWTO.md Add INTEGRATION_HOWTO - providing documentation on how to create your own integration. 2022-10-31 08:47:06 -05:00
integrationCommon.py Use client ID as circuit ID when building ShapedDevices.csv 2022-11-01 08:56:41 -05:00
integrationSplynx.py Cleanup Spylnx integration file 2022-10-31 14:58:03 -05:00
integrationUISP.py Support ExceptionCPE structure in the common network graph, and apply on node add. That makes it work across all integrations. 2022-10-29 10:37:57 -05:00
ispConfig.example.py Make cpumap-pping unchangeable again 2022-11-20 09:15:30 -07:00
LibreQoS.py Fix partial reload bug. Also make cpumap-pping unchangable again 2022-11-20 09:12:10 -07:00
mikrotikDHCPRouterList.csv add v1.3-alpha 2022-10-18 14:26:43 -06:00
mikrotikFindIPv6.py add v1.3-alpha 2022-10-18 14:26:43 -06:00
network.example.json add v1.3-alpha 2022-10-18 14:26:43 -06:00
README.md Update screenshot 2022-11-20 09:19:46 -07:00
scheduler.py Make cpumap-pping unchangable again 2022-11-20 09:14:50 -07:00
ShapedDevices.example.csv bugfix: ShapedDevices.csv needs to have CircuitID in all rows 2022-11-23 11:04:55 +01:00
testGraph.py Support ExceptionCPE structure in the common network graph, and apply on node add. That makes it work across all integrations. 2022-10-29 10:37:57 -05:00
testIP.py Add testIP.py and testdata folder 2022-10-27 09:41:39 -05:00

v1.3 (IPv4 + IPv6) (Beta)

image

Features

Fast TCP Latency Tracking

@thebracket has created cpumap-pping which merges the functionality of the xdp-cpumap-tc and ePPing projects, while keeping CPU use within ~1% of xdp-cpumap-tc.

Integrations

Partial Queue Reload

In v1.2 and prior, the the entire queue structure had to be reloaded to make any changes. This led to a few milliseconds of packet loss for some clients each time that reload happened. The scheduled.py was set to reload all queues each morning at 4AM to avoid any potential disruptions that could theoretically cause.

Starting with v1.3 - LibreQoS tracks the state of the queues, and can do incremental changes without a full reload of all queues. Every 30 minutes - scheduler.py runs the CRM import, and runs a partial reload affecting just the queues that have changed. It still runs a full reload at 4AM.

v1.3 Improvements to help scale

HTB major:minor handle

HTB uses a hex handle for classes. It is two 16-bit hex values joined by a colon - major:minor (:). In LibreQoS, each CPU core uses a different major handle.

In v1.2 and prior, the minor handle was unique across all CPUs, meaning only 30k subscribers could be added total.

Starting with LibreQoS v1.3 - minor handles are counted independently by CPU core. With this change, the maximum possible subscriber qdiscs/classes goes from a hard limit of 30k to instead be 30k x CPU core count. So for a higher end system with a 64 core processor such as the AMD EPYC™ 7713P, that would mean ~1.9 million possible subscriber classes. Of course CPU use will be the bottleneck well before class handles are in that scenario. But at least we have that arbitrary 30k limit out of the way.

"Circuit ID" Unique Identifier

In order to improve queue reload time in v1.3, it was necessary to use a unique identifier for each circuit. We went with Circuit ID. It can be a number or string, it just needs to be unique between circuits, and the same for multiple devices in the same circuit. This allows us to avoid costly lookups when sorting through the queue structure.

If you have your own script creating ShapedDevices.csv - you could use your CRM's unique identifier for customer services / circuits to serve as this Circuit ID. The UISP and Splynx integrations already do this automatically.