DPDK patches and discussions
 help / color / mirror / Atom feed
From: Thomas Monjalon <thomas@monjalon.net>
To: Rongwei Liu <rongweil@nvidia.com>, Ivan Malov <ivan.malov@oktetlabs.ru>
Cc: Matan Azrad <matan@nvidia.com>,
	Slava Ovsiienko <viacheslavo@nvidia.com>,
	Ori Kam <orika@nvidia.com>,
	Aman Singh <aman.deep.singh@intel.com>,
	Yuying Zhang <yuying.zhang@intel.com>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	"dev@dpdk.org" <dev@dpdk.org>,
	Raslan Darawsheh <rasland@nvidia.com>
Subject: Re: [PATCH v1] ethdev: add direction info when creating the transfer table
Date: Thu, 15 Sep 2022 13:16:25 +0200	[thread overview]
Message-ID: <2834724.SvYEEZNnvj@thomas> (raw)
In-Reply-To: <297a487e-b5d-4928-e96-c80b2603dd8@oktetlabs.ru>

15/09/2022 12:59, Ivan Malov:
> Hi Rongwei,
> 
> In this reply, I do not include the previous mail because the amount
> of inline commentary has gone haywire over the past couple of days.
> Let's re-iterate.
> 
> But before I get to that, I'd like to offer a fresh perspective:
> 
> Perhaps, if we all agree that term "vport" means an endpoint which
> can stand for any "port" except for physical one, then it should
> be possible to use term ANY_VPORTS rather than ANY_GUEST_PORTS.

The opposite of "physical" is "virtual" indeed.

> But that's tricky, of course. I don't have a way with naming,
> so more opinions are welcome and very-very desirable here.
> 
> So:
> 
> 1) Do you agree that, in your proposal, the new "wire_orig" / "vf_orig"
>     primitives are in fact yet another match criteria?
> 
>     ..
> 
>     To me, it looks so. If they are match criteria, then they belong
>     in match pattern, that is, they should be expressed as new items.
> 
>     For "transfer" rules, the *existing* attributes are: "group"
>     and "priority". As you may note, these are clearly not match
>     criteria. They control the look-up order. So, to this day,
>     there're no match criteria in DPDK expressed as attributes.
> 
>     If these "wire_orig" / "vf_orig" are going to be introduced
>     as attributes, that should be backed with strong motivation.

I prefer we keep matching in a single place, not in attributes.


> 2) From your viewpoint, why items "ANY_PHYS_PORTS" and "ANY_VPORTS"
>     won't do? Or, which problems do you think they may inflict?
> 
>     ..
> 
>     Previously, you explained why REPRESENTED_PORT would not
>     fit your needs. And I understand your point: to async API,
>     two pattern templates which both have item REPRESENTED_PORT
>     in them cannot be clearly distinguished and are in fact the
>     same set of criteria (provided that all other items are also
>     the same and have the same masks). Templates are, well,
>     templates (or shapes) of the rules to come later and
>     do not include exact "spec" for the "ethdev_id".
>     Got it.
> 
>     But that's not going to be the case with items ANY_PHYS_PORTS and
>     ANY_VPORTS, is it? In one async table template, the user submits
>     item ANY_PHYS_PORTS (instead of table attribute "wire_orig").
>     In another template, the user submits item ANY_VPORTS to
>     state that they want to match only traffic transmitted
>     software endpoints (DPDK ethdevs, guest VFs, etc.)
>     connected to the switch.
> 
>     In this example, the PMD will clearly see that the two templates
>     differ. So it will be able to allocate separate resources, each
>     one "cutting one half of traffic" (as per your concept).
> 
> 3) In your most recent response, you suggested that one might have
>     had the attributes occupied for some other purposes. To me,
>     they're not. Neither me nor my closest colleagues have
>     any plans on them. When I advocate using item approach
>     over the attribute approach, I do this to ensure
>     a) clarity of the API contract and b) robustness.
> 
> 4) Also, in your response, you suggested that I might have
>     confused item mask and spec. That is not the case.
>     If we agree, that switch domain ID is unneeded in
>     the new items, then these items will have no
>     fields in them (like item PF had not had any
>     before it was deprecated).
> 
>     No fields in new items => no field masks.
>     So what's the problem then?
> 
> 5) With regard to our talk about identifying the relationship
>     between ethdevs and switch domains, you said that the user
>     could know the difference from the very beginning:
>     /sysfs/ .... /PF_BDF/sriov_num
> 
>     That is true for the user who starts the application, but
>     this knowledge is hard to obtain from the application
>     perspective = it's hard to automate.
> 
>     This is why ethdevs are able to advertise their domain IDs.
>     And, as I explained, looking at domain ID to understand

