the state of the art in bufferbloat testing and reduction
play

The State of the Art in Bufferbloat Testing and Reduction on Linux - PowerPoint PPT Presentation

The State of the Art in Bufferbloat Testing and Reduction on Linux Toke Hiland-Jrgensen Roskilde University IETF 86, 12th March 2013 1 / 31 Outline Introduction Recent changes in the Linux kernel Testing methodology and best practices


  1. The State of the Art in Bufferbloat Testing and Reduction on Linux Toke Høiland-Jørgensen Roskilde University IETF 86, 12th March 2013 1 / 31

  2. Outline Introduction Recent changes in the Linux kernel Testing methodology and best practices Test results 2 / 31

  3. Introduction 3 / 31

  4. Spoiler . Effects of bufferbloat mitigation - RRUL test . Latency during four TCP streams in each direction. 1.0 Ping (ms) - fq_codel qdisc Ping (ms) - sfq qdisc Ping (ms) - codel qdisc You could Ping (ms) - pfifo_fast qdisc be here 0.8 Cumulative probability 0.6 0.4 You are here 0.2 0.0 10 1 10 2 10 3 ms Note the log scale. . 4 / 31

  5. The research behind this ▶ Experiments done as part of university project. ▶ Three computers networked in lab setup. ▶ Switch the active qdisc and compare results. ▶ Goal: Real-world measurements on shipped Linux kernel. . Test setup . Test client Test server . 100 mbit ethernet 10 mbit ethernet 5 / 31

  6. Recent changes in the Linux kernel 6 / 31

  7. Byte Queue Limits (BQL) ▶ Introduced in Linux 3.3, by Tom Herbert of Google. ▶ Sits between traffic control subsystem and device drivers. ▶ Requires driver support (ongoing effort). ▶ Keeps track of number of bytes queued in the driver. ▶ Addresses variability of packet sizes (64 bytes up to 4KiB w/TSO). ▶ Unneeded in the presence of software rate limiting. 7 / 31

  8. TCP Small Queues (TSQ) ▶ Introduced in Linux 3.6 by Eric Dumazet. ▶ Enhancement to the TCP stack (i.e. above the traffic control layer). ▶ Makes the TCP stack aware of when packets leave the system. ▶ Sets a configurable limit (default 128KiB) of bytes in transit in lower layers. ▶ After this limit, keeps the packets at the TCP layer. ▶ This allows for more timely feedback to the TCP stack. 8 / 31

  9. New queueing disciplines ▶ Straight CoDel implementation in the codel qdisc. ▶ Enhancements to the Stochastic Fairness Queueing ( sfq ) qdisc. ▶ Optional head drop, more hash buckets, no permutation. ▶ Combination of CoDel and DRR fairness queueing in the fq_codel qdisc. ▶ Prioritises thin flows. ▶ This is currently the best bufferbloat mitigation qdisc in mainline Linux. 9 / 31

  10. Testing methodology and best practices 10 / 31

  11. Testing methodology ▶ Basically: Load up the bottleneck link, measure latency. ▶ Useful tools: netperf , iperf , ping , fping . ▶ Use mtr to locate bottleneck hop. ▶ Or use netperf-wrapper to automate tests! 11 / 31

  12. The netperf-wrapper testing tool ▶ Python wrapper to benchmarking tools (mostly netperf ). ▶ Runs concurrent tool instances, aggregates the results. ▶ Output and intermediate storage is JSON. ▶ Exports to CSV. ▶ Graphing through python matplotlib . ▶ Tests specified through configuration files (in Python). ▶ Common tests included (such as RRUL). ▶ Developed and tested on Linux. ▶ One or two issues on FreeBSD (WiP). ▶ Install: pip install netperf-wrapper . Netperf 2.6+. 12 / 31

  13. The RRUL test ▶ Runs four concurrent TCP streams in each direction. ▶ Each stream with different diffserv marking. ▶ Simultaneously measures UDP and ICMP ping times. ▶ Supports IPv4 and IPv6. ▶ Variants that measure v4 vs v6 and RTT fairness. ▶ The four streams pretty reliably loads any link to capacity. ▶ This is a simple and effective way of finding bufferbloat. ▶ netperf-wrapper -H <test server> rrul ▶ Works well as a backdrop for testing other stuff. ▶ The Chrome benchmark works well for websites. 13 / 31

  14. Best configuration practices ▶ Disable offloads (esp. TSO/GSO). ▶ Modern CPUs can handle up to gigabit speeds without it. ▶ No offloads means better interleaving ⇒ lower latency. ▶ Lower BQL limit. ▶ BQL defaults developed and tuned at 1Gbit/s+. ▶ 1514 (ethernet MTU + header) works well up to ≃ 10Mbit/s. ▶ 3028 up to ≃ 100Mbit/s. ▶ But further work is needed in this area. ▶ Make sure driver(s) are BQL-enabled. ▶ BQL is Ethernet only, and not all drivers are updated. ▶ Esp. many SOCs have drivers without BQL. 14 / 31

  15. Best configuration practices (cont.) ▶ If using netem to introduce latency, use a separate middlebox. ▶ In particular, netem does not work in combination with other qdiscs. ▶ Change qdiscs at the right place - at the bottleneck! ▶ Or use software rate limiting (e.g. htb ) to move the bottleneck. ▶ Beware of buffers at lower layers. ▶ Non-Ethernet drivers (DSL etc). ▶ Buffering in error correction layers (e.g. 802.11n, 3g, LTE). ▶ Even htb buffers an extra packet. ▶ (fq)CoDel doesn’t know about buffers at lower levels. ▶ Beware the cheap switches ▶ Pause frames and/or excess buffering. 15 / 31

  16. Test results 16 / 31

  17. . Two TCP streams + ping - pfifo_fast . 10 3 10 2 10 2 Mbits/s ms 10 1 10 1 pfifo_fast 10 0 10 0 0 10 20 30 40 50 60 70 Time . Download bandwidth Upload bandwidth Ping (ms) 17 / 31

  18. . Two TCP streams + ping - codel . 10 3 10 2 10 2 Mbits/s ms 10 1 10 1 codel 10 0 10 0 0 10 20 30 40 50 60 70 Time . Download bandwidth Upload bandwidth Ping (ms) 18 / 31

  19. . Two TCP streams + ping - sfq . 10 3 10 2 10 2 Mbits/s ms 10 1 10 1 sfq 10 0 10 0 0 10 20 30 40 50 60 70 Time . Download bandwidth Upload bandwidth Ping (ms) 19 / 31

  20. . Two TCP streams + ping - fq_codel . 10 3 10 2 10 2 Mbits/s ms 10 1 10 1 fq_codel 10 0 10 0 0 10 20 30 40 50 60 70 Time . Download bandwidth Upload bandwidth Ping (ms) 20 / 31

  21. . Two TCP streams + ping - comparison . 10 3 10 3 10 2 10 2 10 2 10 2 Mbits/s Mbits/s ms ms 10 1 10 1 10 1 10 1 pfifo_fast codel 10 0 10 0 10 0 10 0 0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70 Time Time 10 3 10 3 10 2 10 2 10 2 10 2 Mbits/s Mbits/s ms ms 10 1 10 1 10 1 10 1 sfq fq_codel 10 0 10 0 10 0 10 0 0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70 Time Time . Download bandwidth Upload bandwidth Ping (ms) 21 / 31

  22. . Two TCP streams + ping - CDF . 1.0 0.8 Cumulative probability 0.6 0.4 0.2 two streams 0.0 0 10 20 30 40 50 60 70 ms . Ping (ms) - fq_codel qdisc Ping (ms) - sfq qdisc Ping (ms) - codel qdisc 22 / 31

  23. . RRUL test - pfifo_fast . 2.6 Mbits/s down 2.4 2.2 2.0 1.8 1.6 1.4 3.0 2.8 Mbits/s up 2.6 2.4 2.2 2.0 1.8 1.6 10 2 ms pfifo_fast 10 1 10 0 0 10 20 30 40 50 60 70 . Time 23 / 31

  24. . RRUL test - codel . 2.8 Mbits/s down 2.6 2.4 2.2 2.0 1.8 1.6 1.4 3.0 2.8 Mbits/s up 2.6 2.4 2.2 2.0 1.8 1.6 10 2 ms codel 10 1 10 0 0 10 20 30 40 50 60 70 . Time 24 / 31

  25. . RRUL test - sfq . 2.6 Mbits/s down 2.4 2.2 2.0 1.8 1.6 1.4 3.0 2.8 Mbits/s up 2.6 2.4 2.2 2.0 1.8 1.6 10 2 ms sfq 10 1 10 0 0 10 20 30 40 50 60 70 . Time 25 / 31

  26. . RRUL test - fq_codel . 2.6 Mbits/s down 2.4 2.2 2.0 1.8 1.6 1.4 2.8 Mbits/s up 2.6 2.4 2.2 2.0 1.8 10 2 ms fq_codel 10 1 10 0 0 10 20 30 40 50 60 70 . Time 26 / 31

  27. . RRUL test - comparison . 2.8 2.6 2.6 Mbits/s down Mbits/s down 2.4 2.4 2.2 2.2 2.0 2.0 1.8 1.8 1.6 1.6 1.4 1.4 3.0 3.0 2.8 2.8 Mbits/s up Mbits/s up 2.6 2.6 2.4 2.4 2.2 2.2 2.0 2.0 1.8 1.8 1.6 1.6 10 2 10 2 ms ms pfifo_fast codel 10 1 10 1 10 0 10 0 0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70 Time Time 2.6 2.6 Mbits/s down Mbits/s down 2.4 2.4 2.2 2.2 2.0 2.0 1.8 1.8 1.6 1.6 1.4 1.4 3.0 2.8 2.8 Mbits/s up Mbits/s up 2.6 2.6 2.4 2.4 2.2 2.2 2.0 2.0 1.8 1.8 1.6 10 2 10 2 ms ms sfq fq_codel 10 1 10 1 10 0 10 0 . 0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70 Time Time 27 / 31

  28. . RRUL test - CDF . 1.0 0.8 Cumulative probability 0.6 0.4 0.2 RRUL 0.0 0 10 20 30 40 50 60 70 80 ms . Ping (ms) - fq_codel qdisc Ping (ms) - sfq qdisc Ping (ms) - codel qdisc 28 / 31

  29. . CDF UDP flood . 1.0 0.8 Cumulative probability 0.6 0.4 0.2 UDP flood 0.0 10 1 10 2 10 3 10 4 ms . Ping (ms) - fq_codel qdisc Ping (ms) - sfq qdisc Ping (ms) - codel qdisc 29 / 31

  30. http://akira.ruc.dk/~tohojo/bufferbloat/bufferbloat-paper.pdf https://github.com/dtaht/deBloat/blob/master/spec/rrule.doc Best_practices_for_benchmarking_Codel_and_FQ_Codel References ▶ BQL: https://lwn.net/Articles/454390/ ▶ netperf: http://www.netperf.org/netperf/ ▶ netperf-wrapper: https://github.com/tohojo/netperf-wrapper ▶ Paper on experiments: ▶ RRUL test spec draft: ▶ Best practices: https://www.bufferbloat.net/projects/codel/wiki/ ▶ My email address: toke@toke.dk 30 / 31

  31. Questions? Questions? Comments? 31 / 31

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend