As of 2022 I can’t recommend the GL.inet method anymore because they run on an older version of openWrt and getting to the new version comes with compatibility issues.
I’d recommend a GL.inet GL-BL1300 ($80) as it has a quad core CPU (IPQ4028) and will perform best.
This will also work for a GL.inet AR750S-EXT ($84) but that’s a portable router and has a single core CPU so it doesn’t perform was great.
Instructions
Start off by hooking up your router to your modem via Ethernet cable and powering it on. Then connect to it’s WiFi using the default settings printed on the modem or manual. You can go through these screenshots or my video here (for GL.inet): https://www.youtube.com/watch?v=_fNGnPjQ2HY
For this last screenshot I will quote the wiki on https://wiki.openwrt.org/doc/howto/sqm
In the Link Layer Adaptation tab, choose the kind of link you have:
For VDSL – Choose Ethernet, and set per packet overhead to 8 For DSL of any other type – Choose ATM, and set per packet overhead to 44 For Cable or other kinds of connections – Choose none (default)
After all these steps press “Save & Apply” and now you will never lag due to bufferbloat again! You can test it by visiting www.dslreports.com/speedtest
Calibration and Testing
Run “ping www.google.com -t” in command prompt and then run the speedtest.
If you still have an A rating, with low pings during the speedtest. You can incrementally increase your total bandwidth above the 85% you initially set until pings start to spike higher than desired.
Otherwise if your rating is not good or you are getting bad pings try reducing the max bandwidth limits. (Ex. If 85% is still lagging try 80%.)
Doing this allows you find the sweet spot between getting max bandwidth vs experiencing high pings.