Hi Antonio,

I did some very simple benchmarks of the connection tracker
between two phy ports (OpenFlow port 1 and 2).
This is the flow table: it doesn't stress classification,
but it includes one recirculation:

ct_state=-trk,actions=ct(commit,table=0)
in_port=1,ct_state=+trk,actions=2


With 64-bytes UDP packets:

n_connections | throughput(Mpps)
            2 | 5.01
           10 | 4.76
          100 | 4.07
         1000 | 2.82
        10000 | 1.83
       100000 | 1.44
      1000000 | 1.13
      3000000 | 1.11

I think most of the drop between 100 and 1000 is due to EMC misses.

I also did some TCP testing with netperf TCP_STREAM, but I didn't notice
any difference if I removed the ct action from the pipeline, so the
connection tracker is not the bottleneck (we can easily move 10Gbps of
TCP 1500 bytes traffic, but that's not a significant result).

Thanks,

Daniele

On 26/05/2016 02:45, "Fischetti, Antonio" <antonio.fische...@intel.com> wrote:

>Hi Daniele,
>do you have any performance figures related to this implementation?
>I know that performance may change quite a lot depending on the type 
>of traffic data.
>
>Thanks,
>Antonio
>
>> -----Original Message-----
>> From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Daniele
>> Di Proietto
>> Sent: Tuesday, May 17, 2016 1:56 AM
>> To: dev@openvswitch.org
>> Subject: [ovs-dev] [PATCH v3 00/16] Userspace (DPDK) connection
>> tracker
>> 
>> This series aims to implement the ct() action for the dpif-netdev
>> datapath.
>> The bulk of the code is in the new conntrack module: it contains some
>> packet
>> parsing code, some lookup tables and the logic to implements all the
>> ct bits.
>> 
>> The conntrack module is helped by conntrack-tcp, for TCP window and
>> flags
>> tracking: the bulk of the code of this submodule is from the
>> FreeBSD's pf
>> subsystem, therefore is BSD licensed.
>> 
>> The rest of the series integrates the connection tracker with the
>> rest of
>> OVS: the ct() action is implemented in dpif-netdev, and the debugging
>> interfaces required by dpctl/{dump,flush}-conntrack are implemented.
>> 
>> Besides adding some unit tests, this series ports the existing
>> conntrack
>> system test to the userspace datapath.  Some small modifications are
>> required to pass the testsuite, and some tests still have to be
>> skipped.
>> 
>> This can also be downloaded at:
>> 
>> https://github.com/ddiproietto/ovs/tree/userconntrack_20160516
>> 
>> Any feedback is appreciated, thanks.
>> 
>> v2 -> v3:
>> * Rebased.
>> * Squashed commits for flushing (in dpif-netdev and conntrack).
>> * Squashed commits for dumping (in dpif-netdev and conntrack).
>> * Use adaptive mutex instead of spinlock: this prevents livelock
>>   if the cleanup thread is executed on the same CPU as a forwarding
>>   thread.  Performance impact in minimal.
>> * Validate L3 and L4 checksum.
>> * Use proper L3 and L4 checksum in hardcoded packets in system and
>> unit
>>   tests.
>> * Consider ICMPv6 as well as ICMP in l4_protos and conn_key_to_tuple.
>> * Mention conntrack in NEWS and FAQ.md.
>> * Use uint16_t for ct_state.
>> * Fix possible NULL dereference for conn in process_one().
>> * Add OVS_U128_MIN, OVS_U128_ZERO.
>> * Use HMAP_FOR_EACH_POP.
>> * Check that UDP length is valid.
>> * Style fix: prefer 'sizeof *object' instead of 'sizeof type'
>> * Don't accept packets from/to UDP/TCP port 0.
>> * Use defines for timeouts.
>> * Check expiration inside lookup loop in conn_key_lookup().
>> * Limit the number of connections.
>> * Simplify case if tcp_get_wscale().
>> * Introduce general INT_MOD_* macros for comparisons in modular
>> arithmetic.
>> * Improve comments.
>> * New cleanup mechanism: we keep connections in an ordered list and
>> we have
>>   a separate thread to performs the cleanup.  This doesn't block the
>> main
>>   thread for long intervals anymore.
>> * Correctly fill UDP length and UDP/TCP/ICMP checksums in
>> flow_compose():
>>   it's useful to write testcases for the connection tracker.
>> * Added system test with ICMP traffic through the connection tracker.
>> * Track ICMP type and code.
>> 
>> v1 -> v2:
>> * Fixed bug in tcp_get_wscale(), related to TCP options parsing.
>> * Changed names of ICMP constants: now they're different from Linux
>> and
>>   FreeBSD.
>> * Fixed bug in parse_ipv6_ext_hdrs().
>> * Used ALWAYS_INLINE in parse_vlan and parse_ethertype, to avoid a
>>   performance regression in miniflow_extract().
>> * Updated copyright info in COPYING and debian/copyright.in.
>> * Rebased.
>> * Changed batching strategy in conntrack_execute() to allow a newly
>>   created connection to be picked up by packets in the same batch.
>> * Added an ovs-test module to throw pcap files at the connection
>> tracker.
>> * Added a workaround for the userspace testsuite on new kernels and a
>> tcp
>>   non-conntrack test.
>> 
>> 
>> Daniele Di Proietto (16):
>>   packets: Define ICMP types.
>>   flow: Export parse_ipv6_ext_hdrs().
>>   flow: Introduce parse_dl_type().
>>   conntrack: New userspace connection tracker.
>>   conntrack: Periodically delete expired connections.
>>   tests: Add very simple conntrack benchmark.
>>   tests: Add test-conntrack pcap test.
>>   dpif-netdev: Execute conntrack action.
>>   dpif-netdev: Implement conntrack dump functions.
>>   dpif-netdev: Implement conntrack flush interface.
>>   flow: Fill udp_len in flow_compose_l4().
>>   flow: Generate checksum in flow_compose().
>>   tests: Add conntrack ofproto-dpif tests.
>>   system-tests: Run conntrack tests with userspace.
>>   system-tests: Add ping through conntrack test.
>>   conntrack: Track ICMP type and code.
>> 
>>  COPYING                          |    1 +
>>  FAQ.md                           |    2 +-
>>  NEWS                             |    2 +
>>  debian/copyright.in              |    4 +
>>  include/openvswitch/types.h      |    4 +
>>  lib/automake.mk                  |    6 +
>>  lib/conntrack-icmp.c             |  105 ++++
>>  lib/conntrack-other.c            |   86 +++
>>  lib/conntrack-private.h          |  113 ++++
>>  lib/conntrack-tcp.c              |  499 +++++++++++++++
>>  lib/conntrack.c                  | 1237
>> ++++++++++++++++++++++++++++++++++++++
>>  lib/conntrack.h                  |  201 +++++++
>>  lib/ct-dpif.c                    |   24 +-
>>  lib/ct-dpif.h                    |    3 +-
>>  lib/dpif-netdev.c                |  133 +++-
>>  lib/flow.c                       |  201 ++++---
>>  lib/flow.h                       |    4 +
>>  lib/netlink-conntrack.c          |    2 +-
>>  lib/packets.h                    |   14 +-
>>  lib/util.h                       |    9 +
>>  tests/automake.mk                |    1 +
>>  tests/dpif-netdev.at             |   14 +-
>>  tests/ofproto-dpif.at            |  896 +++++++++++++++++++++++----
>>  tests/system-kmod-macros.at      |   28 +
>>  tests/system-traffic.at          |  149 ++++-
>>  tests/system-userspace-macros.at |   45 +-
>>  tests/test-conntrack.c           |  236 ++++++++
>>  27 files changed, 3780 insertions(+), 239 deletions(-)
>>  create mode 100644 lib/conntrack-icmp.c
>>  create mode 100644 lib/conntrack-other.c
>>  create mode 100644 lib/conntrack-private.h
>>  create mode 100644 lib/conntrack-tcp.c
>>  create mode 100644 lib/conntrack.c
>>  create mode 100644 lib/conntrack.h
>>  create mode 100644 tests/test-conntrack.c
>> 
>> --
>> 2.1.4
>> 
>> _______________________________________________
>> dev mailing list
>> dev@openvswitch.org
>> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to