diff mbox series

[ovs-dev,v3,05/12] dpif-netdev: Add configure to enable autovalidator at build time.

Message ID 20210517135708.685517-6-kumar.amber@intel.com
State Superseded
Headers show
Series MFEX Infrastructure + Optimizations | expand

Commit Message

Kumar Amber May 17, 2021, 1:57 p.m. UTC
This commit adds a new command to allow the user to enable
autovalidatior by default at build time thus allowing for
runnig unit test by default.

 $ ./configure --enable-mfex-default-autovalidator

Signed-off-by: Kumar Amber <kumar.amber@intel.com>
Co-authored-by: Harry van Haaren <harry.van.haaren@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 Documentation/topics/dpdk/bridge.rst |  5 +++++
 NEWS                                 | 10 ++++++++++
 acinclude.m4                         | 16 ++++++++++++++++
 configure.ac                         |  1 +
 lib/dpif-netdev-private-extract.c    | 24 ++++++++++++++++++++++++
 lib/dpif-netdev-private-extract.h    | 10 ++++++++++
 lib/dpif-netdev.c                    |  7 +++++--
 7 files changed, 71 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/Documentation/topics/dpdk/bridge.rst b/Documentation/topics/dpdk/bridge.rst
index e71d47d40..6afe45c83 100644
--- a/Documentation/topics/dpdk/bridge.rst
+++ b/Documentation/topics/dpdk/bridge.rst
@@ -302,6 +302,11 @@  To set the Miniflow autovalidator, use this command ::
 
     $ ovs-appctl dpif-netdev/miniflow-parser-set autovalidator
 
+A compile time option is available in order to test it with the OVS unit
+test suite. Use the following configure option ::
+
+    $ ./configure --enable-mfex-default-autovalidator
+
 Unit Test Miniflow Extract
 ++++++++++++++++++++++++++
 
diff --git a/NEWS b/NEWS
index 69091979a..e0c3f1d4f 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,16 @@  Post-v2.15.0
      * OVS validated with DPDK 20.11.1. It is recommended to use this version
        until further releases.
      * Cache results for CPU ISA checks, reduces overhead on repeated lookups.
+     * Add command line option to switch between mfex function pointers.
+     * Add miniflow extract auto-validator function to compare different
+       miniflow extract implementations against default implementation.
+     * Add study function to miniflow function table which studies packet
+       and automatically chooses the best miniflow implementation for that
+       traffic.
+     * Add AVX512 based optimized miniflow extract function for traffic type
+       IP/UDP.
+     * Add build time configure command to enable auto-validatior as default
+       miniflow implementation at build time.
 
 
 v2.15.0 - 15 Feb 2021
diff --git a/acinclude.m4 b/acinclude.m4
index 5fbcd9872..e2704cfda 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -14,6 +14,22 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+dnl Set OVS MFEX Autovalidator as default miniflow extract at compile time?
+dnl This enables automatically running all unit tests with all MFEX
+dnl implementations.
+AC_DEFUN([OVS_CHECK_MFEX_AUTOVALIDATOR], [
+  AC_ARG_ENABLE([mfex-default-autovalidator],
+                [AC_HELP_STRING([--enable-mfex-default-autovalidator], [Enable MFEX autovalidator as default miniflow_extract implementation.])],
+                [autovalidator=yes],[autovalidator=no])
+  AC_MSG_CHECKING([whether MFEX Autovalidator is default implementation])
+  if test "$autovalidator" != yes; then
+    AC_MSG_RESULT([no])
+  else
+    OVS_CFLAGS="$OVS_CFLAGS -DMFEX_AUTOVALIDATOR_DEFAULT"
+    AC_MSG_RESULT([yes])
+  fi
+])
+
 dnl Set OVS DPCLS Autovalidator as default subtable search at compile time?
 dnl This enables automatically running all unit tests with all DPCLS
 dnl implementations.
