[ovs-dev] [PATCH v2] Simplify kernel sFlow implementation
Neil McKee
neil.mckee at inmon.com
Fri Aug 19 18:36:02 UTC 2011
On Aug 18, 2011, at 6:55 PM, Jesse Gross wrote:
> * Atomic operations are quite slow, which means that enabling sFlow results in a major performance hit.
I was alarmed to read this. What is the hit? (I trust your test had the sampling-probability set so that it only take a handful of samples per second?).
Looking at actions.c: sflow_sample(), is it really just the "atomic_inc(&p->sflow_pool);" line that does the damage?
What about net_random(). I don't know where to look for the details on this one. I think Ben said it was about 40 cycles. How does it avoid using a lock or atomic instruction? Does it maintain separate random-number seeds per thread or per cpu?
Does the compiler tend to inline the sflow_sample() function?
Should we sprinkle some more "unlikely()" branch-prediction hints?
For another project we've been experimenting with an approach that looks like this:
if(atomic_decrement(&countdown) == 0) {
<take sample>
for(;;) {
if(atomic_add(&countdown, compute_next_skip()) > 0) break;
drops++;
}
}
Only one thread will see the countdown transition from 1->0 so it's the same as having a lock. That means you can use whatever random number generator you want in compute_next_skip(). In the very rare corner case where your next skip doesn't get "countdown" back above 0 again, then you just register a dropped-sample and try again. The only step in the critical path is the atomic_decrement(), but it sounds like we need to rethink this and try to avoid that atomic_decrement any way we can?
Neil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20110819/cc129064/attachment-0003.html>
More information about the dev
mailing list