From patchwork Wed Apr 27 11:18:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kumar Amber X-Patchwork-Id: 1622981 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=eIlop1mp; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KpGyK5wYkz9s3q for ; Wed, 27 Apr 2022 21:40:09 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 7970860F2C; Wed, 27 Apr 2022 11:40:07 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id i4JAdi5TMHMl; Wed, 27 Apr 2022 11:40:06 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 80B9660B4B; Wed, 27 Apr 2022 11:40:05 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 28E34C0080; Wed, 27 Apr 2022 11:40:05 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0CFD1C0082 for ; Wed, 27 Apr 2022 11:40:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id EC1E282C04 for ; Wed, 27 Apr 2022 11:40:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=intel.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HDA866p96257 for ; Wed, 27 Apr 2022 11:40:02 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by smtp1.osuosl.org (Postfix) with ESMTPS id 53C09827B5 for ; Wed, 27 Apr 2022 11:40:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651059602; x=1682595602; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jvBKSD320SeXHeYhrCoi+t/O7MEfHb/OhTOgUSv4Jas=; b=eIlop1mpASMoZVNu4CrWJcVsli2yIcw6QPwuFVAY7QOoSWyOy2jd2l1C 8UAW0Ji/6UsRDQ52gZ95IJNcHAwG2TzWQ0qjtkwtZxSu6FURPC5ekSdL1 GwYCY+IVECCAfLkWVmM+GwohlpIUwUpDDMCBEWTrqSrGTaQPWZZFNl8Vy MIhlafAyu51iKeRjWEFddvCDpfi5GKdU3PV/PeUbwg/KlZT5WWjZF+IBe /ULgvQW0PAL87MciFJ3r/avUwUrQltF1lm6iE9T5mfmx4dfKUAH+Jd/pg kXykJWMwthBFwXiprIPyvS89Yduj4uY8UN27EBrY2pJr5O12UL3xT4XxU g==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="253281174" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="253281174" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 04:40:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="628973447" Received: from unknown (HELO localhost.localdomain) ([10.190.213.111]) by fmsmga004.fm.intel.com with ESMTP; 27 Apr 2022 04:39:59 -0700 From: Kumar Amber To: ovs-dev@openvswitch.org Date: Wed, 27 Apr 2022 16:48:34 +0530 Message-Id: <20220427111836.2091315-2-kumar.amber@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220427111836.2091315-1-kumar.amber@intel.com> References: <20220427111836.2091315-1-kumar.amber@intel.com> MIME-Version: 1.0 Cc: i.maximets@ovn.org, fbl@sysclose.org, Kumar Amber Subject: [ovs-dev] [PATCH v3 1/3] dpif-netdev: Refactor per thread recirc data allocation. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" The refactor allows us to use *recirc_depth_get() to obtain the depth across ovs which was previously limited to only dpif-netdev.c. Signed-off-by: Kumar Amber Signed-off-by: Cian Ferriter Co-authored-by: Cian Ferriter --- lib/dpif-netdev-private-dpif.c | 2 ++ lib/dpif-netdev-private-dpif.h | 5 +++++ lib/dpif-netdev.c | 3 --- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/dpif-netdev-private-dpif.c b/lib/dpif-netdev-private-dpif.c index 84d4ec156..6f8de9094 100644 --- a/lib/dpif-netdev-private-dpif.c +++ b/lib/dpif-netdev-private-dpif.c @@ -28,6 +28,8 @@ VLOG_DEFINE_THIS_MODULE(dpif_netdev_impl); +DEFINE_EXTERN_PER_THREAD_DATA(recirc_depth, 0); + enum dpif_netdev_impl_info_idx { DPIF_NETDEV_IMPL_SCALAR, DPIF_NETDEV_IMPL_AVX512 diff --git a/lib/dpif-netdev-private-dpif.h b/lib/dpif-netdev-private-dpif.h index 0da639c55..15f1f36b3 100644 --- a/lib/dpif-netdev-private-dpif.h +++ b/lib/dpif-netdev-private-dpif.h @@ -18,6 +18,11 @@ #define DPIF_NETDEV_PRIVATE_DPIF_H 1 #include "openvswitch/types.h" +#include "ovs-thread.h" + +#define MAX_RECIRC_DEPTH 6 +/* Use per thread recirc_depth to prevent recirculation loop. */ +DECLARE_EXTERN_PER_THREAD_DATA(uint32_t, recirc_depth); /* Forward declarations to avoid including files. */ struct dp_netdev_pmd_thread; diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 676434308..139e22f38 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -97,9 +97,6 @@ VLOG_DEFINE_THIS_MODULE(dpif_netdev); #define MIN_TO_MSEC 60000 #define FLOW_DUMP_MAX_BATCH 50 -/* Use per thread recirc_depth to prevent recirculation loop. */ -#define MAX_RECIRC_DEPTH 6 -DEFINE_STATIC_PER_THREAD_DATA(uint32_t, recirc_depth, 0) /* Use instant packet send by default. */ #define DEFAULT_TX_FLUSH_INTERVAL 0 From patchwork Wed Apr 27 11:18:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kumar Amber X-Patchwork-Id: 1622982 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=Pp1b8/sm; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KpGyN5WTKz9s3q for ; Wed, 27 Apr 2022 21:40:12 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 80CAE60F19; Wed, 27 Apr 2022 11:40:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YSc1uiAomZyN; Wed, 27 Apr 2022 11:40:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 7E86960F2F; Wed, 27 Apr 2022 11:40:07 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4DFC0C0081; Wed, 27 Apr 2022 11:40:07 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0D89DC0080 for ; Wed, 27 Apr 2022 11:40:07 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id F083882BC8 for ; Wed, 27 Apr 2022 11:40:05 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=intel.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yC3hoKRcimGk for ; Wed, 27 Apr 2022 11:40:05 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by smtp1.osuosl.org (Postfix) with ESMTPS id 39233828A9 for ; Wed, 27 Apr 2022 11:40:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651059605; x=1682595605; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sqQc13Bn0PqUnsjNraH1Lt88I4r4b5n9Zjx9y/u4bc0=; b=Pp1b8/smy1/7K7Uihzh8NslIEIwyd5kBdNtCiZs5PZQeaaKhEmIuFY7O hGKhU3N77iO7szaENO5puCdI/S7CMdyPT8rYwpJyPl+wC8ikOq+n77Tsa QX2e+n+l5chQXnZKUKFCKZcJjU32wJpcfiVrHe3R9tbFwlwXRu3nu7A96 sFSX9YSIAtKW5qa3nfyEQXCb3BD378FKR/JfEEraH4CTaUDNdrdE9jH/J 9s30Z3E6BicpJ576loJKWmVoF8k1c9PeMomIZAPN/FDLzzByyU4E5faZ2 dbDPr4N8j/jdyUpZtmRBb7uA5ufeqYURnsoe3GarzkJc8QmThRncLQM1L A==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="253281184" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="253281184" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 04:40:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="628973485" Received: from unknown (HELO localhost.localdomain) ([10.190.213.111]) by fmsmga004.fm.intel.com with ESMTP; 27 Apr 2022 04:40:02 -0700 From: Kumar Amber To: ovs-dev@openvswitch.org Date: Wed, 27 Apr 2022 16:48:35 +0530 Message-Id: <20220427111836.2091315-3-kumar.amber@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220427111836.2091315-1-kumar.amber@intel.com> References: <20220427111836.2091315-1-kumar.amber@intel.com> MIME-Version: 1.0 Cc: i.maximets@ovn.org, fbl@sysclose.org, Kumar Amber Subject: [ovs-dev] [PATCH v3 2/3] flow: Refactor miniflow_extract into api. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Miniflow extract used to takes the ABI parameter struct miniflow which was removed and added inside the struct netdev_flow_key and at many places temperory structs were created inside the functions which could be cleaned in favour of a uniform API. Changing parameter to key will not affect anything as buff array is still followed by the mf bit map inside netdev_flow_key, thus there wont be any impact on offset calculations which were done earlier. Signed-off-by: Kumar Amber --- v3: - Fix comments from Cian. --- --- lib/dpif-netdev-avx512.c | 2 +- lib/dpif-netdev-private-extract.c | 2 +- lib/dpif-netdev.c | 2 +- lib/flow.c | 17 ++++++++--------- lib/flow.h | 4 +++- ofproto/ofproto.c | 10 ++++------ 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib/dpif-netdev-avx512.c b/lib/dpif-netdev-avx512.c index b7131ba3f..76eeecc9a 100644 --- a/lib/dpif-netdev-avx512.c +++ b/lib/dpif-netdev-avx512.c @@ -211,7 +211,7 @@ dp_netdev_input_outer_avx512(struct dp_netdev_pmd_thread *pmd, if (!mfex_hit) { /* Do a scalar miniflow extract into keys. */ - miniflow_extract(packet, &key->mf); + miniflow_extract(packet, key); } /* Cache TCP and byte values for all packets. */ diff --git a/lib/dpif-netdev-private-extract.c b/lib/dpif-netdev-private-extract.c index 4b2f12015..42b970e75 100644 --- a/lib/dpif-netdev-private-extract.c +++ b/lib/dpif-netdev-private-extract.c @@ -251,7 +251,7 @@ dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets, /* Run scalar miniflow_extract to get default result. */ DP_PACKET_BATCH_FOR_EACH (i, packet, packets) { pkt_metadata_init(&packet->md, in_port); - miniflow_extract(packet, &keys[i].mf); + miniflow_extract(packet, &keys[i]); /* Store known good metadata to compare with optimized metadata. */ good_l2_5_ofs[i] = packet->l2_5_ofs; diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 139e22f38..e4e4c912b 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -8170,7 +8170,7 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd, } } - miniflow_extract(packet, &key->mf); + miniflow_extract(packet, key); key->len = 0; /* Not computed yet. */ key->hash = (md_is_valid == false) diff --git a/lib/flow.c b/lib/flow.c index dd523c889..086096d5e 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -35,6 +35,7 @@ #include "jhash.h" #include "openvswitch/match.h" #include "dp-packet.h" +#include "dpif-netdev-private-dpcls.h" #include "openflow/openflow.h" #include "packets.h" #include "odp-util.h" @@ -633,15 +634,13 @@ parse_nsh(const void **datap, size_t *sizep, struct ovs_key_nsh *key) void flow_extract(struct dp_packet *packet, struct flow *flow) { - struct { - struct miniflow mf; - uint64_t buf[FLOW_U64S]; - } m; + + struct netdev_flow_key key; COVERAGE_INC(flow_extract); - miniflow_extract(packet, &m.mf); - miniflow_expand(&m.mf, flow); + miniflow_extract(packet, &key); + miniflow_expand(&key.mf, flow); } static inline bool @@ -758,7 +757,7 @@ dump_invalid_packet(struct dp_packet *packet, const char *reason) * of interest for the flow, otherwise UINT16_MAX. */ void -miniflow_extract(struct dp_packet *packet, struct miniflow *dst) +miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key) { /* Add code to this function (or its callees) to extract new fields. */ BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42); @@ -767,7 +766,7 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) const void *data = dp_packet_data(packet); size_t size = dp_packet_size(packet); ovs_be32 packet_type = packet->packet_type; - uint64_t *values = miniflow_values(dst); + uint64_t *values = miniflow_values(&key->mf); struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values, values + FLOW_U64S }; const char *frame; @@ -1110,7 +1109,7 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) } } out: - dst->map = mf.map; + key->mf.map = mf.map; } static ovs_be16 diff --git a/lib/flow.h b/lib/flow.h index c647ad83c..ba7c3c63a 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -41,6 +41,7 @@ struct dp_packet; struct ofputil_port_map; struct pkt_metadata; struct match; +struct netdev_flow_key; /* Some flow fields are mutually exclusive or only appear within the flow * pipeline. IPv6 headers are bigger than IPv4 and MPLS, and IPv6 ND packets @@ -540,7 +541,8 @@ struct pkt_metadata; /* The 'dst' must follow with buffer space for FLOW_U64S 64-bit units. * 'dst->map' is ignored on input and set on output to indicate which fields * were extracted. */ -void miniflow_extract(struct dp_packet *packet, struct miniflow *dst); +void +miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key); void miniflow_map_init(struct miniflow *, const struct flow *); void flow_wc_map(const struct flow *, struct flowmap *); size_t miniflow_alloc(struct miniflow *dsts[], size_t n, diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 2ed107800..ed4ca1e26 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -30,6 +30,7 @@ #include "connmgr.h" #include "coverage.h" #include "dp-packet.h" +#include "dpif-netdev-private-dpcls.h" #include "hash.h" #include "openvswitch/hmap.h" #include "netdev.h" @@ -3629,10 +3630,7 @@ ofproto_packet_out_init(struct ofproto *ofproto, { enum ofperr error; struct match match; - struct { - struct miniflow mf; - uint64_t buf[FLOW_U64S]; - } m; + struct netdev_flow_key key; uint16_t in_port = ofp_to_u16(po->flow_metadata.flow.in_port.ofp_port); if (in_port >= ofproto->max_ports && in_port < ofp_to_u16(OFPP_MAX)) { @@ -3653,8 +3651,8 @@ ofproto_packet_out_init(struct ofproto *ofproto, /* Store struct flow. */ opo->flow = xmalloc(sizeof *opo->flow); *opo->flow = po->flow_metadata.flow; - miniflow_extract(opo->packet, &m.mf); - flow_union_with_miniflow(opo->flow, &m.mf); + miniflow_extract(opo->packet, &key); + flow_union_with_miniflow(opo->flow, &key.mf); /* Check actions like for flow mods. We pass a 'table_id' of 0 to * ofproto_check_consistency(), which isn't strictly correct because these From patchwork Wed Apr 27 11:18:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kumar Amber X-Patchwork-Id: 1622983 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=aD2aKs6J; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KpGyR4Cp6z9s3q for ; Wed, 27 Apr 2022 21:40:15 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id C15C441A07; Wed, 27 Apr 2022 11:40:13 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4VAOzeuRqfjP; Wed, 27 Apr 2022 11:40:12 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 6C6AC400CC; Wed, 27 Apr 2022 11:40:10 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 33525C0082; Wed, 27 Apr 2022 11:40:10 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 135EDC0080 for ; Wed, 27 Apr 2022 11:40:09 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 0149B83EA7 for ; Wed, 27 Apr 2022 11:40:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=intel.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9JF6-DMt4R9P for ; Wed, 27 Apr 2022 11:40:08 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by smtp1.osuosl.org (Postfix) with ESMTPS id 1E15F82E14 for ; Wed, 27 Apr 2022 11:40:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651059608; x=1682595608; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TCcM/Q0L0YRFmNtcd3cGGPBXBpcThOS/LArItt5V/uo=; b=aD2aKs6Jj1uqKKlcGyf4UfTnniqVdmX+LgXoY0VMAR2mOL0SC4xnAmYi Cohh1Q7+grZFC/N4JenekiJ2j11hPsO3ZG/YPuai7InxKypybg04BUMPH na06uabLl32wEiRgevWZJNRdp6GIbs7MOmjRSy2ncR6wDLaev9xcDPtK1 ifT8UtsYM+7HeWCwjWC8CFaZwUNCYz62jyUHqVsQi9SvL5wtubWkY7Wzg Q6v0OGcVR6rY2Qen4a8tNu2PwRSpnzOg9XA49XRmvLFl3YSrF0gZdD7ET pVbq3SyfW0yxs0AfEPhhrSr6A0uQynxXSoigJqDSVY+nC2BoFknITBq0Y A==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="253281200" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="253281200" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 04:40:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="628973521" Received: from unknown (HELO localhost.localdomain) ([10.190.213.111]) by fmsmga004.fm.intel.com with ESMTP; 27 Apr 2022 04:40:05 -0700 From: Kumar Amber To: ovs-dev@openvswitch.org Date: Wed, 27 Apr 2022 16:48:36 +0530 Message-Id: <20220427111836.2091315-4-kumar.amber@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220427111836.2091315-1-kumar.amber@intel.com> References: <20220427111836.2091315-1-kumar.amber@intel.com> MIME-Version: 1.0 Cc: i.maximets@ovn.org, fbl@sysclose.org, Kumar Amber Subject: [ovs-dev] [PATCH v3 3/3] flow: Add autovalidator support to miniflow_extract. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" The patch adds the flag based switch between choice of using miniflow_extract in normal pipeline or select mfex_autovalidator in debug and test builds. The compile time flag used to select autoval can be done using option: ./configure CFLAGS="--enable-mfex-default-autovalidator" Signed-off-by: Kumar Amber --- v3: - Fix comments from Cian. --- --- lib/dpif-netdev-private-extract.c | 8 ++++---- lib/flow.c | 34 ++++++++++++++++++++++++++++++- lib/flow.h | 4 ++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/lib/dpif-netdev-private-extract.c b/lib/dpif-netdev-private-extract.c index 42b970e75..bbc0e3c78 100644 --- a/lib/dpif-netdev-private-extract.c +++ b/lib/dpif-netdev-private-extract.c @@ -124,8 +124,8 @@ dpif_miniflow_extract_init(void) /* For the first call, this will be choosen based on the * compile time flag. */ - VLOG_INFO("Default MFEX Extract implementation is %s.\n", - mfex_impls[mfex_idx].name); + VLOG_DBG("Default MFEX Extract implementation is %s.\n", + mfex_impls[mfex_idx].name); atomic_store_relaxed(mfex_func, (uintptr_t) mfex_impls [mfex_idx].extract_func); } @@ -251,7 +251,7 @@ dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets, /* Run scalar miniflow_extract to get default result. */ DP_PACKET_BATCH_FOR_EACH (i, packet, packets) { pkt_metadata_init(&packet->md, in_port); - miniflow_extract(packet, &keys[i]); + miniflow_extract_(packet, &keys[i]); /* Store known good metadata to compare with optimized metadata. */ good_l2_5_ofs[i] = packet->l2_5_ofs; @@ -347,7 +347,7 @@ dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets, } /* Having dumped the debug info for the batch, disable autovalidator. */ - if (batch_failed) { + if (batch_failed && (pmd != NULL)) { atomic_store_relaxed(&pmd->miniflow_extract_opt, NULL); } diff --git a/lib/flow.c b/lib/flow.c index 086096d5e..16698cedd 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -36,6 +36,8 @@ #include "openvswitch/match.h" #include "dp-packet.h" #include "dpif-netdev-private-dpcls.h" +#include "dpif-netdev-private-dpif.h" +#include "dpif-netdev-private-extract.h" #include "openflow/openflow.h" #include "packets.h" #include "odp-util.h" @@ -757,7 +759,7 @@ dump_invalid_packet(struct dp_packet *packet, const char *reason) * of interest for the flow, otherwise UINT16_MAX. */ void -miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key) +miniflow_extract_(struct dp_packet *packet, struct netdev_flow_key *key) { /* Add code to this function (or its callees) to extract new fields. */ BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42); @@ -1112,6 +1114,36 @@ miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key) key->mf.map = mf.map; } +void +miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key) +{ +#ifdef MFEX_AUTOVALIDATOR_DEFAULT + static struct ovsthread_once once_enable = OVSTHREAD_ONCE_INITIALIZER; + if (ovsthread_once_start(&once_enable)) { + dpif_miniflow_extract_init(); + ovsthread_once_done(&once_enable); + } + struct dp_packet_batch packets; + const struct pkt_metadata *md = &packet->md; + dp_packet_batch_init(&packets); + dp_packet_batch_add(&packets, packet); + const uint32_t recirc_depth = *recirc_depth_get(); + + /* Currently AVX512 DPIF dont support recirculation + * Once the support will be added the condition would + * be removed. + */ + if (recirc_depth) { + miniflow_extract_(packet, key); + } else { + dpif_miniflow_extract_autovalidator(&packets, key, 1, + odp_to_u32(md->in_port.odp_port), NULL); + } +#else + miniflow_extract_(packet, key); +#endif +} + static ovs_be16 parse_dl_type(const void **datap, size_t *sizep, ovs_be16 *first_vlan_tci_p) { diff --git a/lib/flow.h b/lib/flow.h index ba7c3c63a..7b277275f 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -543,6 +543,10 @@ struct pkt_metadata; * were extracted. */ void miniflow_extract(struct dp_packet *packet, struct netdev_flow_key *key); + +void +miniflow_extract_(struct dp_packet *packet, struct netdev_flow_key *key); + void miniflow_map_init(struct miniflow *, const struct flow *); void flow_wc_map(const struct flow *, struct flowmap *); size_t miniflow_alloc(struct miniflow *dsts[], size_t n,