I figured I'd post my standard HTB config that I start with. Fasttrack effectively breaks queuing, so I exclude marked packets (this also applies to my mangle rules for IPSec, but that a different example).
In this case, I use mangle to mark typical DSCP VOIP traffic, but it can be anything.
eth6 is my internet interface, and vlan 28 is my internal interface. Since I can't control the ISP flow to my router, I set vlan 28's queues to traffic shape/limit traffic based on my max internet download (300Mbps). It isn't perfect, but if I limit flows to internal hosts at certain bandwidths, then the data flows from ISP to my router should roughly match what I've set on vlan 28's queues.
My queue configs may not be ideal (probably not) but they are effective for what I'm doing in this particular case. I think this could be a good starting place for someone looking at implementing typical queuing.
/ip firewall filter
add action=fasttrack-connection chain=forward comment="Fast Track Rule - Ignore Connection Marked Packets" connection-mark=no-mark connection-state=established,related
/ip firewall mangle
add action=mark-connection chain=forward comment="EF" connection-mark=no-mark connection-state=related,new dscp=46 new-connection-mark=cm.high passthrough=yes
add action=mark-connection chain=forward comment="AF31" connection-mark=no-mark connection-state=related,new dscp=26 new-connection-mark=cm.high passthrough=yes
add action=mark-connection chain=forward comment="CS3" connection-mark=no-mark connection-state=related,new dscp=24 new-connection-mark=cm.high passthrough=yes
add action=mark-packet chain=forward connection-mark=cm.high new-packet-mark=pm.high passthrough=no
add action=mark-packet chain=forward connection-mark=cm.med new-packet-mark=pm.med passthrough=no
add action=mark-packet chain=forward connection-mark=cm.low new-packet-mark=pm.low passthrough=no
/queue tree
add max-limit=300M name=q.vlan28.out parent=vlan28 queue=default
add burst-limit=20M burst-time=1s max-limit=15M name=q.eth6.out parent=eth6-charter queue=default
add name=q.vlan28.default packet-mark=no-mark parent=q.vlan28.out queue=default
add limit-at=100M max-limit=200M name=q.vlan28.high packet-mark=pm.high parent=q.vlan28.out priority=1 queue=default
add limit-at=50M max-limit=200M name=q.vlan28.med packet-mark=pm.med parent=q.vlan28.out priority=3 queue=default
add limit-at=10M max-limit=50M name=q.vlan28.low packet-mark=pm.low parent=q.vlan28.out priority=5 queue=default
add name=q.eth6.default packet-mark=no-mark parent=q.eth6.out queue=default
add limit-at=10M max-limit=20M name=q.eth6.high packet-mark=pm.high parent=q.eth6.out priority=1 queue=default
add limit-at=5M max-limit=20M name=q.eth6.med packet-mark=pm.med parent=q.eth6.out priority=3 queue=default
add limit-at=1M max-limit=20M name=q.eth6.low packet-mark=pm.low parent=q.eth6.out priority=5 queue=default