[OpenWrt-Devel] [RFC PATCH] packages: Smart Queue Management for AQM Packet Scheduling and Qos from CeroWrt

Weedy weedy2887 at gmail.com
Wed Oct 1 12:10:46 EDT 2014


On 30/03/14 06:29 PM, Dave Taht wrote:
> On Sun, Mar 30, 2014 at 02:24:44PM -0400, Weedy wrote:
>> On Sat, Mar 29, 2014 at 2:56 PM, Dave Täht <dave.taht at bufferbloat.net>wrote:
>>
>>> From: Dave Taht <dave.taht at bufferbloat.net>
>>>
>>> This adds support for the bufferbloat project's "Smart Queue Management"
>>> (SQM) system, which improves over openwrt's qos-scripts in the following
>>> ways
>>>
>>> + Uses HTB with two models for managing traffic
>>>   a simplest one that merely uses fq_codel, and a three tier one that does
>>>   some basic and tunable packet prioritization.
>>>
>>> + Works with ipv6 and ipv4 correctly (unlike qos-scripts)
>>> + extensive support for fixing ADSL and PPOe framing problems
>>> + Partial support for key diffserv markings
>>> + highly tuned fq_codel implementation especially for low bandwidths
>>> + Tested heavily on cable modems and on dsl devices
>>>
>>> It is a disimprovement in that:
>>>
>>> - There are no built-in tricks for doing l7 classification,
>>> or other forms of packet inspection.
>>>
>>> - We haven't explored hfsc all that much, prefering to rely
>>> on the predictable behavior of htb + fq_codel for everything
>>>
>>> - And there is support for a few qdiscs that are not in the linux
>>> kernel mainline that remain experimental.
>>> ---
>>>  net/sqm-scripts/Makefile                           |   48 +++
>>>  net/sqm-scripts/files/etc/config/sqm               |   11 +
>>>  net/sqm-scripts/files/etc/init.d/sqm               |   23 ++
>>>  net/sqm-scripts/files/usr/lib/sqm/functions.sh     |  335
>>> ++++++++++++++++++++
>>>  net/sqm-scripts/files/usr/lib/sqm/run.sh           |   67 ++++
>>>  net/sqm-scripts/files/usr/lib/sqm/simple.qos       |  187 +++++++++++
>>>  net/sqm-scripts/files/usr/lib/sqm/simple.qos.help  |    1 +
>>>  net/sqm-scripts/files/usr/lib/sqm/simplest.qos     |   84 +++++
>>>  .../files/usr/lib/sqm/simplest.qos.help            |    1 +
>>>  net/sqm-scripts/files/usr/lib/sqm/stop.sh          |   22 ++
>>>  10 files changed, 779 insertions(+)
>>>  create mode 100644 net/sqm-scripts/Makefile
>>>  create mode 100644 net/sqm-scripts/files/etc/config/sqm
>>>  create mode 100755 net/sqm-scripts/files/etc/init.d/sqm
>>>  create mode 100644 net/sqm-scripts/files/usr/lib/sqm/functions.sh
>>>  create mode 100755 net/sqm-scripts/files/usr/lib/sqm/run.sh
>>>  create mode 100755 net/sqm-scripts/files/usr/lib/sqm/simple.qos
>>>  create mode 100644 net/sqm-scripts/files/usr/lib/sqm/simple.qos.help
>>>  create mode 100755 net/sqm-scripts/files/usr/lib/sqm/simplest.qos
>>>  create mode 100644 net/sqm-scripts/files/usr/lib/sqm/simplest.qos.help
>>>  create mode 100755 net/sqm-scripts/files/usr/lib/sqm/stop.sh
>>>
>>> diff --git a/net/sqm-scripts/files/etc/config/sqm
>>> b/net/sqm-scripts/files/etc/config/sqm
>>> new file mode 100644
>>> index 0000000..547d321
>>> --- /dev/null
>>> +++ b/net/sqm-scripts/files/etc/config/sqm
>>> @@ -0,0 +1,11 @@
>>> +
>>> +config queue 'ge00'
>>> +        option enabled '0'
>>> +        option interface 'ge00'
>>> +        option download '20000'
>>> +        option upload '4000'
>>> +        option qdisc 'fq_codel'
>>> +        option script 'simple.qos'
>>> +        option qdisc_advanced '0'
>>> +        option linklayer 'none'
>>> +
>>>
>>
>> How hard is this to config from the command line/vim?
> 
> There are a few more options than this (for DSL compensation, ecn
> and advanced configuration), the above would work if you changed
> enabled to '1' and the device from ge00 to your wan device. (not
> the "wan" firewall rule, presently. )
> 
> It does help to have a sane long term and realistic measurement of your
> network using something like the rrul test rather than the oft-gamed speedtest.
> 
> http://www.bufferbloat.net/projects/cerowrt/wiki/Setting_up_SQM_for_CeroWrt_310
> 
> You are right, we should fully document all the variables in this file.
> Until recently they were kind of in flux.
> 
>> I've never needed or really wanted luci on my box, I just use vim. Going by
>> this patch, there is either nothing to config or no examples. I would think
>> shipping a roughly equivalent config to what ships in qos-scripts would be
>> a good start to get people testing.
> 
> /etc/init.d/sqm start,stop etc work as expected.
> 
>> IE: highest priority: small ARP, DNS, and SSH packets
> 
> The SQM default is local DNS and ntp. fq_codel automagically optimizes
> for other sparse flows like arp, ssh, mosh, tcp syn, synack, etc,
> no need to do that via classification.
> 
>> normal: HTTP, HTTPS
> 
> So you want to deprioritize vpn, smtp, rsync, dropbox, http on odd ports,
> caching servers, etc, all in favor of the web gods?
> 
> we just toss all that into the normal (best effort bin) and let fq_codel
> sort it out.
> 
>> bulk: everything else.
> 
> We do respect the diffserv marking of CS1 (background) and toss it
> into the background queue.
> 
>> Side note: Will SQM do bandwidth slicing? Or at least handle "hostile"
>> environments better? I say "hostile" as in roommates or maybe teenage kids.
>> Multiple people/devices thinking they are entitled to the entire WAN
>> bandwidth at all times.
> 
> fq_codel does fair (well, we call it "flow") queuing.
> 
> https://tools.ietf.org/html/draft-hoeiland-joergensen-aqm-fq-codel-00
> 
> And manages the depth of flows via codel.
> 
> http://tools.ietf.org/html/draft-nichols-tsvwg-codel-02
> 
> In other words, it will be fair to all fat flows generated by everyone,
> and slice flows down to the defined quantum and turn them back into
> packets.
> 
> The "simplest.qos" model in SQM works remarkably well without trying to 
> classify anything at all. I encourage people to try merely that and have
> their preconceptions altered. 
> 
> The three-tier model (simple.qos), is more like what people think they want,
> but the default is set to the bare minimum of what worked well in testing.
> 
> Example: a lot of flows are marked CS1 that shouldn't be, and starving
> that queue to like 5% rather than it's current 30% turned out badly. 
> 
> In terms of identifying and "punishing" abusers, well, the only thing
> that stresses this code out even the slightest is dozens of torrent flows.
> 
> Give it a shot. :)
> 
I feel like this died.
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list