From patchwork Wed Jan 12 16:11:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Van Haaren, Harry" X-Patchwork-Id: 1579213 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=kp0eE91e; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (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 4JYszK2VVYz9sRR for ; Thu, 13 Jan 2022 03:12:45 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 4746E84B8D; Wed, 12 Jan 2022 16:12:42 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org 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 ELYtmpKf1aNY; Wed, 12 Jan 2022 16:12:41 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id D517284BB1; Wed, 12 Jan 2022 16:12:39 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5278FC0076; Wed, 12 Jan 2022 16:12:38 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6DA42C0076 for ; Wed, 12 Jan 2022 16:12:37 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 580906FBD6 for ; Wed, 12 Jan 2022 16:12:37 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=intel.com 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 I3YBadR2bXde for ; Wed, 12 Jan 2022 16:12:36 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by smtp3.osuosl.org (Postfix) with ESMTPS id 9A5B06FBD3 for ; Wed, 12 Jan 2022 16:12:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642003956; x=1673539956; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7OpeIGim5P+L8ryOaK85pZOUzRBs7X1GWiAQHdd4ddk=; b=kp0eE91e4hP50GVa2NSJD9n9rtKjJC711cRGgsUcw/qDgCegv0yCzrwO qm5AJDJ3y5e1P1OL80zvrYKf3lnAz5QTWJUV2VKMPtzUqqfwxQSdAY7HO BS9jQOcgO3eDsN666ZsVgAQ5SU9ErqpHfnHfoZCe+9m9F7Uqg8OEv0e+7 6SoVjzhUAEFlzjgqTuKb3ibpvgm6EKLGSFyLmQcwfZf8aAASRbSZEPm6E IzWt5Qq2cPim/RdjZOw/fJO/4toXyxnuqBVhYRKxUc45UmXkSDRDLnMYM MdUr9Lna4ZLKCYmyOFwSV55hpfGY1GvTxvWm7eNg2opZQ8ahk42mqJ1Ni Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10224"; a="304506692" X-IronPort-AV: E=Sophos;i="5.88,282,1635231600"; d="scan'208";a="304506692" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 08:11:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,282,1635231600"; d="scan'208";a="620239056" Received: from silpixa00401120.ir.intel.com ([10.55.128.255]) by fmsmga002.fm.intel.com with ESMTP; 12 Jan 2022 08:11:18 -0800 From: Harry van Haaren To: ovs-dev@openvswitch.org Date: Wed, 12 Jan 2022 16:11:07 +0000 Message-Id: <20220112161107.1463714-3-harry.van.haaren@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220112161107.1463714-1-harry.van.haaren@intel.com> References: <20211207110425.3873101-1-kumar.amber@intel.com> <20220112161107.1463714-1-harry.van.haaren@intel.com> MIME-Version: 1.0 Cc: kumar.amber@intel.com, i.maximets@ovn.org Subject: [ovs-dev] [PATCH v5 2/2] dpif-netdev/mfex: Optimize packet hash and enable autovalidator 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" From: Kumar Amber This patch adds error checking of packet hashes to the mfex autovalidator infrastructure, ensuring that hashes calculated by optimized mfex implementations is identical to the scalar code. This patch avoids calculating the software hash of the packet again if the optimized miniflow-extract hit and has already calculated the packet hash. In cases of scalar miniflow extract, the normal hashing calculation is performed. Signed-off-by: Kumar Amber Signed-off-by: Harry van Haaren --- v5: - Always use SW hashing to validate optimized hash implementations --- lib/dpif-netdev-avx512.c | 6 +++--- lib/dpif-netdev-private-extract.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/dpif-netdev-avx512.c b/lib/dpif-netdev-avx512.c index b7131ba3f..c68b79f6b 100644 --- a/lib/dpif-netdev-avx512.c +++ b/lib/dpif-netdev-avx512.c @@ -212,15 +212,15 @@ 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); + key->len = netdev_flow_key_size(miniflow_n_values(&key->mf)); + key->hash = dpif_netdev_packet_get_rss_hash_orig_pkt(packet, + &key->mf); } /* Cache TCP and byte values for all packets. */ pkt_meta[i].bytes = dp_packet_size(packet); pkt_meta[i].tcp_flags = miniflow_get_tcp_flags(&key->mf); - key->len = netdev_flow_key_size(miniflow_n_values(&key->mf)); - key->hash = dpif_netdev_packet_get_rss_hash_orig_pkt(packet, &key->mf); - if (emc_enabled) { f = emc_lookup(&cache->emc_cache, key); diff --git a/lib/dpif-netdev-private-extract.c b/lib/dpif-netdev-private-extract.c index a29bdcfa7..2957c0172 100644 --- a/lib/dpif-netdev-private-extract.c +++ b/lib/dpif-netdev-private-extract.c @@ -252,8 +252,15 @@ 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) { + + /* remove the NIC RSS bit to force SW hashing for validation. */ + dp_packet_reset_offload(packet); + pkt_metadata_init(&packet->md, in_port); miniflow_extract(packet, &keys[i].mf); + keys[i].len = netdev_flow_key_size(miniflow_n_values(&keys[i].mf)); + keys[i].hash = dpif_netdev_packet_get_rss_hash_orig_pkt(packet, + &keys[i].mf); /* Store known good metadata to compare with optimized metadata. */ good_l2_5_ofs[i] = packet->l2_5_ofs; @@ -271,7 +278,10 @@ dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets, /* Reset keys and offsets before each implementation. */ memset(test_keys, 0, keys_size * sizeof(struct netdev_flow_key)); DP_PACKET_BATCH_FOR_EACH (i, packet, packets) { + /* Ensure offsets is set by the opt impl. */ dp_packet_reset_offsets(packet); + /* Ensure packet hash is re-calculated by opt impl. */ + dp_packet_reset_offload(packet); } /* Call optimized miniflow for each batch of packet. */ uint32_t hit_mask = mfex_impls[j].extract_func(packets, test_keys, @@ -303,6 +313,15 @@ dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets, failed = 1; } + /* Check hashes are equal. */ + if ((keys[i].hash != test_keys[i].hash) || + (keys[i].len != test_keys[i].len)) { + ds_put_format(&log_msg, "Good hash: %d len: %d\tTest hash:%d" + " len:%d\n", keys[i].hash, keys[i].len, + test_keys[i].hash, test_keys[i].len); + failed = 1; + } + if (!miniflow_equal(&keys[i].mf, &test_keys[i].mf)) { uint32_t block_cnt = miniflow_n_values(&keys[i].mf); uint32_t test_block_cnt = miniflow_n_values(&test_keys[i].mf);