-
-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[question] Libre QoS - few questions before testing #42
Comments
|
?
There are so many Question because I am comparing those three projects:
|
It looks nice: I will probbably write an integration between with our CRM LMS and LibreQoS. |
You can do so by creating manual entries in Shaper.csv. However, the burst parameters aren't implemented, and each IP is treated as a distinct host (except when you define a subnet in Shaper.csv like 10.0.0.0/24 - those are all shaped under one queue)
It rips and replaces all classes at each run. For ~500 hosts thats usually just a few seconds. this is done because it gets very convoluted to track class ids when changing them on the fly.
Yes https://github.com/rchac/LibreQoS/blob/main/v1.1/lqAPI.py
The problem with HTB offloading is that only Mellanox has implemented it (please correct me if that has changed), and i wouldn't want to vendor-lock folks. It also limits to something like 3 levels of HTB depth, which kind of defeats a lot of the cool potential of nested HTBs.
Yes, with v1.1 and InfluxDB
If I'm understanding correctly, you mean if LibreQoS middelboxes should have pinned CPU affinity? If so, ideally you want to have a bare metal machine (xdp works better on bare metal) where you don't have to worry about other VMs. That said, in production I run it on a VM and it seems to be fine without any need to pin cores, but each VM hypervisor setup will be different.
Yup! just put 192.168.1.55/29 as the IPv4 in Shaper.csv for your customer.
Using influxDB in v1.1, sort of. It tracks Mbps, rather than exact packet rate.
only as a QoS machine between EdgeBGP and subscribers - exactly that.
LibreQoS should be in place downstream of wherever NAT occurs on your network. So if you use 100.64.0.0 for NAT addresses for example, LibreQoS should "see" those IPs, and shape those, rather than the external Public IP.
No, but it could if you adapt the code just slightly i think.
Yes!
We're leaning the XDP route. XDP allows for a more neutral approach to NICs and vendors. We want ISPs to be able to use a variety of setups and NICs. Also I think XDP is kind of our only hope to work around the qdisc locking problem - and to have high throughput for HTB based hierarchical shaping. |
Burts parameter is important when there are many smaller classes (eg. 1000x 10M) - total router cpu load is less then.
The main thing is that LibreQoS not support getting different IPs from 192.168.1.2/24 and 192.168.2.2/24 and mark it as one flowid and limit into one queue :( Is it hard to implement this? This is the case for two main cases:
0 Packet lost when commiting changes ?
New intels (i40e) also supports this.
We will install LibreQoS on Proxmox and VM got settings:
This is the main thing I came to test LibreQoS :)
|
@rchac i added some more questions, This is really important info for project - You could add some to README.TXT or make FAQ for future generations. |
Could you explain more? @dtaht found that changing HTB burst parameters seemed to mess with CAKE.
I suppose the best way to implement this would be to add a customer_ID field on Shaper.csv (in addition to the existing ID field). With that, if multiple entries in Shaper.csv share the same ID, they can be in the same queue.
That makes sense. Let's work to add this functionality.
I tested right now. On a network of 350 subs, I saw just 1 single packet lost during the refresh. I tested at an interval of 100ms. So not enough packet loss to cause perceptible issues on most networks.
I looked this up but could not find anything to corroborate it. Could you please help me with a link, if you're able to find one?
I would enable NUMA.
Part of how we achieve multi core is to have an HTB per MQ qdisc on each CPU core. I'm not sure if HFSC can reside within an MQ qdisc. If it can, I'm not sure how HFSC would interact with CAKE/fq_codel. I could anticipate those potentially interacting in unexpected ways. However, you are welcome to test it and if you find it helps we can look more into it! You could replace mentions of "htb" with 'hfsc" in LibreQoS.py such as on the line:
with
I don't think xdp-cpumap-tc has VLAN support yet. xdp-cpumap-tc is what we use to redirect packets to the appropriate CPU quickly. If you follow this network design, you can have any VLANs desired on the Core router at least, and as they pass, routed, over the LibreQoS box, they'll be shaped correctly.
Yes definitely. |
I will - answer questions in other issues as this would help to save information better - sorry for not doing it first time - as I didn't know that will be so many questions. |
Great, thanks. Thank you for your interest in the project and for your contributions, I appreciate it. |
Situation for now: only Mellanox is supporting hierarhical rate limiting in HW+drivers. I checked again and found that I interpreted badly mails from netdev@kernel list. |
That was an awful lot of questions. We explored HFSC, but in the context of a per customer shaper, htb + fq_codel seems better. There are a lot of advocates for HFSC + SFQ where its characterisics (per packet shaping) were ideal for in-customer flows, but as speeds cracked 25Mbits or so SFQ started to show it's need for an AQM component, and HFSC failed to differentiate between flows enough. I totally applaud more attempts to use HFSC + fq_codel or cake. Please see https://www.bufferbloat.net/projects/bloat/wiki/Wondershaper_Must_Die/ for where smart queue management and eventually cake, came from. To clarify: our experiment with the burst parameter was with in trying to shape a pre-wireless-n network, which can only tolerate a single packet. In each direction! so it proved best to spread the load at the default quantum to provide better service to more customers and more accurate rtt estimates to the end points. I think that in wireless-n networks where aggregation is a thing, fiddling with the burst parameter may be a win. An even bigger win though would be having proper handling of aggregation in the 802.11(n,ac,ax) router hardware itself. https://www.cs.kau.se/tohojo/airtime-fairness/ . As much as I think preseem and libreqos are really good, needed, tools for ISPs, applying rfc7567 at the actual bottleneck points is also very needed. However IMHO "saving on cpu" should not be a goal of leveraging the burst parameter in this scenario. Hardware capable of libreqos is cheap, it seems best to make few tradeoffs in terms of network quality. The xdp approach is working well, and now that we're doing that, perhaps a longer term evolution of this would be towards doing even more work in userspace. |
I hadn't heard of bisonrouter before. The HQOS system in the most current ddpk contains a not-quite-fully-baked implementation of the pie AQM. A couple bug fixes for that just went by, but if bisonrouter has a working pie, I'd love to hear results from that. btw, here's one of the papers on cake. https://arxiv.org/abs/1804.07617 - it went into openwrt and most third party firmwares starting in 2015, linux mainline in 2018. We didn't design it to be a middlebox!! At the time we started cake XDP didn't exist, and while we got rid of a lot of the locks in htb, it didn't seem like it would scale... until libreqos showed it did. I speak as a dev that has never owned more than a 6 core desktop, and a 12 core xeon server. I am enjoying the data we are getting back from the deployment. One recent deployment ended up - "we deployed libreqos over a weekend, and all - and I mean all - our calls complaining about speed vanished" - and they called me to poke into their stats to see how well it actually working. It was really astonishing how many packet marks and drops they had at peak load, and yet how much better their network "felt". |
@dtaht thank you for explaining, this helps a lot.
Best feedback possible. How awesome to hear! |
This issue was smashed into smaller one - closing it now. |
Does it supports flat configuration configs with subscriber services parameters for example:
{ CUSTOMERIPS: 172.16.1.1, 172.16.1.2, DLRATE: 100M, UPRATE: 10M, DLCEIL: 200M, UPCEIL, 20M, DLBURST: 400M, DLBURSTTIME: 5sec,
CUSTOMERIPS: 172.16.3.0/29, DLRATE: 100M, UPRATE: 10M, DLCEIL: 200M, UPCEIL, 20M, DLBURST: 400M, DLBURSTTIME: 5sec}
Can I change only one class?
Does Libre QoS got an API?
Does it supports HTB Offloading for filters (https://marc.info/?l=linux-netdev&m=160770071222418&w=2) ?
Does it supports counting per customer?
Is it possible to view class network usage in realtime?
Is NUMA [x] better for routers or not?
Is there any documentation?
The text was updated successfully, but these errors were encountered: