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