Hi,
I think Ian covered all issues and I suspect this patch might
change a bit due to comments on previous patches.
fbl
On Thu, Jun 17, 2021 at 09:57:47PM +0530, Kumar Amber wrote:
> 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.am...@intel.com>
> Co-authored-by: Harry van Haaren <harry.van.haa...@intel.com>
> Signed-off-by: Harry van Haaren <harry.van.haa...@intel.com>
> ---
> Documentation/topics/dpdk/bridge.rst | 5 +++++
> NEWS | 12 +++++++++++-
> 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, 72 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/topics/dpdk/bridge.rst
> b/Documentation/topics/dpdk/bridge.rst
> index b262b98f8..1c78adc75 100644
> --- a/Documentation/topics/dpdk/bridge.rst
> +++ b/Documentation/topics/dpdk/bridge.rst
> @@ -307,6 +307,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 63a485309..ed9f4d4c4 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -24,6 +24,17 @@ Post-v2.15.0
> * An optimized miniflow extract (mfex) implementation is now available,
> which uses CPU SIMD ISA to parse specific traffic profiles
> efficiently.
> Refer to the documentation for details on how to enable it at runtime.
> + * 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.
> - ovs-ctl:
> * New option '--no-record-hostname' to disable hostname configuration
> in ovsdb on startup.
> @@ -35,7 +46,6 @@ Post-v2.15.0
> * New option '--election-timer' to the 'create-cluster' command to set
> the
> leader election timer during cluster creation.
>
> -
> v2.15.0 - 15 Feb 2021
> ---------------------
> - OVSDB:
> 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 d86268a1d..2008e5ee5 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 4f4ab2790..716e0debf 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -1177,6 +1177,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);
> @@ -6282,8 +6285,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. */
> --
> 2.25.1
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
--
fbl
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev