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" <[email protected]> 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:[email protected]] On Behalf Of Daniele
>> Di Proietto
>> Sent: Tuesday, May 17, 2016 1:56 AM
>> To: [email protected]
>> 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
>> [email protected]
>> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev