Re: Flow Control and Port Mirroring Revisited
From: Simon Horman <horms@verge.net.au>
Date: 2011-01-10 09:31:55
Also in:
kvm, netdev
On Fri, Jan 07, 2011 at 10:23:58AM +0900, Simon Horman wrote:
On Thu, Jan 06, 2011 at 05:38:01PM -0500, Jesse Gross wrote: [ snip ]quoted
I know that everyone likes a nice netperf result but I agree with Michael that this probably isn't the right question to be asking. I don't think that socket buffers are a real solution to the flow control problem: they happen to provide that functionality but it's more of a side effect than anything. It's just that the amount of memory consumed by packets in the queue(s) doesn't really have any implicit meaning for flow control (think multiple physical adapters, all with the same speed instead of a virtual device and a physical device with wildly different speeds). The analog in the physical world that you're looking for would be Ethernet flow control. Obviously, if the question is limiting CPU or memory consumption then that's a different story.Point taken. I will see if I can control CPU (and thus memory) consumption using cgroups and/or tc.
I have found that I can successfully control the throughput using the following techniques 1) Place a tc egress filter on dummy0 2) Use ovs-ofctl to add a flow that sends skbs to dummy0 and then eth1, this is effectively the same as one of my hacks to the datapath that I mentioned in an earlier mail. The result is that eth1 "paces" the connection. 3) 2) + place a tc egress filter on eth1 Which mostly makes sense to me although I am a little confused about why 1) needs a filter on dummy0 (a filter on eth1 has no effect) but 3) needs a filter on eth1 (a filter on dummy0 has no effect, even if the skb is sent to dummy0 last. I also had some limited success using CPU cgroups, though obviously that targets CPU usage and thus the effect on throughput is fairly course. In short, its a useful technique but not one that bares further discussion here.