Differences

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

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}}
- 

Back to top

doc/uci/qos.1353977892.txt.bz2 · Last modified: 2012/11/27 01:58 by nilfred