From: Thomas Monjalon <thomas@monjalon.net>
To: "Richardson, Bruce" <bruce.richardson@intel.com>,
"Yigit, Ferruh" <ferruh.yigit@intel.com>
Cc: dev@dpdk.org, Yuanhan Liu <yuanhan.liu@linux.intel.com>,
Maxime Coquelin <maxime.coquelin@redhat.com>,
"Chen, Jing D" <jing.d.chen@intel.com>,
"Zhang, Helin" <helin.zhang@intel.com>,
"Wu, Jingjing" <jingjing.wu@intel.com>,
"Lu, Wenzhuo" <wenzhuo.lu@intel.com>,
"Ananyev, Konstantin" <konstantin.ananyev@intel.com>
Subject: Re: [dpdk-dev] SIMD Rx/Tx paths
Date: Mon, 15 May 2017 16:26:16 +0200 [thread overview]
Message-ID: <4150352.hFenEnrka8@xps> (raw)
In-Reply-To: <59AF69C657FD0841A61C55336867B5B066772FFA@IRSMSX104.ger.corp.intel.com>
15/05/2017 16:12, Richardson, Bruce:
> From: Yigit, Ferruh
> > On 5/15/2017 2:15 PM, Bruce Richardson wrote:
> > > On Mon, May 15, 2017 at 02:35:55PM +0200, Thomas Monjalon wrote:
> > >> Hi,
> > >>
> > >> I would like to open a discussion about SIMD code in drivers.
> > >>
> > >> I think we should not have different behaviours or features
> > >> capabilities, in the different code paths of a same driver.
> > >> I suggest to consider such differences as exceptions.
> > >> So we should merge features files (i.e. matrix columns), and remove
> > >> these files:
> > >>
> > >> % ls doc/guides/nics/features/*_vec.ini
> > >>
> > >> doc/guides/nics/features/fm10k_vec.ini
> > >> doc/guides/nics/features/fm10k_vf_vec.ini
> > >> doc/guides/nics/features/i40e_vec.ini
> > >> doc/guides/nics/features/i40e_vf_vec.ini
> > >> doc/guides/nics/features/ixgbe_vec.ini
> > >> doc/guides/nics/features/ixgbe_vf_vec.ini
> > >> doc/guides/nics/features/virtio_vec.ini
> > >>
> > >> If a feature is not supported in all code paths of a driver, it must
> > >> be marked as partially (P) supported.
> > >>
> > >> Then the mid-term goal will be to try removing these inconsistencies.
> > >>
> > >> Opinions/comments?
> > >
> > > Yes, there are inconsistencies, but if they are hidden from the user,
> > > e.g. by having the driver select automatically the most appropriate
> > > path, I don't think we should need to mark the support as "partial".
> > > Instead, it should be marked as being fully supported, but perhaps
> > > with a note indicating that a performance hit may be experienced due
> > > to the code taking a less-optimised driver path. After all, especially
> > > in the TX code path, a lot of the speed-up comes from not supporting
> > > different features, as well as from the vectorization. In those cases
> > > "closing the gap" may mean losing performance for those who don't want
> > > the features, which is not acceptable. Any feature support we can add,
> > > without affecting performance, should of course be implemented.
> >
> > I mostly agree with Bruce, except for PMD selection the patch
> > automatically.
> >
> > There is a trade off between feature set and performance, scalar driver
> > favors features and vector driver favors performance, I think good to have
> > both.
> >
> > And I agree that feature support should be added to vector drivers as long
> > as it doesn't effect the performance.
> >
> > Related to the driver auto selecting the path, I concern this may confuse
> > the user, because he may end up a situation he doesn't clear about
> > supported features, I am for more explicit way to select the scalar or
> > vector driver.
> >
> > And for merging the features files, most of the items are already same for
> > scalar and vector drivers, so perhaps we can merge files and use different
> > syntax for features that is different for scalar and vector:
> > Ys: Yes Scalar [no vector]
> > Yv: Yes Vector [no scalar]
> > Y: Yes Both
> > Ps: Partially Scalar [no vector]
> > Pv: Partially Vector [no scalar]
> > P: Partially Both
> > YsPv, YvPs
Please remember that there are different vector code paths
(SSE/AVX, NEON, Altivec).
> For the table, I don't really mind so much what scheme is agreed. For the user doing the coding, while I can accept that it might be useful to support explicitly request a vector or scalar driver, I'd definitely prefer the default state to remain auto-selection based on features requested. If a user want TSO, then pick the best driver path that supports TSO, and don't force the user to read up on what the different paths are!
I agree.
If we can be sure what the application needs, we can select the best code
path and mark the feature supported.
But can we be sure of the expectations for every features?
How do we know that the application relies on certain packet types
(which are not recognized by some code paths)?
next prev parent reply other threads:[~2017-05-15 14:26 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-15 12:35 Thomas Monjalon
2017-05-15 13:15 ` Bruce Richardson
2017-05-15 13:36 ` Ferruh Yigit
2017-05-15 14:12 ` Richardson, Bruce
2017-05-15 14:26 ` Thomas Monjalon [this message]
2017-05-16 0:54 ` Chen, Jing D
2017-05-16 5:36 ` Shahaf Shuler
2017-05-16 9:27 ` Bruce Richardson
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=4150352.hFenEnrka8@xps \
--to=thomas@monjalon.net \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=helin.zhang@intel.com \
--cc=jing.d.chen@intel.com \
--cc=jingjing.wu@intel.com \
--cc=konstantin.ananyev@intel.com \
--cc=maxime.coquelin@redhat.com \
--cc=wenzhuo.lu@intel.com \
--cc=yuanhan.liu@linux.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).