Thread (40 messages) 40 messages, 6 authors, 2011-01-24

Re: Flow Control and Port Mirroring Revisited

From: Simon Horman <horms@verge.net.au>
Date: 2011-01-13 23:41:39
Also in: kvm, virtualization

On Thu, Jan 13, 2011 at 10:45:38AM -0500, Jesse Gross wrote:
On Thu, Jan 13, 2011 at 1:47 AM, Simon Horman [off-list ref] wrote:
quoted
On Mon, Jan 10, 2011 at 06:31:55PM +0900, Simon Horman wrote:
quoted
On Fri, Jan 07, 2011 at 10:23:58AM +0900, Simon Horman wrote:
quoted
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.
Further to this, I wonder if there is any interest in providing
a method to switch the action order - using ovs-ofctl is a hack imho -
and/or switching the default action order for mirroring.
I'm not sure that there is a way to do this that is correct in the
generic case.  It's possible that the destination could be a VM while
packets are being mirrored to a physical device or we could be
multicasting or some other arbitrarily complex scenario.  Just think
of what a physical switch would do if it has ports with two different
speeds.
Yes, I have considered that case. And I agree that perhaps there
is no sensible default. But perhaps we could make it configurable somehow?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help