DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jerin Jacob <jerinjacobk@gmail.com>
To: "Wang, Haiyue" <haiyue.wang@intel.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	"Yigit, Ferruh" <ferruh.yigit@intel.com>, dpdk-dev <dev@dpdk.org>,
	 "Ye, Xiaolong" <xiaolong.ye@intel.com>,
	"Kinsella, Ray" <ray.kinsella@intel.com>,
	 "Iremonger, Bernard" <bernard.iremonger@intel.com>,
	"Sun, Chenmin" <chenmin.sun@intel.com>,
	 Andrew Rybchenko <arybchenko@solarflare.com>,
	Slava Ovsiienko <viacheslavo@mellanox.com>,
	 Stephen Hemminger <stephen@networkplumber.org>,
	David Marchand <david.marchand@redhat.com>,
	 Jerin Jacob <jerinj@marvell.com>
Subject: Re: [dpdk-dev] [PATCH v4 1/4] ethdev: add the API for getting burst mode information
Date: Tue, 29 Oct 2019 18:26:40 +0530	[thread overview]
Message-ID: <CALBAE1O+-9fZ2j4g_YoB=wxe0ovGzc-+KwhZ1xd+wYwLY2nc2A@mail.gmail.com> (raw)
In-Reply-To: <E3B9F2FDCB65864C82CD632F23D8AB8773D8C37A@shsmsx102.ccr.corp.intel.com>

On Tue, Oct 29, 2019 at 4:56 PM Wang, Haiyue <haiyue.wang@intel.com> wrote:
>
> Hi Jerin,

Hi Wang

>
> > -----Original Message-----
> > From: Jerin Jacob <jerinjacobk@gmail.com>
> > Sent: Tuesday, October 29, 2019 16:35
> > To: Wang, Haiyue <haiyue.wang@intel.com>
> > Cc: Thomas Monjalon <thomas@monjalon.net>; Yigit, Ferruh <ferruh.yigit@intel.com>; dpdk-dev
> > <dev@dpdk.org>; Ye, Xiaolong <xiaolong.ye@intel.com>; Kinsella, Ray <ray.kinsella@intel.com>;
> > Iremonger, Bernard <bernard.iremonger@intel.com>; Sun, Chenmin <chenmin.sun@intel.com>; Andrew
> > Rybchenko <arybchenko@solarflare.com>; Slava Ovsiienko <viacheslavo@mellanox.com>; Stephen Hemminger
> > <stephen@networkplumber.org>; David Marchand <david.marchand@redhat.com>; Jerin Jacob
> > <jerinj@marvell.com>
> > Subject: Re: [dpdk-dev] [PATCH v4 1/4] ethdev: add the API for getting burst mode information
> >
> > > > > > > > 1) We can not standardize all flags when it comes to HW specific
> > > > > > > > details. We should NOT pollute public API with HW specific details.
> > > > > > >
> > > > > > > Currently, no detail to HW NIC specific.
> > > > > >
> > > > > > Yes. What if I want to add a "String" they represent a specific mode of PMD,
> > > > > > so that I know what mode PMD really runs.
> > > > > > It is not worth adding a flag for that in public API for HW specific notion.
> > > > > > That's the problem.
> > > > > >
> > > > > > >
> > > > > > > > 2) There is a danger if application starts taking any action based on
> > > > > > > > flags. It should be only for display purpose so in that case public
> > > > > > > > API should be the string to avoid misuse of the API(eventually the app
> > > > > > > > will fail on some PMD
> > > > > > > > if it takes any action based on the flag)
> > > > > > >
> > > > > > > These flags are *read only* for information. Can't image how to hack DPDK. ;-)
> > > > > >
> > > > > > To clarify:
> > > > > > If we expose flag say RTE_ETH_BURST_SIMPLE then the application can take
> > > > > > some action based on
> > > > > > if (flag == RTE_ETH_BURST_SIMPLE)
> > > > > >     do_some_thing();
> > > > > >
> > > > > > If the purpose is ONLY for "display" as info then exposing as the string will
> > > > > > enable to NOT standardize i.e application can never check based on
> > > > > > the string name(as it is not standardized) hence no danger.
> > > > > >
> > > > > > So what is the purpose of this API? Just display or are you expecting
> > > > > > the application can do any action based on this?
> > > > >
> > > > > Oh, I see. Mainly for showing which burst rx/tx module running:
> > > >
> > > > If so, the public API should be as string to avoid any other interpreation of
> > > > flags in application.
> > > >
> > > > And it makes application life easy too.
> > > >
> > > >
> > >
> > > At first, we do use string, but string contains same words. Off course, this
> > > is from CPU's view. Our two PMDs string are nearly the same, so we use bit
> > > instead. And people may check which CPU's vertor using. And we provide to_string
> > > to help make both happy. Not sure we really make them happy.
> >
> > # I understand the flags can enable us to reuse some of the code and I
> > agree with that.
> > But it has the downside mentioned above.
> >
> > How about the following to have the best of both worlds.
> >
> > 1) The public ethdev API should return only "string" i.e the flags
> > SHOULD NOT be exposed as ethdev API
> > i.e
> > int rte_eth_tx_burst_mode_name(uint16_t port_id, uint16_t queue_id, char *name);
> >
>
> How about *_str_* style ?

