Hello,
I have an OpenBSD 6.2 router, set up in a test rig so there's no traffic apart from my tests. It has vmx interfaces. $int_if is a vlan on one of them.
I have an issue where if a child queue has a different "max" from a parent queue, the bandwidth is throttled down to much less than either.
I have the following simple queue tree (eventually it will be bigger, this is just for testing):
queue inbound on $int_if bandwidth 100M
queue inbound_all parent inbound bandwidth 30M max 30M
queue inbound_std parent inbound_all bandwidth 20M max 30M default
pass on $int_if
This works, and an iperf test shunting data through the router from ext->int gets around 30Mb as expected.
If I change the inbound_all queue's max to a slightly higher number, this shouldn't have any effect at all - after all, the inbound_std queue is still "bandwidth 20M max 30M", and neither of these numbers exceed the parent:
queue inbound on $int_if bandwidth 100M
queue inbound_all parent inbound bandwidth 30M max 40M
^^^^^^^
queue inbound_std parent inbound_all bandwidth 20M max 30M default
pass on $int_if
However, when I do this, suddenly connections assigned to inbound_std only get around 2.3Mb.
``systat q'' shows all packets are going into the correct queue.
As an experiment, I put a "min" level on inbound_std:
queue inbound_std parent inbound_all bandwidth 20M min 10M max 30M default
Then connections get that minimum bandwidth (here, iperf reported around 10Mb), so it shows the queue *can* use more than 2.3Mb, but it still sticks to the min rather than using all available bandwidth.
This seems like a bug to me, although I'm hesitant to suggest it since I have a lot of respect for the OpenBSD team. Does anyone have a suggestion as to what's happening?
Thanks,
Oliver.
No comments:
Post a Comment