A Quality of Experience and Smart Queue Management system for ISPs. Leverage CAKE to improve network responsiveness, enforce bandwidth plans, and reduce bufferbloat.
Python-Rust bridge adds two calls. get_weights returns a weight estimate for all subscribers. get_tree_weights uses the former and then recursively traverses your network.json hierarchy to accumulate total weights for each top-level node.
The weight calculation is layered:
If you are subscribed to LTS, weights are calculated with an algorithm that compares a time period (now to now + scheduler interval) in previous weeks for each subscriber and bases the weight on the typical spike usage at those times. This allows for the network to self-adapt for business/residential usage patterns, and to not over-allocate based on users who hardly ever touch the connection they bought with enormous power.
Whether you are subscribed or not, weights are ALSO calculated based on maximum commit. If a customer exists in LTS (and LTS is available), it uses the LTS number. Otherwise, it falls back on the simple calculation.
If you are using a network hierarchy, as part of the tree-build your tree weights are requested. This is then run through a binpacking algorithm to calculate "weight" for each top-level node. The nodes are then applied to distribute tree nodes across top-level CPU/queue as evenly as possible.
If you are in a flat topology, the previously static binpacking calculation can now benefit from LTS if you have it.
On our test networks, we've seen pretty dramatic improvements in CPU totals and throughput.
Add dynamic binpacking support:
get_weights
returns a weight estimate for all subscribers.get_tree_weights
uses the former and then recursively traverses yournetwork.json
hierarchy to accumulate total weights for each top-level node.On our test networks, we've seen pretty dramatic improvements in CPU totals and throughput.