Nullity
Very Senior Member
I think fq_codel is doing very well on upload. Good but less so on download. Without fq_codel, download is even worse. Lesson learned.
Now even though fq_codel only has a few knobs (probably not true if including other kernel parameters of the network stack!), the big question is how to improve on download lag?
To improve download bufferbloat, the most common way is to NEVER allow full use of your connection, which means preemptively limiting your max download speed.
It always takes a small amount of time for a remote TCP sender to obey your request to slow down. If your max download rate is reached while the remote TCP sender is still sending faster than you can receive, you experience bufferbloat (likely caused by your ISP's equipment at the network node that rate-limits to whatever bitrate tier you are paying for). So, you need to rate-limit your download to approximately 90% to even 50%, depending on how unpredictable your network is.
Toastman explains it best in his QoS tutorial, IMO: http://www.linksysinfo.org/index.php?threads/qos-tutorial.68795/
There are other factors when discussing download, like the idea that buffering is practically useless when moving from a low-bandwidth node (10Mbit) to a high-bandwidth node (1Gbit) since there is practically no congestion, meaning only traffic-policing (no buffering) should be used rather than traffic-shaping (buffered). This lack of buffering would also limit the need for scheduling (reordering of packets), which would simplify the whole setup even more.