Hi Eelco, 

I've investigated the issue and resolved the failing unit tests. 
Diff's are provided below or if it's convenient I can send as patchset instead.

Fix for 05/11: odp-execute: Add command to switch action implementation.

diff --git a/tests/pmd.at b/tests/pmd.at
index ac05f5f7d..140ce8a8d 100644
--- a/tests/pmd.at
+++ b/tests/pmd.at
@@ -1205,8 +1205,12 @@ AT_SETUP([PMD - ovs-actions configuration])
 OVS_VSWITCHD_START([], [], [], [--dummy-numa 0,0])
 AT_CHECK([ovs-vsctl add-port br0 p1 -- set Interface p1 type=dummy-pmd])

-dnl Scalar impl is set by default.
 AT_CHECK([ovs-vsctl show], [], [stdout])
+
+dnl Set the scalar first, so we always have the scalar impl as Active.
+AT_CHECK([ovs-appctl dpif-netdev/action-impl-set scalar], [0], [dnl
+Action implementation set to scalar.
+])
 AT_CHECK([ovs-appctl dpif-netdev/action-impl-show | grep "scalar"], [], [dnl
   scalar (available: Yes, active: Yes)
 ])


Fix for  06/11 dpif-netdev: Add configure option to enable actions 
autovalidator at build time.

diff --git a/acinclude.m4 b/acinclude.m4
index 98f4599b1..18e61b522 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -28,7 +28,7 @@ AC_DEFUN([OVS_CHECK_ACTIONS_AUTOVALIDATOR], [
   if test "$autovalidator" != yes; then
     AC_MSG_RESULT([no])
   else
-    AC_DEFINE([MFEX_AUTOVALIDATOR_DEFAULT], [1],
+    AC_DEFINE([ACTIONS_AUTOVALIDATOR_DEFAULT], [1],
               [Autovalidator for actions is a default implementation.])
     AC_MSG_RESULT([yes])
   Fi


Fix for 10/11 odp-execute: Add ISA implementation of set_masked ETH

diff --git a/lib/odp-execute-private.c b/lib/odp-execute-private.c
index e2d650779..6c3dabbd0 100644
--- a/lib/odp-execute-private.c
+++ b/lib/odp-execute-private.c
@@ -21,6 +21,7 @@

 #include "dpdk.h"
 #include "dp-packet.h"
+#include "odp-execute.h"
 #include "odp-execute-private.h"
 #include "odp-netlink.h"
 #include "odp-util.h"
@@ -243,6 +244,13 @@ action_set_masked_init(struct dp_packet_batch *batch 
OVS_UNUSED,
     if (autoval_impl.set_masked_funcs[attr_type]) {
         set_masked = true;
         autoval_impl.set_masked_funcs[attr_type](batch, a);
+    } else {
+        struct dp_packet *packet;
+        a = nl_attr_get(a);
+
+        DP_PACKET_BATCH_FOR_EACH (i, packet, batch) {
+            odp_execute_masked_set_action(packet, a);
+        }
     }
 }

diff --git a/lib/odp-execute.c b/lib/odp-execute.c
index db6e1ec03..2aa213399 100644
--- a/lib/odp-execute.c
+++ b/lib/odp-execute.c
@@ -561,7 +561,7 @@ odp_execute_set_action(struct dp_packet *packet, const 
struct nlattr *a)
     }
 }

-static void
+void
 odp_execute_masked_set_action(struct dp_packet *packet,
                               const struct nlattr *a)

diff --git a/lib/odp-execute.h b/lib/odp-execute.h
index 762b99473..4857cb91f 100644
--- a/lib/odp-execute.h
+++ b/lib/odp-execute.h
@@ -53,4 +53,7 @@ void odp_execute_actions(void *dp, struct dp_packet_batch 
*batch,

 #define get_mask(a, type) ((const type *)(const void *)(a + 1) + 1)

+void odp_execute_masked_set_action(struct dp_packet *packet,
+                                   const struct nlattr *a);
+
 #endif

diff --git a/lib/odp-execute-avx512.c b/lib/odp-execute-avx512.c
index aa65afec7..22a96b1c8 100644
--- a/lib/odp-execute-avx512.c
+++ b/lib/odp-execute-avx512.c
@@ -26,6 +26,7 @@
 #include "cpu.h"
 #include "dp-packet.h"
 #include "immintrin.h"
+#include "odp-execute.h"
 #include "odp-execute-private.h"
 #include "odp-netlink.h"
 #include "openvswitch/vlog.h"
@@ -411,6 +412,13 @@ action_avx512_set_masked(struct dp_packet_batch *batch 
OVS_UNUSED,

     if (avx512_impl.set_masked_funcs[attr_type]) {
         avx512_impl.set_masked_funcs[attr_type](batch, a);
+    } else {
+        struct dp_packet *packet;
+        a = nl_attr_get(a);
+
+        DP_PACKET_BATCH_FOR_EACH (i, packet, batch) {
+            odp_execute_masked_set_action(packet, a);
+        }
     }

diff --git a/lib/odp-execute-avx512.c b/lib/odp-execute-avx512.c
index aa2ed9022..6431b49dc 100644
--- a/lib/odp-execute-avx512.c
+++ b/lib/odp-execute-avx512.c
@@ -197,8 +197,8 @@ static void
 action_avx512_set_masked(struct dp_packet_batch *batch OVS_UNUSED,
                          const struct nlattr *a)
 {
-    a = nl_attr_get(a);
-    enum ovs_key_attr attr_type = nl_attr_type(a);
+    const struct nlattr *type = nl_attr_get(a);
+    enum ovs_key_attr attr_type = nl_attr_type(type);

Thanks, 
Emma

> -----Original Message-----
> From: Eelco Chaudron <[email protected]>
> Sent: Tuesday 21 June 2022 14:29
> To: Finn, Emma <[email protected]>
> Cc: Stokes, Ian <[email protected]>; Van Haaren, Harry
> <[email protected]>; [email protected]
> Subject: Re: [PATCH v7 00/11] Actions Infrastructure + Optimizations
> 
> Hi Emma,
> 
> I started reviewing your patch and found some issues that need investigation.
> 
> With the autovalidator, some tests are failing. But before you can run them, 
> you
> need to fix your patch 7, as the autovalidator enablement is not working:
> 
> [wsfd-advnetlab44:~/...DK_v21.11/ovs_github]$ git diff diff --git 
> a/acinclude.m4
> b/acinclude.m4 index 98f4599b1..18e61b522 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -28,7 +28,7 @@ AC_DEFUN([OVS_CHECK_ACTIONS_AUTOVALIDATOR], [
>    if test "$autovalidator" != yes; then
>      AC_MSG_RESULT([no])
>    else
> -    AC_DEFINE([MFEX_AUTOVALIDATOR_DEFAULT], [1],
> +    AC_DEFINE([ACTIONS_AUTOVALIDATOR_DEFAULT], [1],
>                [Autovalidator for actions is a default implementation.])
>      AC_MSG_RESULT([yes])
>    fi
> 
> 
> Build OVS (without DPDK) and run the following tests:
> 
> # ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc && make -j 
> 32
> check TESTSUITEFLAGS="1040 1041 1132 1145 1294 2493"
> ...
> ...
> ## ------------------------------- ##
> ## openvswitch 2.17.90 test suite. ##
> ## ------------------------------- ##
> 
> dpif-netdev
> 
> 1040: dpif-netdev - partial hw offload with packet modifications - dummy ok
> 1041: dpif-netdev - partial hw offload with packet modifications - dummy-pmd
> ok
> 
> ofproto-dpif
> 
> 1132: ofproto-dpif - controller                       ok
> 1145: ofproto-dpif - ARP modification slow-path       ok
> 
> ofproto-dpif - flow translation resource limits
> 
> 1294: ofproto-dpif - Neighbor Discovery set-field with checksum update ok
> 
> network service header (NSH)
> 
> 2493: nsh - triangle PTAP bridge setup with NSH over vxlan-gpe ok
> 
> ## ------------- ##
> ## Test results. ##
> ## ------------- ##
> 
> All 6 tests were successful.
> 
> 
> Now with the auto-validator on an AVX512 machine:
> 
> # ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --enable-
> actions-default-autovalidator && make -j 32 check TESTSUITEFLAGS="1040
> 1041 1132 1145 1294 2493"
> ...
> ...
> ## ------------------------------- ##
> ## openvswitch 2.17.90 test suite. ##
> ## ------------------------------- ##
> 
> dpif-netdev
> 
> 1040: dpif-netdev - partial hw offload with packet modifications - dummy
> FAILED (dpif-netdev.at:542)
> 1041: dpif-netdev - partial hw offload with packet modifications - dummy-pmd
> FAILED (dpif-netdev.at:543)
> 
> ofproto-dpif
> 
> 1132: ofproto-dpif - controller                       FAILED 
> (ofproto-dpif.at:1979)
> 1145: ofproto-dpif - ARP modification slow-path       FAILED (ofproto-
> dpif.at:3777)
> 
> ofproto-dpif - flow translation resource limits
> 
> 1294: ofproto-dpif - Neighbor Discovery set-field with checksum update FAILED
> (ofproto-dpif.at:9936)
> 
> network service header (NSH)
> 
> 2493: nsh - triangle PTAP bridge setup with NSH over vxlan-gpe FAILED
> (nsh.at:778)
> 
> ## ------------- ##
> ## Test results. ##
> ## ------------- ##
> 
> ERROR: All 6 tests were run,
> 6 failed unexpectedly.
> 
> 
> Please start some investigation, but do NOT send out a v8, until I’ve 
> completed
> v7. If there is a small change I can apply that fixes the issue, just sent 
> that in this
> thread.
> 
> 
> //Eelco
> 
> On 14 Jun 2022, at 13:57, Emma Finn wrote:
> 
> > This patchset introduces actions infrastructure changes which allows
> > the user to choose between different action implementations based on
> > CPU ISA by using different commands.  The infrastructure also provides
> > a way to check the correctness of the ISA optimized action version
> > against the scalar version.
> >
> > This series  also introduces optimized versions of the following
> > actions:
> >  - push_vlan
> >  - pop_vlan
> >  - set_masked eth
> >  - set_masked ipv4
> >
> > Below is a table indicating the relative performance benefits for
> > these actions.
> >
> > +-----------------------------------------------+-------------------+-----------------+
> > | Actions                                       | Salar with series |AVX 
> > with series |
> > +-----------------------------------------------+-------------------+-----------------+
> > | mod_dl_dst                                    | 1.04x             |1.15x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> > | push_vlan                                     | 1.10x             |1.23x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> > | strip_vlan                                    | 1.05x             |1.14x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> > | mod_ipv4 1 x field                            | 1.04x             |1.04x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> > | mod_ipv4 4 x fields                           | 1.04x             |1.23x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> > | strip_vlan + mod_dl_dst + mod_ipv4 4 x fields | 1.06x             |1.36x  
> >          |
> > +-----------------------------------------------+-------------------+-----------------+
> >
> > ---
> > v7:
> > - Fix review comments from Eelco.
> > ---
> > v6:
> > - Rebase to master
> > - Add ISA implementation of set_masked eth and ipv4 actions
> > - Fix incorrect checksums in input packets for ofproto-dpif unit tests
> > ---
> > v5:
> > - Rebase to master
> > - Minor change to variable names
> > - Added Tags from Harry.
> > ---
> > v4:
> > - Rebase to master
> > - Add ISA implementation of push_vlan action
> > ---
> > v3:
> > - Refactored to fix unit test failures
> > - Removed some sign-off on commits
> > ---
> > v2:
> > - Fix the CI build issues
> > ---
> >
> > Emma Finn (10):
> >   ofproto-dpif: Fix incorrect checksums in input packets
> >   odp-execute: Add function pointers to odp-execute for different action
> >     implementations.
> >   odp-execute: Add function pointer for pop_vlan action.
> >   odp-execute: Add auto validation function for actions.
> >   odp-execute: Add command to switch action implementation.
> >   odp-execute: Add ISA implementation of actions.
> >   odp-execute: Add ISA implementation of pop_vlan action.
> >   odp-execute: Add ISA implementation of push_vlan action.
> >   odp-execute: Add ISA implementation of set_masked ETH
> >   odp-execute: Add ISA implementation of set_masked IPv4 action
> >
> > Kumar Amber (1):
> >   dpif-netdev: Add configure option to enable actions autovalidator at
> >     build time.
> >
> >  Documentation/ref/ovs-actions.7.rst |  26 ++
> >  Documentation/topics/testing.rst    |  24 +-
> >  NEWS                                |  11 +
> >  acinclude.m4                        |  21 ++
> >  configure.ac                        |   1 +
> >  lib/automake.mk                     |   8 +-
> >  lib/cpu.c                           |   1 +
> >  lib/cpu.h                           |   1 +
> >  lib/dp-packet.c                     |  23 ++
> >  lib/dp-packet.h                     |   4 +
> >  lib/dpif-netdev-unixctl.man         |   8 +
> >  lib/dpif-netdev.c                   |  42 +++
> >  lib/odp-execute-avx512.c            | 463 ++++++++++++++++++++++++++++
> >  lib/odp-execute-private.c           | 266 ++++++++++++++++
> >  lib/odp-execute-private.h           |  99 ++++++
> >  lib/odp-execute.c                   | 183 ++++++++---
> >  lib/odp-execute.h                   |  14 +
> >  tests/ofproto-dpif.at               |  10 +-
> >  tests/pmd.at                        |  30 ++
> >  19 files changed, 1183 insertions(+), 52 deletions(-)  create mode
> > 100644 lib/odp-execute-avx512.c  create mode 100644
> > lib/odp-execute-private.c  create mode 100644
> > lib/odp-execute-private.h
> >
> > --
> > 2.32.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to