Hi Sunil,

Thanks for the reviews will add the necessary documentation changes .

Regards
Amber

> -----Original Message-----
> From: Pai G, Sunil <sunil.pa...@intel.com>
> Sent: Tuesday, October 4, 2022 9:00 PM
> To: Amber, Kumar <kumar.am...@intel.com>; ovs-dev@openvswitch.org
> Cc: i.maxim...@ovn.org; f...@sysclose.org; Amber, Kumar
> <kumar.am...@intel.com>
> Subject: RE: [ovs-dev] [PATCH v5 6/9] dpif-mfex: Modify set/get mfex
> commands to include inner.
> 
> Hi Amber,
> 
> Few comments inline.
> 
> > -----Original Message-----
> > From: dev <ovs-dev-boun...@openvswitch.org> On Behalf Of Kumar
> Amber
> > Sent: Friday, August 26, 2022 5:01 AM
> > To: ovs-dev@openvswitch.org
> > Cc: i.maxim...@ovn.org; f...@sysclose.org; Amber, Kumar
> > <kumar.am...@intel.com>
> > Subject: [ovs-dev] [PATCH v5 6/9] dpif-mfex: Modify set/get mfex
> > commands to include inner.
> 
> Capitalize MFEX.
> 
> >
> > The set command in MFEX is changed as to allow the user to select
> > different optimized mfex ISA for processing Inner packets in case of
> > tunneling.
> 
> Above could be reworded to:
> The set command is modified to allow the user to select different
> implementations for processing inner packets.
> Also, the get command is modified to indicate both inner and outer MFEX
> implementation in use.
> 
> >
> > $ ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study 1024 -recirc
> >
> > The get command is modified to indcitate both inner and Outer MFEXs in
> > use.
> >
> > Signed-off-by: Kumar Amber <kumar.am...@intel.com>
> > Signed-off-by: Cian Ferriter <cian.ferri...@intel.com>
> > Co-authored-by: Cian Ferriter <cian.ferri...@intel.com>
> > ---
> >  Documentation/topics/dpdk/bridge.rst | 18 ++++++++++++------
> >  lib/dpif-netdev-private-extract.c    | 23 ++++++++++++++++++++++-
> >  lib/dpif-netdev-private-extract.h    |  6 +++++-
> >  lib/dpif-netdev-private-thread.h     |  3 +++
> >  lib/dpif-netdev.c                    | 23 ++++++++++++++++++++---
> >  5 files changed, 62 insertions(+), 11 deletions(-)
> >
> > diff --git a/Documentation/topics/dpdk/bridge.rst
> > b/Documentation/topics/dpdk/bridge.rst
> > index 354f1ced1..d306417ec 100644
> > --- a/Documentation/topics/dpdk/bridge.rst
> > +++ b/Documentation/topics/dpdk/bridge.rst
> > @@ -293,13 +293,15 @@ command also shows whether the CPU supports
> each
> > implementation::
> >  An implementation can be selected manually by the following command::
> >
> >      $ ovs-appctl dpif-netdev/miniflow-parser-set [-pmd core_id] name \
> > -      [study_cnt]
> > +      [study_cnt] [-recirc]
> >
> > -The above command has two optional parameters: ``study_cnt`` and
> > ``core_id``.
> > -The ``core_id`` sets a particular packet parsing function to a
> > specific - PMD thread on the core.  The third parameter ``study_cnt``,
> > which is specific -to ``study`` and ignored by other implementations,
> > means how many packets -are needed to choose the best implementation.
> > +The above command has three optional parameters: ``study_cnt``,
> > +``core_id`` and ``-recirc``. The ``core_id`` sets a particular packet
> > +parsing function to a specific PMD thread on the core.  The third
> > +parameter ``study_cnt``, which is specific to ``study`` and ignored
> > +by other implementations, means how many packets are needed to
> choose
> > +the best implementation. The fourth parameter ``-recirc`` acts like
> > +flag which indicates to MFEX to use optimized MFEX inner for
> > +processing
> > tunneled inner packets.
> 
> I would remove "acts like a flag which" from the last line.
> I think its also required to document that if the user explicitly chooses a
> specific implementation like avx512_ipv4_udp, both inner and outer mfex
> will be set to that.
> If study is given on the other hand, it gives OVS the flexibility to choose 
> the
> different optimized paths for outer and inner mfex.
> 
> >
> >  Also user can select the ``study`` implementation which studies the
> > traffic for  a specific number of packets by applying all available
> > implementations of @@ -322,6 +324,10 @@ following command::
> >
> >      $ ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 scalar
> >
> > +``study`` can be selected with packet count and explicit PMD
> > +selection along with the ``recirc`` by following command::
> > +
> > +    $ ovs-appctl dpif-netdev/miniflow-parser-set -pmd 3 study 1024
> > + -recirc
> >
> >  Actions Implementations (Experimental)
> >  --------------------------------------
> > diff --git a/lib/dpif-netdev-private-extract.c
> > b/lib/dpif-netdev-private- extract.c index 1a9b35420..fe0a53c2c 100644
> > --- a/lib/dpif-netdev-private-extract.c
> > +++ b/lib/dpif-netdev-private-extract.c
> > @@ -33,6 +33,8 @@ VLOG_DEFINE_THIS_MODULE(dpif_netdev_extract);
> >
> >  /* Variable to hold the default MFEX implementation. */  static
> > ATOMIC(miniflow_extract_func) default_mfex_func;
> > +/* Variable to hold the default MFEX inner implementation. */ static
> > +ATOMIC(miniflow_extract_func) default_mfex_inner_func;
> >
> >  #if MFEX_IMPL_AVX512_CHECK
> >  static int32_t
> > @@ -231,16 +233,31 @@ dp_mfex_impl_get_default(void)
> >      return return_func;
> >  }
> >
> > +miniflow_extract_func
> > +dp_mfex_inner_impl_get_default(void)
> > +{
> > +    miniflow_extract_func return_func;
> > +    atomic_uintptr_t *mfex_func = (void *)&default_mfex_inner_func;
> > +
> > +    atomic_read_relaxed(mfex_func, (uintptr_t *) &return_func);
> > +
> > +    return return_func;
> > +}
> > +
> >  int
> > -dp_mfex_impl_set_default_by_name(const char *name)
> > +dp_mfex_impl_set_default_by_name(const char *name, bool
> mfex_inner)
> >  {
> >      miniflow_extract_func new_default;
> >      atomic_uintptr_t *mfex_func = (void *)&default_mfex_func;
> > +    atomic_uintptr_t *mfex_inner_func = (void
> > + *)&default_mfex_inner_func;
> >
> >      int err = dp_mfex_impl_get_by_name(name, &new_default);
> >
> >      if (!err) {
> >          atomic_store_relaxed(mfex_func, (uintptr_t) new_default);
> > +        if (mfex_inner) {
> > +            atomic_store_relaxed(mfex_inner_func, (uintptr_t)
> > new_default);
> > +        }
> >      }
> >
> >      return err;
> > @@ -268,6 +285,10 @@ dp_mfex_impl_get(struct ds *reply, struct
> > dp_netdev_pmd_thread **pmd_list,
> >              if (pmd->miniflow_extract_opt ==
> > mfex_impls[i].extract_func) {
> >                  ds_put_format(reply, "%u,", pmd->core_id);
> >              }
> > +            if (pmd->miniflow_extract_inner_opt ==
> > +                                            mfex_impls[i].extract_func) {
> > +                ds_put_format(reply, "%u,", pmd->core_id);
> > +            }
> >          }
> >
> >          ds_chomp(reply, ',');
> > diff --git a/lib/dpif-netdev-private-extract.h
> > b/lib/dpif-netdev-private- extract.h index 8a7f9b01a..f5e6d33c1 100644
> > --- a/lib/dpif-netdev-private-extract.h
> > +++ b/lib/dpif-netdev-private-extract.h
> > @@ -159,8 +159,12 @@ dp_mfex_impl_get_by_name(const char *name,
> > miniflow_extract_func *out_func);
> >   * overridden at runtime. */
> >  miniflow_extract_func dp_mfex_impl_get_default(void);
> >
> > +/* Returns the default MFEX which is first ./configure selected, but
> > +can be
> > + * overridden at runtime. */
> > +miniflow_extract_func dp_mfex_inner_impl_get_default(void);
> > +
> >  /* Overrides the default MFEX with the user set MFEX. */ -int
> > dp_mfex_impl_set_default_by_name(const char *name);
> > +int dp_mfex_impl_set_default_by_name(const char *name, bool
> > +mfex_inner);
> >
> >  /* Retrieve the array of miniflow implementations for iteration. */
> > struct dpif_miniflow_extract_impl * diff --git
> > a/lib/dpif-netdev-private- thread.h b/lib/dpif-netdev-private-thread.h
> > index bce91358b..3c998aa9a 100644
> > --- a/lib/dpif-netdev-private-thread.h
> > +++ b/lib/dpif-netdev-private-thread.h
> > @@ -133,6 +133,9 @@ struct dp_netdev_pmd_thread {
> >      /* Function pointer to call for miniflow_extract() functionality. */
> >      ATOMIC(miniflow_extract_func) miniflow_extract_opt;
> >
> > +    /* Function pointer to call for miniflow_extract() inner
> > functionality. */
> > +    ATOMIC(miniflow_extract_func) miniflow_extract_inner_opt;
> > +
> >      struct seq *reload_seq;
> >      uint64_t last_reload_seq;
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index
> > 99102c5a0..93cbc029a 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -1205,6 +1205,7 @@ dpif_miniflow_extract_impl_set(struct
> > unixctl_conn *conn, int argc,
> >      struct ds reply = DS_EMPTY_INITIALIZER;
> >      bool pmd_thread_update_done = false;
> >      bool mfex_name_is_study = false;
> > +    bool mfex_inner_is_set = false;
> >      const char *mfex_name = NULL;
> >      const char *reply_str = NULL;
> >      struct shash_node *node;
> > @@ -1243,6 +1244,10 @@ dpif_miniflow_extract_impl_set(struct
> > unixctl_conn *conn, int argc,
> >              argc -= 1;
> >              argv += 1;
> >
> > +        } else if (strcmp("-recirc", argv[1]) == 0) {
> > +            mfex_inner_is_set = true;
> > +            argc -= 1;
> > +            argv += 1;
> >          /* If name is study and more args exist, parse study_count value.
> > */
> >          } else if (mfex_name && mfex_name_is_study) {
> >              if (!str_to_uint(argv[1], 10, &study_count) || @@ -1284,7
> > +1289,7 @@ dpif_miniflow_extract_impl_set(struct unixctl_conn *conn,
> > +int
> > argc,
> >       * threads. If a PMD thread was selected, do NOT update the default.
> >       */
> >      if (pmd_thread_to_change == NON_PMD_CORE_ID) {
> > -        err = dp_mfex_impl_set_default_by_name(mfex_name);
> > +        err = dp_mfex_impl_set_default_by_name(mfex_name,
> > + mfex_inner_is_set);
> >          if (err == -ENODEV) {
> >              ds_put_format(&reply,
> >                            "Error: miniflow extract not available due
> > to CPU"
> > @@ -1301,6 +1306,7 @@ dpif_miniflow_extract_impl_set(struct
> > unixctl_conn *conn, int argc,
> >
> >      /* Get the desired MFEX function pointer and error check its usage.
> > */
> >      miniflow_extract_func mfex_func = NULL;
> > +    miniflow_extract_func mfex_inner_func =
> > + dp_mfex_inner_impl_get_default();
> >      err = dp_mfex_impl_get_by_name(mfex_name, &mfex_func);
> >      if (err) {
> >          if (err == -ENODEV) {
> > @@ -1315,6 +1321,9 @@ dpif_miniflow_extract_impl_set(struct
> > unixctl_conn *conn, int argc,
> >          goto error;
> >      }
> >
> > +    if (mfex_inner_is_set) {
> > +        mfex_inner_func = mfex_func;
> > +    }
> >      /* Apply the MFEX pointer to each pmd thread in each netdev,
> > filtering
> >       * by the users "-pmd" argument if required.
> >       */
> > @@ -1341,6 +1350,8 @@ dpif_miniflow_extract_impl_set(struct
> > unixctl_conn *conn, int argc,
> >
> >              pmd_thread_update_done = true;
> >              atomic_store_relaxed(&pmd->miniflow_extract_opt,
> > mfex_func);
> > +            atomic_store_relaxed(&pmd->miniflow_extract_inner_opt,
> > +                                 mfex_inner_func);
> >          };
> >
> >          free(pmd_list);
> > @@ -1615,8 +1626,8 @@ dpif_netdev_init(void)
> >                               NULL);
> >      unixctl_command_register("dpif-netdev/miniflow-parser-set",
> >                               "[-pmd core] miniflow_implementation_name"
> > -                             " [study_pkt_cnt]",
> > -                             1, 5, dpif_miniflow_extract_impl_set,
> > +                             " [study_pkt_cnt] [-recirc]",
> > +                             1, 6, dpif_miniflow_extract_impl_set,
> >                               NULL);
> >      unixctl_command_register("dpif-netdev/miniflow-parser-get", "",
> >                               0, 0, dpif_miniflow_extract_impl_get, @@
> > -
> > 7485,6 +7496,12 @@ dp_netdev_configure_pmd(struct
> dp_netdev_pmd_thread
> > *pmd, struct dp_netdev *dp,
> >      /* Init default miniflow_extract function */
> >      atomic_init(&pmd->miniflow_extract_opt,
> > dp_mfex_impl_get_default());
> >
> > +    /* Init default miniflow_extract function */
> 
> Nit: End comment with a fullstop.
> 
> <snipped>
> 
> Thanks and regards
> Sunil
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to