Thanks Ben, as it turns out, the thread synch problem was not what was causing the low packet arrival rate. It was buffer allocation mechanisms, which I fixed in my netdev provider and that resolved it. OVS is working fine now.
On Wed, Sep 11, 2013 at 10:12 PM, Ben Pfaff <b...@nicira.com> wrote: > On Wed, Sep 11, 2013 at 06:41:40PM +0500, Junaid Rao wrote: > > I have developed a custom netdev provider and running OVS-1.10.0 in > > userspace mode. it works fine but the packet processing rate is quite > slow. > > Packet transmission rate is about 500packets/sec but OVS is only able to > > forward 1/5th of this. > > Sounds very slow. Even userspace OVS should be much faster than this. > > > The arrival of incoming packet at the switch is indicated by a call back > > function, and this call back works fine for the actual packet > transmission > > rate i.e. 500p/s. > > > > What I understand is the problem in use of poll_block() which is called > in > > the main loop. Currently I use poll_immediate_wake to signal the polling > > thread to stop as soon as a packet is received in my call back function, > > however I see that multiple packets arrive before a single packet is > > received by the netdev-provider. > > It sounds like you have a thread separate from the main thread doing > packet handling. That's fine, but you have to understand that each > thread has its own poll_loop, so that calling poll_immediate_wake() in > one thread does not affect other threads in any way. > > You might want to look at lib/seq.[ch] for another way to wake up the > main thread when packets are received. > -- *Junaid Zulfiqar*
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev