[Cerowrt-devel] improving performance on wifi under contention

Dave Taht dave.taht at gmail.com
Sat Jan 11 11:14:38 PST 2014


There are quite a few things I'd like to try before declaring cerowrt
stable. That said, I'm pretty happy with the last release, and can
probably live without some long desired features in order to retire
the last release. So +1 on the enthusiasm there...

I need to write down and publish here the 12+ or so fit and finish
things that need to get done, and think on the bigger issues, which
I'll do tomorrow afternoon.

there are also some bigger bugs in the bug database worth reviewing by
everyone... some folk should try the thc tools to stress out the ipv6
stuff and look at the unaligned instructions... we didn't get all of
them that hit at boot... there was a crash reported by the iwl folk on
a fragmentation thing...

One performance test on my agenda was improving performance under wifi
when multiple stations are active. (running rrul from two wifi
stations through cero to a local server for example).

With the current system, packet aggregation goes to hell rapidly, partially due
to overbuffering, and partially due to per-station queueing not being
done in the driver yet. I'd long thought that a short term partial fix
for this would be to
use a per destination hash on the fq_codel queues. But I'm unsure if
code like this would work, and there are side effects from not doing
better mixing on a per-sta basis (which we want to do in the driver at
some point) that might cancel things out...

however, if someone could make this work and test it, I'd love it.

IFACE=sw00

qdisc add dev $IFACE handle 1 root mq
qdisc add dev $IFACE parent 1:1 handle 10 fq_codel limit 1000 quantum
1514 # VO queue doesn't aggregate, should probable switch to nfq_codel

# Would like to send multicast to VO, too
# 3 big packets or a LOT of acks.

qdisc add dev sw00 parent 1:2 handle 20 fq_codel limit 1000 quantum 4542
qdisc add dev sw00 parent 1:3 handle 30 fq_codel limit 1000 quantum 4542
qdisc add dev sw00 parent 1:4 handle 40 fq_codel limit 1000 quantum 4542

# use fq_codel to bunch up packets per device rather than per flow

tc filter add dev $IFACE prio 1 protocol all parent 10: handle 1 flow hash \
keys dst divisor 1024 baseclass 10:1
tc filter add dev $IFACE prio 1 protocol all parent 20: handle 1 flow hash \
keys dst divisor 1024 baseclass 20:1
tc filter add dev $IFACE prio 1 protocol all parent 30: handle 1 flow hash \
keys dst divisor 1024 baseclass 30:1
tc filter add dev $IFACE prio 1 protocol all parent 40: handle 1 flow hash \
keys dst divisor 1024 baseclass 40:1

a tc filter show dev $IFACE # shows nothing. bug?

which is where I left that months ago.
-- 
Dave Täht

Fixing bufferbloat with cerowrt: http://www.teklibre.com/cerowrt/subscribe.html


More information about the Cerowrt-devel mailing list