Hi, With a slight modification on patch 9 (and subsequent patches) I applied this series to odp-netmap and updated to odp v1.0.0. I haven't tagged it yet, I need to remember how the tag is supposed to look, but I can do that tomorrow.
On Mon, Mar 2, 2015 at 8:46 PM, Ciprian Barbu <[email protected]> wrote: > This series does a number of things, things to improve performance. These > fixes > are needed before updating to ODP v1.0, to make it worthwile trying it. > > 1. replacing spinlocks with ticketlocks in pktio to improve performance > 2. a small bug fix that would cause a crash when no data was available > 3. update to netmap v11.1; very handy to work with newer kernels > 4. some formatting changes, renaming nm_desc to desc to match netmap API > 5. getting rid of old ioctl code that was performing worse than poll with > tmo 0 > 6. blocking poll caused a botleneck in odp_l2fwd because the receiving thread > also sends the data out, but it needs to lock_entry at pktio level with > the > other receiving thread; making poll unblocking fixes this problem > 7. odp_netmap_init_global needed for early initialization of a global lock > 8. single mmap addr needed when multiple threads access a pktio > (odp_schedule) > 9. keeping a list of netmap interfaces is needed if more than one thread > open a > pktio on the same interface; this will be revised in ODP at some point but > until then we need this list to store per-interface locks (patch 11) > 10. netmap API provides nm_dispatch and nm_inject which make the code cleaner > 11. add proper locking needed when multiple threads access the same interface > (right now only through different pktios on the same interface). When > locking at the pktio level will be removed these locks will be essential > for > correct synchronization > 12. polling only when the rings are empty reduces the number of system calls > and > gives slightly better performance > > > The end result is that odp-netmap can now achieve 1GBs line rate l2 forwarding > with odp_l2fwd, for now only with burst mode with two interfaces and two > cores. > > The tests setup was the same as with the ovs one, netmap pkt-gen, 64 byte > pkts. > For 1Gbs, the practical limit is about 1.38 Mpps which odp_l2fwd 2 cores in > burst mode can now achieve. > > The odp_l2fwd will try to open more than one pktio for each interface if the > number of cores is greater than the number of interfaces. This gives worse > performance than with i.e 2 interfaces and 2 cores burst mode, because of > extra > locking. > > With queue mode the odp_l2fwd can reach about 700 kpps with 4 cores on 2 > interfaces and if the pktio level locking is removed the performance goes to > about 1 Mpps. > > Ciprian Barbu (12): > linux-netmap: pktio: use ticketlock to send and recv packets > linux-netmap: pktio: fix invalid ring crash > linux-netmap: update to netmap_v11.1 > linux-netmap: pktio: cosmetic changes > linux-netmap: pktio: remove unused ioctl code > linux-netmap: pktio: set POLL_TMO to 0 to poll without blocking > linux-netmap: add odp_netmap_init_global > linux-netmap: pktio: use single mmap address for all pktios > linux-netmap: pktio: keep track of opened netmap interfaces > linux-netmap: pktio: refactor packet I/O using existing APIs > linux-netmap: pktio: add per device RX and TX locks > linux-netmap: pktio: poll only when needed > > platform/linux-netmap/Makefile.am | 4 +- > platform/linux-netmap/README | 76 +++-- > platform/linux-netmap/include/odp_internal.h | 51 +++ > .../linux-netmap/include/odp_packet_io_internal.h | 4 +- > platform/linux-netmap/include/odp_packet_netmap.h | 29 +- > platform/linux-netmap/odp_init.c | 96 ++++++ > platform/linux-netmap/odp_packet_io.c | 8 +- > platform/linux-netmap/odp_packet_netmap.c | 351 > ++++++++++----------- > 8 files changed, 389 insertions(+), 230 deletions(-) > create mode 100644 platform/linux-netmap/include/odp_internal.h > create mode 100644 platform/linux-netmap/odp_init.c > > -- > 1.8.3.2 > _______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
