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

Reply via email to