Incoming QOS

Discussion in 'Tomato Firmware' started by dankim831, Sep 26, 2006.

  1. dankim831

    dankim831 Network Guru Member


    First of I want to say that Tomato is absolutely amazing. Great job!

    Can I make a feature request? I would to request some type of incoming bandwidth management (I think DD-WRT just calls it Incoming QOS). From some of the posts in this forum, apparently you can't really achieve TRUE incoming QOS but I believe DD-WRT does some sort of management of incoming connections to prevent any one service from saturating the pipe as well as catagorizing what gets more priority over what. I would like to request this feature.

    I think if in the existing version you allowed a range of bandwidth for the downlink classifications just like the upload qos classification it would be great.

    I understand the downlink connections are slowed down gradually by sending delayed ACK's making the link look slower, I still believe this is better than nothing, especially when someone is downloading something really fast and another user needs to start downloading then the firmware could slow down the really fast connection at the very least.

    Again truely amazing job and I hope this project is really sucessful!

  2. cgondo

    cgondo Network Guru Member

    it is provided in Tomato v0.5 THere is a downlink classification
  3. turbo53

    turbo53 Network Guru Member

    From the Tomato README file

  4. dankim831

    dankim831 Network Guru Member

    i know there is an option to classify downlink limits in 0.5 but i would there to be a range. basically for it to self adjust based on how much bandwidth is currently being used and then to guarantee a certain amount of bandwidth for downlink.

    i know the router has no control over what is sent to it but i think the fact that it just simulates a slower link for that classifcation by sending slower ACKS is enough for it to the job proerply. i think dd-wrt does this and it works really well. i'd rather have the router try to eventually slow down any thing thats saturating bandwidth using slow ACKS then for the router to sit there and do nothing.

    i'm pretty sure dd-wrt does this if i'm wrong then it would be cool if whatever teqnique was implemented as well. tomato has the BEST implementation of QOS i've ever seen and this would make it complete.

    again KEEP UP THE GREAT WORK! It's running better than anything before and it's still beta!
  5. dvaskelis

    dvaskelis Network Guru Member

    I'm not entirely sure I understand what feature you're looking for. You can:

    1. Set limits per class in the Tomato GUI for inbound QoS. It's at the bottom of the QoS: Basic Settings page.

    This includes limits up to 100% of bandwidth, which means that class can take up to your specified amount of downstream bandwidth except in the case where a higher class has priority over that bandwidth.

    2. Prioritize ACK packets for TCP connections. It's the second setting at the top of the QoS: Basic Settings page.

    Between the two, that's inbound QoS. That means if you configure inbound QoS, you can force bandwidth-trottling (i.e. the router dropping some lower priority inbound packets and prioritizing outbound ACKs) per class for some TCP-based applications. Not all applications work well when this happens, some have bandwidth drop way more than you expect because they work better in practice with robust connections, some will spike CPU usage if they really have to work hard with retries, and in practice with applications when it does work this needs some time to have the connection "settle down" as at first there's just a lot of unACKed dropped packets that cause resends making the problem worse. But that's why inbound QoS isn't terribly effective.

    What's in DD-WRT's QoS that's different from Tomato?
  6. dankim831

    dankim831 Network Guru Member

    I didn't realize thats how the inbound QOS worked in tomato. I was under the impression that tomato hard capped each classification to waht ever it is set at and didn't prioritize them.

    I guess the page didn't seem intuitive to me.

    however if it acts the same as dd-wrt then the extra work in throttling incoming data doesn't seem to bog the router down.

    thanks for clarifying that.

    but basically my understanding is that if i put 100% for all the classifications then Tomato will allow all the classifications UPTO 100% of the downstream bandwidth unless a higher class connection requires it.

    just another question, what does saying NONE do. does it just leave the downstream bandwidth as is (No QOS?)
  7. dvaskelis

    dvaskelis Network Guru Member

    Actually, I bet dropping a packet is probably a little less work for the router than actually putting it on another interface and routing it. :)

    However, the remote sending side of the TCP connection will be doing more work because of figuring out and dealing with resends, and the receiving side may do a little more work because of a higher chance of out-of-order windows.

    Be careful, sometimes this inbound QoS is actually counter-productive, in that the original dropped packets plus the potentially resent (also possibily dropped) packets result in a decrease in total bandwidth since the resends result in more data is being sent from the ISP to the router, leaving less bandwidth for the traffic you were trying to prioritize. That's why when it works, it only works once the connection has "settled down" but perhaps that's something that's tunable by playing with TCP window sizes?
  8. F157

    F157 LI Guru Member

    sorry, i know this thread is quite old, but i'm searching for answers to exactly those two questions...

  9. larsrya8

    larsrya8 LI Guru Member

    I am also looking for answers to those questions.
  10. pharma

    pharma Network Guru Member

    This might help and is from the Wiki:

    Hopefully you'll get a more direct answer, but the above should shed some light on limitations of inbound QOS.
  11. larsrya8

    larsrya8 LI Guru Member

    Yeah, I saw that. I was using DD-WRT's inbound QoS before, and I lost about 1 megabit of my 3 megabit downstream, so I switched to Tomato because of the "prioritize ACKs" option and regained all of my speed. However, I still have problems with lag when doing a full-speed download (like a Windows service pack) and running torrents, despite having my games at the highest priority and "large http" and torrents as lowest. I've tried all the options suggested in the other threads, but have not been successful. Of course, I still have the inbound limits all set to "None". I'm assuming that the download is delaying my incoming game data.

    Has anyone had success with the inbound limits? I know dropping packets is "inefficient", but TCP servers (hypothetically) slow connections when packets are dropped. Other than that, is there a better way to use ACKs to prioritize incoming traffic? Maybe those "legendary" OpenWRT nbd and rudy scripts? Because this current methodology is not working for me.
  12. GeeTek

    GeeTek Guest

    I have had superbly great luck with inbound QOS limitations. You need to set strict inbound limits on your lower classes, especially the torrent catching class and also on the "lowest" one that catches all left-over traffic on the high port numbers. Sometimes the torrent traffic is not recognized by the torrent filters. The upload speed is also very important. For torrents, it needs to be set to 15 or 20 kb. I have also found it helpful limit the total number of connections per IP. If you leave your torrent client set to it's default settings, it will do it's damndest to consume all of your bandwidth each way. There is a script in the wiki firewall section that you can copy and paste into your firewall to limit the connection count. Just change the IP range to match what you are using, and maybe reduce it down lower than the 125 limit that the example script is set for. 60 or 75 connections are usually very adequate for most internet browsing. I use a tomato box to control a commercial property with about 60 simultaneous users. I have 4 people running torrents 24/7. Browsing the internet is fast and lag free. I have a custom class for world of warcraft ports that is set to very high percentages, and WOW (which uses very little bandwidth) is snappy and plays great. With out QOS, the torrents alone completely prevent general internet activity, including game play.
  13. ne0b0rn

    ne0b0rn Network Guru Member

    Hey Guys,

    I have been using the Hyperwrt Thibor 15c for a long time with no problems, so now I have been attempting to setup Tomato correctly for my new needs. My order of prioritization is as follows:

    1. VOIP

    2. Browsing

    3. Torrents

    I would like to have my torrents as fast as possible all the time until I need to use the phone and have Tomato ( QOS ) kick down the torrents to low priority etc. Also would like Tomato to do this to the torrents when I need to browse the net.

    Please can you help give suggests on what to setup and how?

    Much love & thanks

  14. larsrya8

    larsrya8 LI Guru Member

    This is what I'm interested in. Because when people are not using the internet I want my torrents to be finishing as fast as possible, and when the Xboxes aren't in use I want the internet surfing to go as fast as possible. I know when I had DD-WRT running this would work, but everybody talks about how DD-WRT's QoS is broken, and my 33% loss of incoming bandwidth convinced me that something was wrong... HTB sort of worked, and HFSC didn't seem to restrict anything.

    Also, Azureus lets you restrict all traffic to one local port, which I have done and then classified that port as Lowest. I'm surprised that I've never seen this suggested before when dealing with bittorrent and QoS. It's remarkably easy and doesn't affect speed as far as I can tell. You also don't need to mess with L7 or IPP2P to get it to work. I guess this may only work for me because the 4 people I live with all want their P2P traffic limited in this way, so I have each of them on their own port.

    I also would not want to limit connections per client, since this would also (I'm assuming) include HTTP connections, which would really suck if Azureus was currently using all of the allotment. If you want to limit connections, there's an option in Azureus (I have it at 89 global, 63 per torrent).

    If I'm bored tomorrow I might try flashing WhiteRussian and seeing what kind of luck I have with qos-re.
  15. larsrya8

    larsrya8 LI Guru Member

    Is there any reason that having "Prioritize ACKs" unchecked would be a good idea? Does it only help keep the downstream going when the upstream is saturated? Or would unchecking it create the "delayed ACKs" effect to help slow down the inbound traffic (even if the upstream isn't saturated)?

    Also, if I set all of my inbound limits to 100%, would each service then go at full speed unless a service above it needed bandwidth?
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice