> -----Original Message-----
> From: Stokes, Ian <[email protected]>
> Sent: Wednesday 12 January 2022 18:45
> To: Finn, Emma <[email protected]>; [email protected]; Van Haaren,
> Harry <[email protected]>; Amber, Kumar
> <[email protected]>; [email protected]
> Subject: RE: [PATCH v5 4/8] odp-execute: Add command to switch action
> implementation.
> 
> > This commit adds a new command to allow the user to switch the active
> > action implementation at runtime. A probe function is executed before
> > switching the implementation, to ensure the CPU is capable of running
> > the ISA required.
> >
> > Usage:
> >   $ ovs-appctl dpif-netdev/action-impl-set scalar
> >
> > This commit also adds a new command to retrieve the list of available
> > action implementations. This can be used by to check what
> > implementations of actions are available and what implementation is active
> during runtime.
> >
> > Usage:
> >    $ ovs-appctl dpif-netdev/action-impl-get
> 
> Hi Emma,
> 
> In general this look straight forward enough. General query, I assume that 
> scalar
> is always the default used, and that the user does not actually have to set 
> it to
> use it by default?
> 
> The only time the user should have to set it to scalar would be if they were 
> using
> a different implementation and wished to revert to scalar?
> 
> Thanks
> Ian

Correct, Scalar implementation is set by default. The only time the user would 
have
to set it to scalar would be if they have already been using a different 
implementation. 