namely rte_eth_dev_info.switch_info.domain_id

>     port relationship is valid, whilst looking at proxy IDs
>     to achieve the same goal is not. Proxy port IDs only
>     serve the purpose of finding an entry point for
>     managing flows. That has slightly different
>     meaning, but this subtle difference is important.

There is also a concept of sibling ports
to get all ports belonging to the same hardware.


> 6) As for the confusion over the difference between fixing
>     bugs and making the code robust by extra checks:
> 
>     Yes, I agree that the programmer who writes the
>     application must be intelligent enough to use
>     flow primitives the proper way. Yes, the user
>     who starts the application also should thread
>     carefully. But that does not prevent some
>     mistakes in other parts of code from
>     corrupting various chunks of memory,
>     including, for example, flow attrs.
> 
>     You say that such mistakes have to be "just fixed"
>     as any other bugs. Right. But how much time will
>     the programmer spend to identify the bugs?
> 
>     If the PMDs do all the checks (as with attributes),
>     the hypothetical bug will manifest itself much
>     earlier. That will simplify debugging by a lot...
> 
>     So, my point is that it's still better to ensure
>     that new flow primitives have all necessary
>     checks in place. For attributes, it is
>     required to add them separately.

If flow insertion is done in a fast path,
such checks may be skipped.

