Question
How can I get a better bufferbloat score and reduce lag on my MikroTik router without turning off FastTrack?
Answer
Use MikroTik's built-in fq-codel (Fair Queuing with Controlled Delay) queue type with appropriate rate limits. This modern Active Queue Management (AQM) algorithm is specifically designed to combat bufferbloat and works alongside FastTrack without sacrificing performance.
Solution: Configure fq-codel Queue Tree
Step 1: Create the fq-codel queue type
/queue type
add kind=fq-codel name=fq-codel
Step 2: Create queue tree rules for upload and download
/queue tree add name=download parent=bridge max-limit=920M queue=fq-codel packet-mark=no-mark
/queue tree add name=upload parent=ether1 max-limit=920M queue=fq-codel packet-mark=no-mark
Important: Replace bridge with your LAN interface (could be bridge, ether2, etc.) and ether1 with your WAN interface name. Adjust 920M to 85-95% of your actual bandwidth.
Key configuration notes:
- Download parent: Use your LAN interface (bridge, or wherever traffic enters your network from WAN)
- Upload parent: Use your WAN interface (ether1, or wherever traffic exits to your ISP)
- max-limit: Set to 85-95% of your actual line speed to prevent ISP buffer overflow
- queue=fq-codel: References the queue type you created in step 1
- packet-mark=no-mark: Applies to all traffic that hasn't been specifically marked
Test your results:
Visit waveform.com/tools/bufferbloat or speed.cloudflare.com to measure your bufferbloat score. You should see significant improvement, ideally achieving an A or B grade.
Why this works with FastTrack:
The fq-codel algorithm manages queue depth intelligently without interfering with FastTrack's connection tracking bypass. FastTrack continues to handle established connections efficiently, while fq-codel ensures fair bandwidth distribution and prevents buffer bloat by actively managing queue delays. The queue management happens in the forwarding path before FastTrack optimizations kick in.
Alternative: PCQ (Per Connection Queue):
If you need more granular per-connection control, you can use PCQ instead:
/queue type
add name="pcq-download" kind=pcq pcq-rate=0 pcq-classifier=dst-address
add name="pcq-upload" kind=pcq pcq-rate=0 pcq-classifier=src-address
/queue tree
add name=download parent=bridge max-limit=920M queue=pcq-download packet-mark=no-mark
add name=upload parent=ether1 max-limit=920M queue=pcq-upload packet-mark=no-mark