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
Next revisionBoth sides next revision
docs:guide-user:network:traffic-shaping:sqm [2023/06/22 09:12] – Add info about A+ score, that requires disable HW and SW offload; add alternative link for Cloudflare speedtest dpawlikdocs:guide-user:network:traffic-shaping:sqm [2024/05/10 14:52] – remove a dead link, and small language tweaks palebloodsky
Line 1: Line 1:
 ====== SQM (Smart Queue Management) ====== ====== SQM (Smart Queue Management) ======
  
-OpenWrt has a package called SQM used for mitigating [[wp>bufferbloat]] the undesirable latency that arises when the router buffers too much data.+OpenWrt has a package called SQM for mitigating [[wp>bufferbloat]]the undesirable latency that arises when your router buffers too much data.
  
-Bufferbloat is most evident when the link is heavily loaded with downloads or uploads, and causes increased latency, or ping. It causes poor performance for VoIP and video chat, online games to lag, and generally makes people say, "the Internet is not responsive." This lag is mitigated using SQM and a small trade-off to peak throughput.+Install ''[[:packages:pkgdata:luci-app-sqm|luci-app-sqm]]'' (or ''[[:packages:pkgdata:sqm-scripts|sqm-scripts]]'' if you don't use LuCI) and read below.
  
-SQM is heavily CPU-based. Slower devices may not be able to [[https://forum.openwrt.org/t/so-you-have-500mbps-1gbps-fiber-and-need-a-router-read-this-first/90305|keep up]] with your connection speed.+===== Overview =====
  
-Install and enable the ''[[:packages:pkgdata:luci-app-sqm|luci-app-sqm]]'' package (or ''[[:packages:pkgdata:sqm-scripts|sqm-scripts]]'' if you don't use LuCIto mitigate this bufferbloat.+Bufferbloat is most evident when a connection is heavily loaded with downloads or uploads. It causes increased latency (ping), resulting in poor performance for realtime apps like VoIP, video chat, lag in online games, and generally makes the internet feel unresponsive. This can be mitigated with SQM.
  
-See also: [[:docs:guide-user:network:traffic-shaping:sqm_configuration|SQM configuration file]].+SQM is an integrated system that performs per-packet/per-flow network scheduling, active queue management (AQM), traffic shaping, rate limiting, and QoS prioritization. In comparison, “classic” AQM only manages queue length and “classic” QoS only does prioritization. 
 + 
 +SQM is heavily CPU dependent. Slower devices may not be able to [[https://forum.openwrt.org/t/so-you-have-500mbps-1gbps-fiber-and-need-a-router-read-this-first/90305|keep up]] with your connection speed. 
 + 
 +SQM is incompatible with software/hardware [[https://www.redhat.com/en/blog/should-i-offload-my-networking-hardware-look-hardware-offloading|flow offloading]] which bypasses part of the network stack. Be sure to uncheck those features in LuCI -> Firewall to use SQM.
  
 ===== Preparation: Measure Your Current Speed and Latency ===== ===== Preparation: Measure Your Current Speed and Latency =====
  
-Before you can optimize your network, you need to know its current state. When your network is quiet, run a speed test to find your down/upload link speeds: +Before you can optimize your network, you need to know its current state. When your internet is quiet, run a speed test to find your peak download/upload speeds: 
-  * Run the [[http://www.dslreports.com/speedtest|DSLreports Speedtest]]. You will use this information in configuration. (Optional: consider [[https://forum.openwrt.org/t/sqm-qos-recommended-settings-for-the-dslreports-speedtest-bufferbloat-testing/2803|Recommended Settings Guide]] to get the most out of the DSLReports.) +  * Run a speed test from [[https://www.waveform.com/tools/bufferbloat|Waveform]] or [[https://speedtest.net|Speedtest]]. Both display the latency during download and upload traffic, and grade your existing bufferbloat
-  * An alternative to the DSLReports is [[https://www.waveform.com/tools/bufferbloat|Waveform's Bufferbloat Test]]. (The biggest relevant difference between WaveForm and DSLReports is that Waveform uses HTTP requests over WebSockets and CloudFlare's CDN which should be closer to most end-users.+  * If you are using this OpenWrt device as an [[docs:guide-user:network:wifi:relay_configuration|Extender, Repeateror Bridge]], test your upstream router (OpenWrt or otherwise) and determine if an issue is present there first.
-  * Another alternative to the DSLReports and Waveform's Bufferbloat Test is [[https://speed.cloudflare.com/|CloudFlare speed test]] +
-  * If you are using this OpenWrt device as an [[docs:guide-user:network:wifi:relay_configuration|Extender, Repeater or Bridge]], test the bufferbloat of your upstream network device (OpenWrt or otherwise) and determine if an issue is present there first.+
  
-===== Configuring SQM =====+===== Configuration =====
  
-To enable and configure SQM in LuCI go to **Network -> SQM QoS**. The default values will work well, however you can improve performance further by setting values specific to your internet connection described below:+In LuCI go to **Network -> SQM QoS**. The default settings will work, however you can improve performance with settings specific to your internet connection as described below:
  
   - In the **Basic Settings** tab:   - In the **Basic Settings** tab:
     * Check the **Enable** box     * Check the **Enable** box
-    * Set the **Interface name** to your wide area network (WAN) link. Interfaces are listed in the dropdown, or check **Network -> Interfaces** to find the name for the WAN port. +    * Set the **Interface name** to your internet (WAN) link. Interfaces are listed in the dropdown, or check **Network -> Interfaces** to find the WAN port. 
-    * Set the **Download** and **Upload** speeds to 85-95% of the speed you measured in Preparation+    * Set the **Download** and **Upload** speeds to 90% of what you measured in Preparation
   - In the **Queue Discipline** tab:   - In the **Queue Discipline** tab:
     * Choose //cake// as the Queueing Discipline (or //fq_codel//, consider [[:docs:guide-user:network:traffic-shaping:sqm#a_little_more_sqm_tuning|note 2]])     * Choose //cake// as the Queueing Discipline (or //fq_codel//, consider [[:docs:guide-user:network:traffic-shaping:sqm#a_little_more_sqm_tuning|note 2]])
Line 32: Line 34:
     * Advanced Configuration may be left unchecked     * Advanced Configuration may be left unchecked
   - In the **Link Layer Adaptation** tab, select your link type (optional: set mpu see [[:docs:guide-user:network:traffic-shaping:sqm#a_little_more_sqm_tuning|note 3]]):   - In the **Link Layer Adaptation** tab, select your link type (optional: set mpu see [[:docs:guide-user:network:traffic-shaping:sqm#a_little_more_sqm_tuning|note 3]]):
-    * //For VDSL// - Choose **Ethernet**, and set overhead 34 (or 26 if you know you are not using PPPoE) (mpu 68). If the access link uses 100Mbps ethernet, set overhead 42 (mpu 84). +    * //For VDSL// - Choose **Ethernet**, and set overhead 34 (or 26 if you're not using PPPoE) (mpu 68). If the link uses 100 Mbps ethernet, set overhead 42 (mpu 84). 
-    * //For DSL of any other type// - Choose **ATM**, and set overhead 44 (mpu 96) +    * //For DSL of any other type// - Choose **ATM**, and set overhead 44 (mpu 96). 
-    * //For DOCSIS Cable// - Choose **Ethernet**, and set overhead 22 (mpu 64). If you set the shaper rate to > 760 Mbps, set overhead 42 (mpu 84), because now 1 Gbps ethernet between modem and router affects the worst-case per-packet-overhead. +    * //For DOCSIS Cable// - Choose **Ethernet**, and set overhead 22 (mpu 64). For rates > 760 Mbps, set overhead 42 (mpu 84), because 1 Gbps ethernet between modem and router affects the worst-case per-packet-overhead. 
-    * //For Ethernet or Fiber to the premises// - Choose **Ethernet**, and set overhead 44 (mpu 84) +    * //For Ethernet or Fiber// - Choose **Ethernet**, and set overhead 44 (mpu 84). 
-    * //If unsure, it's better to overestimate// - Choose overhead 44 (mpu 96) +    * //If unsure, it's better to overestimate// - Choose overhead 44 (mpu 96). 
-  - Click **Save & Apply**. That's it!+  - Click **Save & Apply**.
  
-You can confirm mitigation of bufferbloat by re-running the speedtest. Any increased ping during download/uploads will now be minimal.+That's it! You can confirm mitigation of bufferbloat by re-running the speedtest. Any increased ping during download/uploads will now be minimal.
  
 ===== Results ===== ===== Results =====
  
-As an example, the user below is running OpenWrt with kernel 5.15 on a [[toh:linksys:wrt_ac_series|WRT32X]] router. The internet is a DOCSIS 3.0 cable modem with 300/20 Mbit service. Note this ISP is including ~15% over-provisioning on downloadsSpeedtests were run before and after enabling SQM. SQM Cake was enabled with 90% dl/ul limits of baseline speedtest values. Increased latency under load has dropped to zero, and lower pings with no packet loss is observed during VoIP and online gaming during heavy internet usage on the network+As an example, the user below is running OpenWrt 23.05 on a [[toh:linksys:wrt_ac_series|WRT32X]] router. The internet connection is a DOCSIS cable modem with 500/35 Mbit service. Note this ISP includes over-provisioning. Cake was selected with 90% dl/ul limits on baseline speedtest values. Latency increase under load dropped to zero, lower ping with no packet loss is observed during VoIP and online gaming during heavy internet usage. Speedtests results with and without SQM: 
-[[https://www.waveform.com/tools/bufferbloat?test-id=b9a07603-96d2-4d05-bf6b-f3495e372136|Link to user's speedtest results.]]+ 
 +[[https://www.waveform.com/tools/bufferbloat?test-id=e101a8fc-f017-4eef-8f90-b27bcb783d62|User's speedtest results with SQM.]]
  
- <color #007DFA>Bufferbloat Results (before and after SQM)</color>                                                                                                         |||||||| +  Speedtest Results   ^^^^^^^^ 
-^ QoS                                                                 ^ Download    ^ Upload     Unloaded Ping  DL Latency  UL Latency  Quality grade  Bufferbloat grade  ^ +QoS  Download  Upload   | Unloaded Ping DL Latency UL Latency Quality grade Bufferbloat grade | 
-^  None                                                                345 Mbits   20 Mbits  |  12 ms          +22 ms      +31 ms      B              B                 | +None | 532 Mbits | 37 Mbits |  12 ms        | +18 ms     | +38 ms     | B             | B                 | 
- SQM                                                                 312 Mbits   18 Mbits  |  12 ms          +0 ms      |  +0 ms      |  A+            |  A+                |+| SQM  495 Mbits | 28 Mbits |  12 ms        | +0 ms      | +0 ms      | A+            | A +               |
  
-===== A Little More SQM Tuning  =====+===== A Little More Tuning  =====
  
-1. The steps above will handle latency well with 85-95% limits being a great starting point. But you can often improve speed and latency further via a couple experiments to adjust the settings with these steps:+1. The steps above will handle latency well, but you may improve this further via adjusting the dl/ul limits and with these steps:
  
   * Increase the Download speed limit and retest until latency begins to increase, then go back to a slightly lower value.   * Increase the Download speed limit and retest until latency begins to increase, then go back to a slightly lower value.
   * Repeat the same for the Upload speed.   * Repeat the same for the Upload speed.
-  * Use [[http://dslreports.com/speedtest|DSLReports Speedtest]] and/or [[https://speed.cloudflare.com/|CloudFlare speed test]] and/or [[https://www.waveform.com/tools/bufferbloat|Waveform's Blufferbloat test]] to achieve A+ quality and A+ bufferbloat grades when the optimal settings are found. +  * Use [[https://www.waveform.com/tools/bufferbloat|Waveform]] speedtest to achieve A+ quality and A+ bufferbloat grades when optimal settings are found. 
-  +  * For DSL, the experiments above may produce download/upload values that are actually //higher// than the original speed test. This is ok, the ATM framing bytes of a DSL link add an average of 9% overhead, and these settings tell SQM how to make up for that overhead. 
-  * For DSL, the experiments above may produce Download and Upload values that are actually //higher// than the original speed test results. This is ok, the ATM framing bytes of a DSL link add an average of 9% overhead, and these settings simply tell SQM how to make up for that overhead. +  * For DOCSIS cable, some providers trick speed tests by adding 10-15% over-provisioning for the first 10 seconds (so speed tests look better!).
-  * For DOCSIS cable, use a speed test that runs for a longer time. Some cable providers trick speed tests by adding an extra 10-15% over-provisioning only for the first 10 seconds (so speed tests look better!).+
  
-2. Cake is often the [[https://www.bufferbloat.net/projects/codel/wiki/Cake/|preferred algorithm]] as it is robust and efficient in mitigating bufferbloat. However, the consensus is that while cake bundles many features for typical internet access link, fq_codel is the faster, albeit less comprehensive option. One user found [[https://forum.openwrt.org/t/netgear-r6220-sqm-results-downstream-cut-in-half-and-my-optimal-settings/114301|fq_codel gave about 15% higher throughput when CPU limited]] and this [[https://lists.bufferbloat.net/pipermail/cake/2018-April/003384.html|email thread showed similar results]].+2. Cake is the [[https://www.bufferbloat.net/projects/codel/wiki/Cake/|preferred algorithm]] as it is excellent at mitigating bufferbloat. However, Fq_codel is often a faster, albeit less comprehensive option. One user found [[https://forum.openwrt.org/t/netgear-r6220-sqm-results-downstream-cut-in-half-and-my-optimal-settings/114301|fq_codel gave about 15% higher throughput when CPU limited]] and this [[https://lists.bufferbloat.net/pipermail/cake/2018-April/003384.html|email thread showed similar results]].
  
-3. To set your link **mpu** (read [[docs:guide-user:network:traffic-shaping:sqm-details|SQM Details]] and [[https://forum.openwrt.org/t/sqm-setting-question-link-layer-adaptation/2514/9|SQM setting question]]) for efficiency improvements. Setting mpu will ensure rate shaping is correct for the smallest packets.+3. To set your link **mpu** (read [[docs:guide-user:network:traffic-shaping:sqm-details|SQM Details]] and [[https://forum.openwrt.org/t/sqm-setting-question-link-layer-adaptation/2514/9|SQM setting question]]) for efficiency improvements. Setting mpu will ensure rate shaping is correct for small packets.
  
-4. Check the [[docs:guide-user:network:traffic-shaping:sqm-details#faq|FAQ]] and [[docs:guide-user:network:traffic-shaping:sqm-details#troubleshooting_sqm|Troubleshooting SQM]] guides for more information.+4. Check the [[docs:guide-user:network:traffic-shaping:sqm-details#faq|FAQ]] and [[docs:guide-user:network:traffic-shaping:sqm-details#troubleshooting_sqm|Troubleshooting SQM]] guides for more information. See also: [[:docs:guide-user:network:traffic-shaping:sqm_configuration|SQM configuration]] for advanced options.
  
-5. Consider Cake tuning parameters on the man page: [[https://man7.org/linux/man-pages/man8/tc-cake.8.html]]+5. Consider Cake tuning parameters: [[https://man7.org/linux/man-pages/man8/tc-cake.8.html]]
  
-6. To reach A+ score in [[https://www.waveform.com/tools/bufferbloat|Waveform's Blufferbloat test]], it is **required** to disable Software and Hardware Offload - read [[https://forum.openwrt.org/t/sqm-and-non-sqm-queue-issues-lan-vs-wlan/15433/10| post]]+6. To use SQM it is necessary to disable hardware flow offloading as per [[https://forum.openwrt.org/t/sqm-and-non-sqm-queue-issues-lan-vs-wlan/15433/10|this post]].
  • Last modified: 2024/11/07 18:49
  • by palebloodsky