>     For items, as I explained, it might not be necessary
>     in the majority of cases simply because of the
>     switch (item->type) { case } structure.
> 
> So, these are some of my points to explain why the
> attribute approach is untenable. To me, attributes
> are something global, which demands checks in all
> flow-capable PMDs. Items seem better because they
> are don't cares to all PMDs which are unaware of
> the async concept. So, even if someone does not
> implement the async concept or does not like
> the new item names, they can turn a blind
> eye to this - with attributes, thay can't.
> 
> Thank you.




  reply	other threads:[~2022-09-15 11:16 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-07  2:40 Rongwei Liu
2022-09-11  8:22 ` Ori Kam
2022-09-12 16:57 ` Ivan Malov
2022-09-13 13:46   ` Rongwei Liu
2022-09-13 14:33     ` Ivan Malov
2022-09-14  5:16       ` Rongwei Liu
2022-09-14  7:32         ` Ivan Malov
2022-09-14 10:17           ` Rongwei Liu
2022-09-14 15:18             ` Ivan Malov
2022-09-14 21:02               ` Thomas Monjalon
2022-09-15  0:58               ` Rongwei Liu
2022-09-15  7:47                 ` Ivan Malov
2022-09-15  8:18                   ` Thomas Monjalon
2022-09-15  9:42                     ` Ivan Malov
2022-09-15  8:48                   ` Rongwei Liu
2022-09-15 10:59                     ` Ivan Malov
2022-09-15 11:16                       ` Thomas Monjalon [this message]
2022-09-20  9:41                         ` Ori Kam
2022-09-20 12:45                           ` Ivan Malov
2022-09-20 13:59                             ` Ori Kam
2022-09-20 15:28                               ` Ivan Malov
2022-09-21  7:34                                 ` Ori Kam
2022-09-21  8:39                                   ` Andrew Rybchenko
2022-09-21  9:04                                   ` Ivan Malov
2022-09-21  9:40                                     ` Thomas Monjalon
2022-09-21 10:04                                       ` Andrew Rybchenko
2022-09-21 12:41                                         ` Ori Kam
2022-09-21 12:51                                           ` Morten Brørup
2022-09-22  7:39                                             ` Andrew Rybchenko
2022-09-22 10:06                                               ` Ori Kam
2022-09-22 10:31                                                 ` Andrew Rybchenko
2022-09-22 13:00                                                   ` Ori Kam
2022-09-23  7:25                                                     ` Andrew Rybchenko
2022-09-23 16:11                                                       ` Ori Kam
2022-09-22 12:43                                                 ` Ivan Malov
2022-09-22 14:46                                                   ` Ori Kam
2022-09-28  9:24       ` [PATCH v3] ethdev: add hint when creating async " Rongwei Liu
2022-10-04  8:31         ` Andrew Rybchenko
2022-11-04 10:42           ` [PATCH v4] ethdev: add special flags " Rongwei Liu
2022-11-04 10:44           ` Rongwei Liu
2022-11-08 11:39             ` Andrew Rybchenko
2022-11-08 11:47               ` Andrew Rybchenko
2022-11-08 13:29                 ` Thomas Monjalon
2022-11-08 14:38                   ` Andrew Rybchenko
2022-11-08 15:25                     ` Thomas Monjalon
2022-11-09  8:53                       ` Andrew Rybchenko
2022-11-09  9:03                         ` Thomas Monjalon
2022-11-09  9:36                           ` Andrew Rybchenko
2022-11-09 10:50                             ` Thomas Monjalon
2022-11-06 10:02           ` [PATCH v3] ethdev: add hint " Andrew Rybchenko
2022-11-07  1:58             ` Rongwei Liu
2022-11-08  9:19             ` Thomas Monjalon
2022-11-08  9:35               ` Andrew Rybchenko
2022-11-08 11:18                 ` Thomas Monjalon
2022-11-08 11:48                   ` Andrew Rybchenko
2022-11-14  8:47                     ` [PATCH v6] ethdev: add special flags " Rongwei Liu
2022-11-14 11:59                     ` [PATCH v7] " Rongwei Liu
2023-01-17 15:13                       ` Ferruh Yigit
2023-01-17 17:01                         ` Ferruh Yigit
2023-01-18  2:50                           ` Rongwei Liu
2023-01-18  7:30                         ` Andrew Rybchenko
2023-01-18  7:28                       ` Andrew Rybchenko
2023-01-18 16:18                         ` Thomas Monjalon
2023-02-01 10:17                           ` Andrew Rybchenko
2023-02-01 10:58                             ` Thomas Monjalon
2023-02-01 11:10                               ` Andrew Rybchenko
2023-02-01 11:18                                 ` Thomas Monjalon
2023-02-01 11:38                                   ` Andrew Rybchenko
2023-02-01 13:48                                     ` Thomas Monjalon
2023-02-02  9:21                                       ` Andrew Rybchenko
2023-02-02 11:29                                         ` Thomas Monjalon
2023-02-02 12:24                                           ` Andrew Rybchenko
2023-02-01 11:22                                 ` Ori Kam
2023-02-01 11:29                                   ` Andrew Rybchenko
2023-02-01 11:12                               ` Ori Kam
2023-02-01 11:20                                 ` Thomas Monjalon
2023-01-30  0:00                       ` Ivan Malov
2023-01-30  2:34                         ` Rongwei Liu
2023-01-30  7:40                           ` Ivan Malov
2023-01-30 14:49                             ` Rongwei Liu
2023-01-30 23:00                               ` Ivan Malov
2023-01-31  3:06                                 ` Rongwei Liu
2023-01-31  5:30                                   ` Ivan Malov
2023-01-31  6:14                                     ` Rongwei Liu
2023-02-01 10:12                                     ` Thomas Monjalon
2023-02-01 11:50                                       ` Ivan Malov
2023-02-01 13:37                                         ` Thomas Monjalon
2023-02-01 14:04                                           ` Ivan Malov
2023-02-01 14:23                                             ` Thomas Monjalon
2023-02-01 14:29                                             ` Ori Kam
2023-02-02 11:19                       ` [PATCH v8] ethdev: add optimization hints in flow template table Rongwei Liu
2023-02-02 11:33                         ` Thomas Monjalon
2023-02-08 23:19                           ` Ferruh Yigit
2022-11-09  8:11           ` [PATCH v5] ethdev: add special flags when creating async transfer table Rongwei Liu
2022-11-09  8:13           ` Rongwei Liu
2022-11-09  8:31             ` Thomas Monjalon

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=2834724.SvYEEZNnvj@thomas \
    --to=thomas@monjalon.net \
    --cc=aman.deep.singh@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ivan.malov@oktetlabs.ru \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=rasland@nvidia.com \
    --cc=rongweil@nvidia.com \
    --cc=viacheslavo@nvidia.com \
    --cc=yuying.zhang@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).