Thanks, 
Emma
> >
> > Added separate test-case for ovs-actions get/set commands:
> > 1023: PMD - ovs-actions configuration
> >
> > Signed-off-by: Emma Finn <[email protected]>
> > Co-authored-by: Kumar Amber <[email protected]>
> > Signed-off-by: Kumar Amber <[email protected]>
> > Acked-by: Harry van Haaren <[email protected]>
> > ---
> >  NEWS                        |  2 ++
> >  lib/dpif-netdev-unixctl.man |  6 ++++++
> >  lib/dpif-netdev.c           | 39 +++++++++++++++++++++++++++++++++++++
> >  lib/odp-execute-private.c   | 14 +++++++++++++
> >  lib/odp-execute.h           |  3 +++
> >  tests/pmd.at                | 21 ++++++++++++++++++++
> >  6 files changed, 85 insertions(+)
> >
> > diff --git a/NEWS b/NEWS
> > index 26be454df..42bb876da 100644
> > --- a/NEWS
> > +++ b/NEWS
> > @@ -21,6 +21,8 @@ Post-v2.16.0
> >       * Add support for running threads on cores >= RTE_MAX_LCORE.
> >       * Add actions auto-validator function to compare different actions
> >         implementations against default implementation.
> > +     * Add command line option to switch between different actions
> > +       implementations available at run time.
> >     - Python:
> >       * For SSL support, the use of the pyOpenSSL library has been replaced
> >         with the native 'ssl' module.
> > diff --git a/lib/dpif-netdev-unixctl.man b/lib/dpif-netdev-unixctl.man
> > index 8cd847416..500daf4de 100644
> > --- a/lib/dpif-netdev-unixctl.man
> > +++ b/lib/dpif-netdev-unixctl.man
> > @@ -262,3 +262,9 @@ PMDs in the case where no value is specified.  By
> > default "scalar" is used.
> >  \fIstudy_cnt\fR defaults to 128 and indicates the number of packets
> > that the  "study" miniflow implementation must parse before choosing
> > an optimal  implementation.
> > +
> > +.IP "\fBdpif-netdev/action-impl-get\fR
> > +Lists the actions implementations that are available.
> > +.
> > +.IP "\fBdpif-netdev/action-impl-set\fR \fIaction_impl\fR"
> > +Sets the action to be used to \fIaction_impl\fR. By default "scalar" is 
> > used.
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index
> > eada4fcd7..f6cc779ef 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -60,6 +60,7 @@
> >  #include "netdev-vport.h"
> >  #include "netlink.h"
> >  #include "odp-execute.h"
> > +#include "odp-execute-private.h"
> >  #include "odp-util.h"
> >  #include "openvswitch/dynamic-string.h"
> >  #include "openvswitch/list.h"
> > @@ -1330,6 +1331,38 @@ error:
> >      ds_destroy(&reply);
> >  }
> >
> > +static void
> > +action_impl_set(struct unixctl_conn *conn, int argc OVS_UNUSED,
> > +                const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
> > +{
> > +    struct ds reply = DS_EMPTY_INITIALIZER;
> > +
> > +    int32_t err = odp_actions_impl_set(argv[1]);
> > +    if (err) {
> > +        ds_put_format(&reply, "action implementation %s not found.\n",
> > +                      argv[1]);
> > +        const char *reply_str = ds_cstr(&reply);
> > +        unixctl_command_reply_error(conn, reply_str);
> > +        VLOG_ERR("%s", reply_str);
> > +        ds_destroy(&reply);
> > +        return;
> > +    }
> > +
> > +    ds_put_format(&reply, "action implementation set to %s.\n", argv[1]);
> > +    unixctl_command_reply(conn, ds_cstr(&reply));
> > +    ds_destroy(&reply);
> > +}
> > +
> > +static void
> > +action_impl_get(struct unixctl_conn *conn, int argc OVS_UNUSED,
> > +                const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
> > +{
> > +    struct ds reply = DS_EMPTY_INITIALIZER;
> > +    odp_execute_action_get(&reply);
> > +    unixctl_command_reply(conn, ds_cstr(&reply));
> > +    ds_destroy(&reply);
> > +}
> > +
> >  static void
> >  dpif_netdev_pmd_rebalance(struct unixctl_conn *conn, int argc,
> >                            const char *argv[], void *aux OVS_UNUSED)
> > @@ -1567,6 +1600,12 @@ dpif_netdev_init(void)
> >      unixctl_command_register("dpif-netdev/miniflow-parser-get", "",
> >                               0, 0, dpif_miniflow_extract_impl_get,
> >                               NULL);
> > +    unixctl_command_register("dpif-netdev/action-impl-set", "name",
> > +                             1, 1, action_impl_set,
> > +                             NULL);
> > +    unixctl_command_register("dpif-netdev/action-impl-get", "",
> > +                             0, 0, action_impl_get,
> > +                             NULL);
> >      return 0;
> >  }
> >
> > diff --git a/lib/odp-execute-private.c b/lib/odp-execute-private.c
> > index a4155b5df..c17882a33 100644
> > --- a/lib/odp-execute-private.c
> > +++ b/lib/odp-execute-private.c
> > @@ -74,6 +74,20 @@ odp_execute_action_set(const char *name,
> >      return -1;
> >  }
> >
> > +void
> > +odp_execute_action_get(struct ds *string) {
> > +    uint32_t i;
> > +
> > +    ds_put_cstr(string, "Available Actions implementations:\n");
> > +    for (i = 0; i < ACTION_IMPL_MAX; i++) {
> > +        ds_put_format(string, "  %s (available: %s, active: %s)\n",
> > +                      action_impls[i].name,
> > +                      action_impls[i].available ? "True" : "False",
> > +                      i == active_action_impl_index ? "True" : "False");
> > +    }
> > +}
> > +
> >  void
> >  odp_execute_action_init(void)
> >  {
> > diff --git a/lib/odp-execute.h b/lib/odp-execute.h index
> > 6441392b9..4f4cdc4ac 100644
> > --- a/lib/odp-execute.h
> > +++ b/lib/odp-execute.h
> > @@ -23,6 +23,7 @@
> >  #include <stdint.h>
> >  #include "openvswitch/types.h"
> >
> > +struct ds;
> >  struct nlattr;
> >  struct dp_packet;
> >  struct pkt_metadata;
> > @@ -32,6 +33,8 @@ struct dp_packet_batch;
> >  /* Called once at initialization time. */  void
> > odp_execute_init(void);
> >
> > +/* Runtime update get/set functionality. */ int32_t
> > +odp_actions_impl_get(struct ds *name);
> >  int32_t odp_actions_impl_set(const char *name);
> >
> >  typedef void (*odp_execute_cb)(void *dp, struct dp_packet_batch
> > *batch, diff --git a/tests/pmd.at b/tests/pmd.at index
> > a2f9d34a2..df0b3b54c 100644
> > --- a/tests/pmd.at
> > +++ b/tests/pmd.at
> > @@ -1162,3 +1162,24 @@ ovs-appctl: ovs-vswitchd: server returned an
> > error
> >
> >  OVS_VSWITCHD_STOP
> >  AT_CLEANUP
> > +
> > +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 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-vsctl show], [], [stdout]) AT_CHECK([ovs-appctl
> > +dpif-netdev/action-impl-get | grep "scalar"], [], [dnl
> > +  scalar (available: True, active: True)
> > +])
> > +
> > +AT_CHECK([ovs-appctl dpif-netdev/action-impl-get | grep
> > +"autovalidator"], [],
> > [dnl
> > +  autovalidator (available: True, active: False)
> > +])
> > +
> > +OVS_VSWITCHD_STOP
> > +AT_CLEANUP
> > \ No newline at end of file
> > --
> > 2.25.1
> 

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

Reply via email to