_name kind of implies it the string. may be _mode is good as it is short.

> int
> rte_eth_rx_burst_mode_str_get(uint16_t port_id, uint16_t queue_id,
>                                       char *buf, int buflen)

We don't need buflen as it is not known to the application. The
typical pattern, we followed,
in dpdk is, when function called buf as NULL then the function returns
the expected size so that
the application can alloc and get the buffer from ethdev layer on the
next iteration.





>
>
> > 2) The PMD interface  to the common code can be following
> >
> >  struct eth_pmd_burst_mode {
> >         uint64_t options;
> >          char name[128]; /* PMD specific burst mode information */
> > };
> >
>
> struct eth_pmd_burst_mode {
>         uint64_t options;
>         char dev_specific[128]; /* PMD specific burst mode information */
> };
>
> Still use 'dev_specific' ? Since whole structure 'struct eth_pmd_burst_mode'
> will be translated into string name.

Yes.
options - for generic flags to reuse the code
dev_specific - for PMD specific string/name

>
> > typedef int (*eth_burst_mode_get_t)(struct rte_eth_dev *dev,
> >         uint16_t queue_id, struct eth_burst_mode *mode)
> >
> > 3) The implementation of rte_eth_tx_burst_mode_name() shall do optons
> > flag to string converion(again internal to common code implemetation)
> > and concatenate with eth_pmd_burst_mode::name
> >
>
> Should be better to use the user input buffer w/ size ? Since now 'option'
> is private to PMD.

see above. No need for a separate argument. NULL case it can return
the expected size.

> int
> rte_eth_rx_burst_mode_str_get(uint16_t port_id, uint16_t queue_id,
>                                       char *buf, int buflen)
>
> And the concatenate format : "options string, dev_specific"
>                                             ^
>                                             If option is non-zero, and has device specific, add this ','
>                                             as separation ?

Looks good to me.

