From patchwork Fri Aug 11 15:52:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fischetti, Antonio" X-Patchwork-Id: 800626 X-Patchwork-Delegate: dlu998@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xTV293F7Gz9t2h for ; Sat, 12 Aug 2017 01:54:57 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id C4C6EB35; Fri, 11 Aug 2017 15:52:55 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 029E42C for ; Fri, 11 Aug 2017 15:52:51 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id CCD5815C for ; Fri, 11 Aug 2017 15:52:50 +0000 (UTC) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Aug 2017 08:52:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.41,358,1498546800"; d="scan'208"; a="1002648553" Received: from sivswdev01.ir.intel.com (HELO localhost.localdomain) ([10.237.217.45]) by orsmga003.jf.intel.com with ESMTP; 11 Aug 2017 08:52:49 -0700 From: antonio.fischetti@intel.com To: dev@openvswitch.org Date: Fri, 11 Aug 2017 16:52:45 +0100 Message-Id: <1502466766-17370-4-git-send-email-antonio.fischetti@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1502466766-17370-1-git-send-email-antonio.fischetti@intel.com> References: <1502466766-17370-1-git-send-email-antonio.fischetti@intel.com> Subject: [ovs-dev] [PATCH v3 3/4] conntrack: pass current time to conntrack_execute. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Current time is passed to conntrack_execute so it doesn't have to recompute it again. Signed-off-by: Antonio Fischetti Acked by: Sugesh Chandran --- In a firewall testbench set up with table=0, priority=1 actions=drop table=0, priority=10,arp actions=NORMAL table=0, priority=100,ct_state=-trk,ip actions=ct(table=1) table=1, ct_state=+new+trk,ip,in_port=1 actions=ct(commit),output:2 table=1, ct_state=+est+trk,ip,in_port=1 actions=output:2 table=1, ct_state=+new+trk,ip,in_port=2 actions=drop table=1, ct_state=+est+trk,ip,in_port=2 actions=output:1 I measured packet Rx rate in Mpps (regardless of packet loss). Bidirectional test with 64B UDP packets. 2 PMDs, 3 Tx q. I collected the following performance figures. Orig OvS-DPDK means Commit ID: 6b1babacc3ca0488e07596bf822fe356c9bab646 +-------------------+----------------+ UDP | Orig OvS-DPDK + | Previous case | connections | patches #1,2 | + this patch | --------------+-------------------+----------------+ 1 | 1.42, 1.42 | 1.82, 1.76 | 10 | 2.35, 2.35 | 2.35, 2.35 | 50 | 2.38, 2.42 | 2.41, 2.43 | 100 | 2.49, 2.49 | 2.50, 2.52 | 500 | 2.11, 2.10 | 2.21, 2.22 | 1000 | 2.02, 2.00 | 2.09, 2.11 | 5000 | 1.94, 1.87 | 1.93, 1.89 | --------------+-------------------+----------------+ --- lib/conntrack.c | 4 ++-- lib/conntrack.h | 3 ++- lib/dpif-netdev.c | 2 +- tests/test-conntrack.c | 8 +++++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/conntrack.c b/lib/conntrack.c index 1c0e023..c61bcd6 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -1136,13 +1136,13 @@ conntrack_execute(struct conntrack *ct, struct dp_packet_batch *pkt_batch, const uint32_t *setmark, const struct ovs_key_ct_labels *setlabel, const char *helper, - const struct nat_action_info_t *nat_action_info) + const struct nat_action_info_t *nat_action_info, + long long now) { struct dp_packet **pkts = pkt_batch->packets; size_t cnt = pkt_batch->count; struct conn_lookup_ctx ctx; - long long now = time_msec(); for (size_t i = 0; i < cnt; i++) { if (!conn_key_extract(ct, pkts[i], dl_type, &ctx, zone)) { diff --git a/lib/conntrack.h b/lib/conntrack.h index 272d2d5..fbeef1c 100644 --- a/lib/conntrack.h +++ b/lib/conntrack.h @@ -95,7 +95,8 @@ int conntrack_execute(struct conntrack *, struct dp_packet_batch *, uint16_t zone, const uint32_t *setmark, const struct ovs_key_ct_labels *setlabel, const char *helper, - const struct nat_action_info_t *nat_action_info); + const struct nat_action_info_t *nat_action_info, + long long now); struct conntrack_dump { struct conntrack *ct; diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 0db6f83..6aeedf8 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -5471,7 +5471,7 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_, conntrack_execute(&dp->conntrack, packets_, aux->flow->dl_type, force, commit, zone, setmark, setlabel, helper, - nat_action_info_ref); + nat_action_info_ref, now); break; } diff --git a/tests/test-conntrack.c b/tests/test-conntrack.c index 6a77db8..b27d181 100644 --- a/tests/test-conntrack.c +++ b/tests/test-conntrack.c @@ -84,12 +84,13 @@ ct_thread_main(void *aux_) struct dp_packet_batch *pkt_batch; ovs_be16 dl_type; size_t i; + long long now = time_msec(); pkt_batch = prepare_packets(batch_size, change_conn, aux->tid, &dl_type); ovs_barrier_block(&barrier); for (i = 0; i < n_pkts; i += batch_size) { conntrack_execute(&ct, pkt_batch, dl_type, false, true, 0, NULL, NULL, - NULL, NULL); + NULL, NULL, now); } ovs_barrier_block(&barrier); destroy_packets(pkt_batch); @@ -154,6 +155,7 @@ pcap_batch_execute_conntrack(struct conntrack *ct, { struct dp_packet_batch new_batch; ovs_be16 dl_type = htons(0); + long long now = time_msec(); dp_packet_batch_init(&new_batch); @@ -172,7 +174,7 @@ pcap_batch_execute_conntrack(struct conntrack *ct, if (flow.dl_type != dl_type) { conntrack_execute(ct, &new_batch, dl_type, false, true, 0, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, now); dp_packet_batch_init(&new_batch); } new_batch.packets[new_batch.count++] = packet;; @@ -180,7 +182,7 @@ pcap_batch_execute_conntrack(struct conntrack *ct, if (!dp_packet_batch_is_empty(&new_batch)) { conntrack_execute(ct, &new_batch, dl_type, false, true, 0, NULL, NULL, - NULL, NULL); + NULL, NULL, now); } }