diff --git a/configure.ac b/configure.ac
index e45685a6c..46c402892 100644
--- a/configure.ac
+++ b/configure.ac
@@ -186,6 +186,7 @@  OVS_ENABLE_SPARSE
 OVS_CTAGS_IDENTIFIERS
 OVS_CHECK_DPCLS_AUTOVALIDATOR
 OVS_CHECK_DPIF_AVX512_DEFAULT
+OVS_CHECK_MFEX_AUTOVALIDATOR
 OVS_CHECK_BINUTILS_AVX512
 
 AC_ARG_VAR(KARCH, [Kernel Architecture String])
diff --git a/lib/dpif-netdev-private-extract.c b/lib/dpif-netdev-private-extract.c
index 81829e6fa..3a480866d 100644
--- a/lib/dpif-netdev-private-extract.c
+++ b/lib/dpif-netdev-private-extract.c
@@ -230,3 +230,27 @@  dpif_miniflow_extract_autovalidator(struct dp_packet_batch *packets,
      */
     return 0;
 }
+
+/* Variable to hold the defaualt mfex implementation. */
+static miniflow_extract_func default_mfex_func = NULL;
+
+void
+dpif_miniflow_extract_set_default(miniflow_extract_func func)
+{
+    default_mfex_func = func;
+}
+
+miniflow_extract_func
+dpif_miniflow_extract_get_default(void)
+{
+
+#ifdef MFEX_AUTOVALIDATOR_DEFAULT
+    ovs_assert(mfex_impls[0].extract_func ==
+               dpif_miniflow_extract_autovalidator);
+    VLOG_INFO("Default miniflow Extract implementation %s \n",
+              mfex_impls[0].name);
+    return mfex_impls[0].extract_func;
+#else
+    return default_mfex_func;
+#endif
+}
diff --git a/lib/dpif-netdev-private-extract.h b/lib/dpif-netdev-private-extract.h
index 3ada413bb..d8a284db7 100644
--- a/lib/dpif-netdev-private-extract.h
+++ b/lib/dpif-netdev-private-extract.h
@@ -118,4 +118,14 @@  mfex_study_traffic(struct dp_packet_batch *packets,
                    uint32_t keys_size, odp_port_t in_port,
                    void *pmd_handle);
 
+/* Retrieve the default miniflow extract or auto-validator
+ * based upon build time configuration choosen by the user. */
+miniflow_extract_func
+dpif_miniflow_extract_get_default(void);
+
+/* Returns the default MFEX which is first ./configure selected, but can be
+ * overridden at runtime. */
+void
+dpif_miniflow_extract_set_default(miniflow_extract_func func);
+
 #endif /* DPIF_NETDEV_AVX512_EXTRACT */
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 9345fd5c7..ab313326a 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -1179,6 +1179,9 @@  dpif_miniflow_extract_impl_set(struct unixctl_conn *conn, int argc,
 
     ovs_mutex_unlock(&dp_netdev_mutex);
 
+    /* Set the default implementation for PMD threads created in the future. */
+    dpif_miniflow_extract_set_default(*new_func);
+
     /* Reply with success to command. */
     struct ds reply = DS_EMPTY_INITIALIZER;
     ds_put_format(&reply, "Miniflow implementation set to %s.\n", mfex_name);
@@ -6253,8 +6256,8 @@  dp_netdev_configure_pmd(struct dp_netdev_pmd_thread *pmd, struct dp_netdev *dp,
     /* Initialize DPIF function pointer to the default configured version. */
     pmd->netdev_input_func = dp_netdev_impl_get_default();
 
-    /*Init default miniflow_extract function */
-    pmd->miniflow_extract_opt = NULL;
+    /* Init default miniflow_extract function */
+    pmd->miniflow_extract_opt = dpif_miniflow_extract_get_default();
 
     /* init the 'flow_cache' since there is no
      * actual thread created for NON_PMD_CORE_ID. */