I have an AP in my in my WISP that is only able to get 10 Mbit through to the internet because of a poor quality backhaul at another site several links down the line. I have a customer on this AP that I’m trying to get the fastest speed possible to. He complains when he can’t get 8-10 Mbit and I’ve determined that it’s a handful of other users on this AP using up 2-3 Mbit at different times throughout the day. What queue rules do I need to set to make it so that this high priority customer is always guaranteed nearly 10 Mbit even when other customers are tying to pull 2-3. Ideally he would get 8 while everyone else would get what’s leftover.
I’ve tried a queue tree with a 10 Mbit parent rule and 2 sub rules, one unlimited, and the other limited at 2 Mbit, but when I try and max out both links the QoS doesn’t seem to have much effect.
With these rules queue1 gets 5-7 Mbit and queue2 gets 3-5. These rules seem to be doing something, but not what I want. How do I make it so queue1 is able to get as much of the 10 Mbit as possible, while queue2 gets only 2 Mbit or even just 100 Kbit or almost nothing if queue1 is trying to use the full 10 Mbit?
I thought these would give 10 Mbit to queue1 at all times and give 100 Kbit to queue2 at the same time, but give 10 Mbit to queue2 if queue1 wasn’t using any bandwidth. They actually do nothing and both queues just split the 10 Mbit.
I’m testing with the bandwidth test tool from 2 Routerboards to another Routerboard where these rules are.
I set my max-limit for all queues in my first example to 10 Mbit. I want everyone on the AP to be able to get 10 Mbit if it is available. If queue1 has traffic flowing through it I want it to have priority and get 10 Mbit before queue2. If I reduce the max-limit for queue2 then it won’t ever be able to get 10 Mbit even if there is no traffic flowing through queue1. I have tried a dozen different combinations of settings for max-limit and limit-at settings for all 3 queues. Nothing seems to get me close to what I am trying to achieve. Is there a simple example of what I am trying to achieve? The only example I have seen of prioritization are overly complex QoS configurations with 10, 20, or 30 different rules for VOIP, HTTP, DNS, P2P, etc. etc… I would think this would be something pretty straightforward and easy to accomplish. I’m thinking there is just some simple setting I’m missing.
After doing some more testing I have determined that Queue Trees in RouterOS are unreliable when there are only a few connections. Queue Trees only seem to be effective on a large number of connections.
My previous configuration (or a slight variation of it) works when I set the routerboards to have 20 TCP connections when doing their bandwidth test. The QoS does not work when there is only 1 TCP connection for each test. These findings are disappointing. Consider this scenario: A client in queue2 (my low priority queue) decides to watch a video. This video is one TCP stream out on the internet. He is able to use the full 10 Mbit. Then the client in queue1 (my high priority queue) decides to download a file from a remote FTP server on the internet. This is also 1 TCP stream. In this case the Queue Tree will not give queue1 nearly the full 10 Mbit. It will more or less split the bandwidth between the 2 queues. I’ve tested this and in a simulation of this scenario queue1 gets about 6-7 Mbit on average with drops down to 5 and queue2 gets ~2 Mbit on average even though I told it to limit-at queue2 to 100 Kbit and queue 1 has no limit-at setting or max-limit setting.
Have I found a bug in ROS or is the way the queue system implemented just incapable of correctly limiting bandwidth unless it has multiple connections to try and queue? Is there any other method of prioritizing connections that would be more reliable?
My findings about the simple queue are not the same.
I have 2 networks on my routerboard, a private network and a guest network.
On my guest network I have made one single simple queue, and limited this to 25% of my ISP given bandwidth.
But, actually I only set the max-limit setting, and in that case, the bandwidth stays below or uptill that setting. So in my case it is working.
But if you read the wiki about the max-limit and limit-at params you see that max-limit is a limitation setting (speed can not go above setting),
while the limit-at param is a guaranteed bandwidth.
So I think you misunderstood the params
Maybe playing with prio can help you out here.
Setup a lower prio for your queue2 and see what happens
No I understand what the limit-at and max-limit settings do. I want my max-limit for both queues to be 10 Mbit. queue1 (priority 1) has no limit-at because I want it to have access to the 10 Mbit at all times, but queue2 (priority 8 ) has its limit-at set to 100 Kbit because I don’t want it taking up bandwidth if queue1 needs bandwidth. queue2 is set at priority 8. It can’t get lower than that.
The limit-at setting seems to have little to no effect if queue1 and queue2 have single data streams trying to max out their throughput. limit-at only seems effective if there are multiple data streams. I seem to have found a bug or a limitation of RouterOS. The wiki will not help me confirm this. If anyone can replicate this behavior and post here to validate it then I would appreciate it. Or if someone with extensive knowledge of ROS can post here and explain this behavior and how to fix it then that would be helpful as well.
If I read your story well, I still think you’re confusing the limit-at paramter.
The limit-at parameter is a guaranteed bandwidth at any given time.
Maybe you can try to set the limit at for the prio1 queue to, let’s say 9Mbit, so that this queue will get this. (when needed of course)