[ovs-dev] Threaded userspace datapath

Ben Pfaff blp at nicira.com
Fri Aug 10 17:20:05 UTC 2012


On Fri, Aug 10, 2012 at 06:36:46PM +0200, Giuseppe Lettieri wrote:
> > I'm very interested in seeing some up-to-date performance numbers
> > because introducing threads definitely raises the bar when it comes to
> > the need for careful programming, and that's only worthwhile if there
> > is a correspondingly high payoff.

...

> With the original ovs-vswitchd I obtain ~26 Kpps, with the threaded
> ovs-vswitchd I obtain ~270 Kpps.

That's good enough of a payoff to justify work on a thread or process
split.  Thanks.

...
> The datapath thread goes to 100% CPU in my tests, but this is
> expected, since everything is being done in software and no real I/O
> is being performed. The main thread goes to ~65%, and this is less
> expected (at least, I did not expect it) and we should investigate
> why.

I'm surprised too.  I think that your test only has one or two flows,
so I'd expect the forwarding thread to be busy and the main thread to
be idle.

> Anyway, we should consider the following (Luigi may also say
> something more precise on this, or even correct me if I am wrong):
> most of the performance benefit comes from two things that are
> unrelated to threading:
> 
> 1) use the information returned by the poll syscall to read from
> ready ports only;

We've had good improvements in a similar issue in dpif-linux by
switching to use "epoll".  Can kqueue under FreeBSD do something
similar?

> 2) process several packets per port (if available) before reentering
> the poll syscall.

That makes sense too.



More information about the dev mailing list