User Tools

Site Tools


doc:uci:qos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:uci:qos [2012/11/27 01:58]
nilfred Add Tags
doc:uci:qos [2014/10/07 04:11] (current)
projectgus Add some troubleshooting tips
Line 2: Line 2:
 This is the documentation for the UCI configuration file ''/​etc/​config/​qos''​. It is used by the package ''​qos-scripts''​ only. This is the documentation for the UCI configuration file ''/​etc/​config/​qos''​. It is used by the package ''​qos-scripts''​ only.
  
-| {{:​meta:​icons:​tango:​48px-emblem-important.svg.png?​nolink}} | Do NOT install multiple QoS-packages simultaneously! Uninstall the old package before installing a new one. \\ There are at least two other QoS/ToS packages in the OpenWrt repositories regarding: ''​[[https://​dev.openwrt.org/​browser/​packages/​net/​dsl-qos-queue|dsl-qos-queue]]''​ and ''​[[https://​dev.openwrt.org/​browser/​packages/​net/​wshaper|wshaper]]''​. They do NOT use this file.\\ \\ ''​dsl-qos-queue''​ does factor in the [[wp>​Asynchronous Transfer Mode|ATM (Asynchronous Transfer Mode)]] overhead, which can be significant. |+| {{:​meta:​icons:​tango:​48px-emblem-important.svg.png?​nolink}} | Do NOT install multiple QoS-packages simultaneously! Uninstall the old package before installing a new one. \\ There are at least two other QoS/ToS packages in the OpenWrt repositories regarding: ''​[[https://​dev.openwrt.org/​browser/​packages/​net/​dsl-qos-queue|dsl-qos-queue]]''​ and ''​[[https://​dev.openwrt.org/​browser/​packages/​net/​wshaper|wshaper]]''​. They do NOT use this file.\\ ​\\ ''​qos-scripts''​ is written in AWK/shell script and uses [[doc/​howto/​packet.scheduler/​sch_hfsc]] and [[doc/​howto/​packet.scheduler/​sch_fq_codel]]\\ ''​dsl-qos-queue''​ does factor in the [[wp>​Asynchronous Transfer Mode|ATM (Asynchronous Transfer Mode)]] overhead, which can be significant. Removed in [[https://​dev.openwrt.org/​changeset/​37494|r37494]]\\ ''​wshaper''​ is and uses [[doc/​howto/​packet.scheduler/​sch_sfq]] [[doc/​howto/​packet.scheduler/​sch_htb]] [[doc/​howto/​packet.scheduler/​act_police]];​ [[http://​lartc.org/​wondershaper/​]] ​ \\ \\ For help writing your own script please see [[doc:​howto:​packet.scheduler:​packet.scheduler|Traffic Control on OpenWrt: configuring the Linux Network Scheduler]]. |
  
-| {{:​meta:​icons:​tango:​dialog-information.png?​nolink}} | You can browse the scripts here: ''​[[https://​dev.openwrt.org/​browser/​trunk/​package/​qos-scripts|qos-scripts]]''​\\ There is direct LuCI-support for ''​qos-scripts''​ called: ''​luci-app-qos''​.\\ NOTE: ''​luci-app-qos''​ won't start until you enable the ''​qos''​ Initscript within the System-->​Startup tab as well as enable qos under Network-->​QoS |+| {{:​meta:​icons:​tango:​dialog-information.png?​nolink}} | You can browse the scripts here: ''​[[https://​dev.openwrt.org/​browser/​trunk/​package/​network/​config/​qos-scripts|qos-scripts]]''​\\ There is direct LuCI-support for ''​qos-scripts''​ called: ''​luci-app-qos''​.\\ NOTE: ''​luci-app-qos''​ won't start until you enable the ''​qos''​ Initscript within the System-->​Startup tab as well as enable qos under Network-->​QoS |
  
-| {{:​meta:​icons:​tango:​dialog-information.png?​nolink}} | For help writing your own script please see [[doc:​howto:​packet.scheduler:​Traffic Control]]. | 
  
 | {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}} | As of [[https://​dev.openwrt.org/​changeset/​25641/​trunk|r25641]] ''​qos-scripts''​ dropped the use of IMQ (package ''​iptables-mod-imq''​ – Intermediate Queueing Device). Its successor is [[http://​www.linuxfoundation.org/​collaborate/​workgroups/​networking/​ifb|IFB (Intermediate Functional Block device)]], (requires package: ''​kmod-ifb''​ and the scheduler action //​[[https://​dev.openwrt.org/​browser/​trunk/​package/​iproute2/​patches/​200-act_connmark.patch?​rev=25639|act_connmark]]//​ included). ​ | | {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}} | As of [[https://​dev.openwrt.org/​changeset/​25641/​trunk|r25641]] ''​qos-scripts''​ dropped the use of IMQ (package ''​iptables-mod-imq''​ – Intermediate Queueing Device). Its successor is [[http://​www.linuxfoundation.org/​collaborate/​workgroups/​networking/​ifb|IFB (Intermediate Functional Block device)]], (requires package: ''​kmod-ifb''​ and the scheduler action //​[[https://​dev.openwrt.org/​browser/​trunk/​package/​iproute2/​patches/​200-act_connmark.patch?​rev=25639|act_connmark]]//​ included). ​ |
  
 | {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}} | As of [[https://​dev.openwrt.org/​changeset/​31759|r31759]] ''​qos-scripts''​ replaced sfq/red with fq_codel to massively improve latency under load  | | {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}} | As of [[https://​dev.openwrt.org/​changeset/​31759|r31759]] ''​qos-scripts''​ replaced sfq/red with fq_codel to massively improve latency under load  |
- 
  
  
Line 60: Line 58:
 | ''​dscp''​ | string | no | //(none)// | Packets matching this, belong to the bucket defined in target | | ''​dscp''​ | string | no | //(none)// | Packets matching this, belong to the bucket defined in target |
 | ''​direction''​ | string | no | //(none)// | Packets matching this traffic direction (''​in''​ or ''​out''​) belong to the bucket defined in target | | ''​direction''​ | string | no | //(none)// | Packets matching this traffic direction (''​in''​ or ''​out''​) belong to the bucket defined in target |
- 
  
 ==== Classgroup ==== ==== Classgroup ====
Line 81: Line 78:
 | ''​maxsize''​ | integer | yes | //(none)// | in bytes | | ''​maxsize''​ | integer | yes | //(none)// | in bytes |
 | ''​priority''​ | integer | yes | //(none)// | in % | | ''​priority''​ | integer | yes | //(none)// | in % |
 +
 +==== Classes (For Advanced Users) ====
 +Below is unverified technical breakdown of each /​etc/​config/​qos claass parameters. Source: [[http://​pastebin.com/​YL55na2E]]
 +<​code>​
 +### Params:
 +#
 +# maxsize:
 +#       ​limits packet size in iptables rule
 +#
 +# avgrate: (note: sum(avgrates) ~ 100)
 +#       rt m1 = avgrate / sum (avgrate) * max_bandwidth
 +#       rt m2 = avgrate * max_bandwidth / 100
 +#       ls m1 = rt m1
 +#
 +# packetsize & packetdelay:​ (only works if avgrate is present)
 +#       rt d = max( packetdelay,​ 'time required for packetsize to transfer'​ ) (smaller ps -> smaller d)
 +#       ls d = rt d
 +#
 +# priority:
 +#       ls m2 = priority / sum (priority) * max_bandwidth
 +#
 +# limitrate:
 +#       ul rate = limitrate * max_bandwidth / 100
 +</​code>​
  
 ===== Quick start guide ===== ===== Quick start guide =====
Line 95: Line 116:
 uci set qos.wan.upload=1000 ​           # Upload speed in kBits/s uci set qos.wan.upload=1000 ​           # Upload speed in kBits/s
 uci set qos.wan.download=16000 ​        # Download speed in kBits/s uci set qos.wan.download=16000 ​        # Download speed in kBits/s
 +uci set qos.wan.enabled=1
 uci commit qos</​code>​ uci commit qos</​code>​
  
Line 108: Line 130:
 /​etc/​init.d/​qos enable /​etc/​init.d/​qos enable
 </​code>​ </​code>​
 +
 +===== Troubleshooting =====
 +
 +(Last updated for: Barrier Breaker 14.07)
 +
 +If your QoS doesn'​t seem to be working, it may be an error or typo in the config file is preventing it from loading properly.
 +
 +  * Check //enabled// is set to 1 in ///​etc/​config/​qos//​(!)
 +
 +  * Run //​iptables-save//​ and check there are lines near the top prefixed with either //-A qos_Default//​ or //-A qos_Default_ct//,​ and featuring the //​--set-xmark//​ directive. Here's an example:
 +<​code>​
 +-A qos_Default -p tcp -m mark --mark 0x0/0xf0 -m tcp --sport 1024:65535 --dport 1024:65535 -j MARK --set-xmark 0x44/0xff
 +</​code>​
 +The //​--set-xmark//​ is what flags the packet so it is picked up the traffic control subsystem.
 +
 +  * Look at the generated traffic control qdisc settings by running:
 +
 +<​code>​
 +tc qdisc
 +</​code>​
 +
 +The default (ie no-QoS-applied) values for any interface look like this:
 +
 +<​code>​
 +qdisc fq_codel 0: dev eth0 root refcnt 2 limit 1024p flows 1024 quantum 300 target 5.0ms interval 100.0ms ecn
 +</​code>​
 +
 +... Any interface with only a single qdisc line printed, showing the same settings as this line (this one is for //dev eth0//), indicates no QoS on that interface.
 +
 +Network interfaces with QoS enabled will have multiple qdisc lines printed, each corresponding to a QoS class, etc.
 +
 +  * If the printed qdisc settings don't seem to be correct, you can preview the //tc// commands generated from the OpenWRT ///​etc/​config/​qos//​ by running:
 +
 +<​code>​
 +/​usr/​lib/​qos/​generate.sh interface wan
 +</​code>​
 +
 +(Replace '​wan'​ with the OpenWRT interface name you're debugging, as given in the ///​etc/​config/​qos//​ file.)
 +
 +This should print a series of //insmod// and //tc// commands used to set up the QoS subsystem. You can debug any errors caused by running these commands by running:
 +
 +<​code>​
 +/​usr/​lib/​qos/​generate.sh interface wan | sh -x
 +</​code>​
 +
 +(Note //-x// option which tells //sh// to print each line as it is executed.)
 +
 +The output of ///​usr/​lib/​qos/​generate.sh//​ is normally executed automatically as part of ///​etc/​hotplug.d/​iface/​10-qos//​.
  
 ===== txqueuelen ===== ===== txqueuelen =====
Line 134: Line 204:
 ===== Tags ===== ===== Tags =====
 {{tag>​QoS}} {{tag>​QoS}}
- 
doc/uci/qos.1353977892.txt.bz2 · Last modified: 2012/11/27 01:58 by nilfred