>
> > This would help to reuse some of the flags to name conversion logic
> > across all PMDs.
> > And PMD are free to return  eth_pmd_burst_mode::options as zero in
> > that case final
> > string only be eth_pmd_burst_mode::name.
> >
> >
> > >
> > > > >
> > > > > https://docs.fd.io/vpp/18.11/d7/d1d/plugins_2dpdk_2device_2format_8c_source.html
> > > > >
> > > > > s = format (s, "%Utx burst function: %s\n",
> > > > >   579                   format_white_space, indent + 2,
> > > > >   580                   ptr2sname (rte_eth_devices[xd->port_id].tx_pkt_burst));
> > > > >   581       s = format (s, "%Urx burst function: %s\n",
> > > > >   582                   format_white_space, indent + 2,
> > > > >   583                   ptr2sname (rte_eth_devices[xd->port_id].rx_pkt_burst));
> > > > >
> > > > > https://docs.fd.io/vpp/18.11/d7/d1d/plugins_2dpdk_2device_2format_8c_source.html
> > > > >
> > > > > 488 static const char *
> > > > >   489 ptr2sname (void *p)
> > > > >   490 {
> > > > >   491   Dl_info info = { 0 };
> > > > >   492
> > > > >   493   if (dladdr (p, &info) == 0)
> > > > >   494     return 0;
> > > > >   495
> > > > >   496   return info.dli_sname;
> > > > >   497 }
> > > > >
> > > > >     tx burst function: ixgbe_xmit_pkts
> > > > >     rx burst function: ixgbe_recv_pkts
> > > > >
> > > > > If the PMD's rx/tx is *static* function, 'ptr2name' returns 'nil'.

  reply	other threads:[~2019-10-29 12:57 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-15  7:51 [dpdk-dev] [PATCH v4 0/4] get Rx/Tx packet " Haiyue Wang
2019-10-15  7:51 ` [dpdk-dev] [PATCH v4 1/4] ethdev: add the API for getting " Haiyue Wang
2019-10-15 10:45   ` Ferruh Yigit
2019-10-15 11:23     ` Wang, Haiyue
2019-10-15 11:13   ` Ferruh Yigit
2019-10-25  9:36   ` Thomas Monjalon
2019-10-25 10:26     ` Jerin Jacob
2019-10-25 13:59     ` Wang, Haiyue
2019-10-25 14:08     ` Ferruh Yigit
2019-10-25 15:45       ` Thomas Monjalon
2019-10-25 16:02         ` Jerin Jacob
2019-10-25 22:27           ` Thomas Monjalon
2019-10-26  4:40             ` Wang, Haiyue
2019-10-26  6:24               ` Thomas Monjalon
2019-10-26  9:23                 ` Wang, Haiyue
2019-10-26 16:23                   ` Thomas Monjalon
2019-10-29 14:27                     ` Ferruh Yigit
2019-11-03 20:35                       ` Ray Kinsella
2019-11-03 22:41                         ` Thomas Monjalon
2019-11-04  9:49                           ` Ray Kinsella
2019-11-04  9:54                             ` Thomas Monjalon
2019-11-04 10:03                               ` Ray Kinsella
2019-11-04 10:46                                 ` Wang, Haiyue
2019-11-04 11:30                                 ` Thomas Monjalon
2019-11-04 12:07                                   ` Ray Kinsella
2019-11-04 13:09                                     ` Thomas Monjalon
2019-11-04 13:48                                       ` Ray Kinsella
2019-11-04 14:17                                         ` Wang, Haiyue
2019-10-26  6:40             ` Slava Ovsiienko
2019-10-26  9:31               ` Wang, Haiyue
2019-10-26  6:58             ` Jerin Jacob
2019-10-26  9:37               ` Wang, Haiyue
2019-10-29  3:37                 ` Jerin Jacob
2019-10-29  4:44                   ` Wang, Haiyue
2019-10-29  5:19                     ` Jerin Jacob
2019-10-29  5:42                       ` Wang, Haiyue
2019-10-29  5:47                         ` Jerin Jacob
2019-10-29  5:56                           ` Wang, Haiyue
2019-10-29  6:00                           ` Wang, Haiyue
2019-10-29  8:34                             ` Jerin Jacob
2019-10-29 11:26                               ` Wang, Haiyue
2019-10-29 12:56                                 ` Jerin Jacob [this message]
2019-10-29 13:51                                   ` Wang, Haiyue
2019-10-29 14:08                                     ` Jerin Jacob
2019-10-29 15:42                                       ` Wang, Haiyue
2019-10-29 15:59                                         ` Jerin Jacob
2019-10-29 16:16                                           ` Wang, Haiyue
2019-10-29 16:59               ` Ferruh Yigit
2019-10-30  4:38                 ` Jerin Jacob
2019-10-30  4:43                   ` Wang, Haiyue
2019-10-30  8:14                 ` Wang, Haiyue
2019-10-31 10:46                   ` Jerin Jacob
2019-10-31 11:15                     ` Ray Kinsella
2019-10-31 11:16                     ` Wang, Haiyue
2019-10-31 14:58                       ` Ferruh Yigit
2019-10-31 15:07                         ` Wang, Haiyue
2019-10-31 15:29                           ` Ferruh Yigit
2019-10-31 15:54                             ` Wang, Haiyue
2019-10-31 11:09                 ` Ray Kinsella
2019-10-15  7:51 ` [dpdk-dev] [PATCH v4 2/4] net/i40e: add Rx/Tx burst mode get callbacks Haiyue Wang
2019-10-15  7:51 ` [dpdk-dev] [PATCH v4 3/4] net/ice: " Haiyue Wang
2019-10-15  7:51 ` [dpdk-dev] [PATCH v4 4/4] app/testpmd: show the Rx/Tx burst mode description Haiyue Wang
2019-10-15 12:11 ` [dpdk-dev] [PATCH v4 0/4] get Rx/Tx packet burst mode information Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALBAE1O+-9fZ2j4g_YoB=wxe0ovGzc-+KwhZ1xd+wYwLY2nc2A@mail.gmail.com' \
    --to=jerinjacobk@gmail.com \
    --cc=arybchenko@solarflare.com \
    --cc=bernard.iremonger@intel.com \
    --cc=chenmin.sun@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=haiyue.wang@intel.com \
    --cc=jerinj@marvell.com \
    --cc=ray.kinsella@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@mellanox.com \
    --cc=xiaolong.ye@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).