mbox series

[v7,0/8] Support vector instructions on ICE

Message ID 1553581011-94181-1-git-send-email-wenzhuo.lu@intel.com (mailing list archive)
Headers
Series Support vector instructions on ICE |

Message

Wenzhuo Lu March 26, 2019, 6:16 a.m. UTC
  Use SSE and AVX2 instructions in ICE RX and TX path.

---
v2:
 - Updated feature doc.
 - Fixed checklog and checkpatch issues.

v3:
 - Fixed potential compile issue on non-X86 platform.

v4:
 - Removed compile configure, CONFIG_RTE_LIBRTE_ICE_INC_VECTOR.
 - Fixed checkpatch warnings.
 - Added more explanation of vector path in the device document.
 - Some other minor change.

v5:
 - Fixed a compile issue.
 - Fixed a doc build warning.

v6:
 - Added prefix "ice_" for ICE specific functions.
 - Added unlikely for rarely used code.

v7:
 - Reserved the original buffer release functions.

Wenzhuo Lu (8):
  net/ice: fix Tx function setting
  net/ice: add pointer for queue buffer release
  net/ice: support vector SSE in RX
  net/ice: support Rx scatter SSE vector
  net/ice: support Tx SSE vector
  net/ice: support Rx AVX2 vector
  net/ice: support Rx scatter AVX2 vector
  net/ice: support vector AVX2 in TX

 doc/guides/nics/features/ice_vec.ini   |  35 ++
 doc/guides/nics/ice.rst                |  18 +
 doc/guides/rel_notes/release_19_05.rst |   4 +
 drivers/net/ice/Makefile               |  22 +
 drivers/net/ice/ice_ethdev.c           |   3 +-
 drivers/net/ice/ice_ethdev.h           |   2 +
 drivers/net/ice/ice_rxtx.c             |  92 +++-
 drivers/net/ice/ice_rxtx.h             |  39 +-
 drivers/net/ice/ice_rxtx_vec_avx2.c    | 844 +++++++++++++++++++++++++++++++++
 drivers/net/ice/ice_rxtx_vec_common.h  | 293 ++++++++++++
 drivers/net/ice/ice_rxtx_vec_sse.c     | 660 ++++++++++++++++++++++++++
 drivers/net/ice/meson.build            |  19 +
 12 files changed, 2023 insertions(+), 8 deletions(-)
 create mode 100644 doc/guides/nics/features/ice_vec.ini
 create mode 100644 drivers/net/ice/ice_rxtx_vec_avx2.c
 create mode 100644 drivers/net/ice/ice_rxtx_vec_common.h
 create mode 100644 drivers/net/ice/ice_rxtx_vec_sse.c
  

Comments

Ferruh Yigit March 26, 2019, 9:50 a.m. UTC | #1
On 3/26/2019 6:16 AM, Wenzhuo Lu wrote:
> Use SSE and AVX2 instructions in ICE RX and TX path.
> 
> ---
> v2:
>  - Updated feature doc.
>  - Fixed checklog and checkpatch issues.
> 
> v3:
>  - Fixed potential compile issue on non-X86 platform.
> 
> v4:
>  - Removed compile configure, CONFIG_RTE_LIBRTE_ICE_INC_VECTOR.
>  - Fixed checkpatch warnings.
>  - Added more explanation of vector path in the device document.
>  - Some other minor change.
> 
> v5:
>  - Fixed a compile issue.
>  - Fixed a doc build warning.
> 
> v6:
>  - Added prefix "ice_" for ICE specific functions.
>  - Added unlikely for rarely used code.
> 
> v7:
>  - Reserved the original buffer release functions.
> 
> Wenzhuo Lu (8):
>   net/ice: fix Tx function setting
>   net/ice: add pointer for queue buffer release
>   net/ice: support vector SSE in RX
>   net/ice: support Rx scatter SSE vector
>   net/ice: support Tx SSE vector
>   net/ice: support Rx AVX2 vector
>   net/ice: support Rx scatter AVX2 vector
>   net/ice: support vector AVX2 in TX

This version (v7) pulled from next-net-intel to next-net.
  
Thomas Monjalon March 31, 2019, 3:52 p.m. UTC | #2
26/03/2019 10:50, Ferruh Yigit:
> > Wenzhuo Lu (8):
> >   net/ice: fix Tx function setting
> >   net/ice: add pointer for queue buffer release
> >   net/ice: support vector SSE in RX
> >   net/ice: support Rx scatter SSE vector
> >   net/ice: support Tx SSE vector
> >   net/ice: support Rx AVX2 vector
> >   net/ice: support Rx scatter AVX2 vector
> >   net/ice: support vector AVX2 in TX
> 
> This version (v7) pulled from next-net-intel to next-net.

I assume these patches have been tested, or at least compiled.
However, when running devtools/test-meson-builds.sh, there is a
compilation error for build-x86-default:

In file included from ../drivers/net/ice/ice_ethdev.h:10:
rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found

It can be fixed in
	net/ice: support Rx AVX2 vector
by adding static_rte_pci and static_rte_bus_pci to the dependencies.
I fixed it even better in
	net/ice: support vector SSE in Rx
by replacing the useless include of rte_ethdev_pci.h in ice_ethdev.h
with rte_ethdev_driver.h.

I could just reject the next-net tree, but I don't really have such option
if we want to close 19.05-rc1 quickly.

In summary, I am spending my Sunday hours to fix the mess in your driver
which was supposed to be tested before submitting, plus before merge in
next-net-intel, plus compilation-tested before pull in next-net.
I don't know what failed in the process, but I really don't like it.
I don't want to see any new patch for ice PMD in 19.05 cycle.
If you really need some fixes in 19.05 (very likely given the mass
code drop you are doing few days before the -rc1 deadline),
then I advise you to double check everything and make commits fully
justified and explained.

Sorry for the bad mood, and I hope it won't happen again soon.
  
Wenzhuo Lu April 1, 2019, 5:46 a.m. UTC | #3
Hi Thomas,


> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Sunday, March 31, 2019 11:52 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>
> Cc: dev@dpdk.org; O'Hare, Cathal <cathal.ohare@intel.com>; Mcnamara,
> John <john.mcnamara@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v7 0/8] Support vector instructions on ICE
> 
> 26/03/2019 10:50, Ferruh Yigit:
> > > Wenzhuo Lu (8):
> > >   net/ice: fix Tx function setting
> > >   net/ice: add pointer for queue buffer release
> > >   net/ice: support vector SSE in RX
> > >   net/ice: support Rx scatter SSE vector
> > >   net/ice: support Tx SSE vector
> > >   net/ice: support Rx AVX2 vector
> > >   net/ice: support Rx scatter AVX2 vector
> > >   net/ice: support vector AVX2 in TX
> >
> > This version (v7) pulled from next-net-intel to next-net.
> 
> I assume these patches have been tested, or at least compiled.
> However, when running devtools/test-meson-builds.sh, there is a
> compilation error for build-x86-default:
> 
> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> 
> It can be fixed in
> 	net/ice: support Rx AVX2 vector
> by adding static_rte_pci and static_rte_bus_pci to the dependencies.
> I fixed it even better in
> 	net/ice: support vector SSE in Rx
> by replacing the useless include of rte_ethdev_pci.h in ice_ethdev.h with
> rte_ethdev_driver.h.
Really sorry for this. Although I don't understand the issue. I do use meson build and it works.
In my server,  no matter using " rte_ethdev_pci.h " or " rte_ethdev_driver.h ", it works fine.
To be honest, the compile error looks weird to me. Looks like any file which includes " rte_ethdev_pci.h " can hit the same problem. But I cannot tell anything, as I cannot reproduce the error.
Again, really appreciate for root causing and fixing the error but not rejecting the patches.

> 
> I could just reject the next-net tree, but I don't really have such option if we
> want to close 19.05-rc1 quickly.
> 
> In summary, I am spending my Sunday hours to fix the mess in your driver
> which was supposed to be tested before submitting, plus before merge in
> next-net-intel, plus compilation-tested before pull in next-net.
> I don't know what failed in the process, but I really don't like it.
> I don't want to see any new patch for ice PMD in 19.05 cycle.
> If you really need some fixes in 19.05 (very likely given the mass code drop
> you are doing few days before the -rc1 deadline), then I advise you to
> double check everything and make commits fully justified and explained.
> 
> Sorry for the bad mood, and I hope it won't happen again soon.
>
  
Ferruh Yigit April 1, 2019, 12:51 p.m. UTC | #4
On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> 26/03/2019 10:50, Ferruh Yigit:
>>> Wenzhuo Lu (8):
>>>   net/ice: fix Tx function setting
>>>   net/ice: add pointer for queue buffer release
>>>   net/ice: support vector SSE in RX
>>>   net/ice: support Rx scatter SSE vector
>>>   net/ice: support Tx SSE vector
>>>   net/ice: support Rx AVX2 vector
>>>   net/ice: support Rx scatter AVX2 vector
>>>   net/ice: support vector AVX2 in TX
>>
>> This version (v7) pulled from next-net-intel to next-net.
> 
> I assume these patches have been tested, or at least compiled.
> However, when running devtools/test-meson-builds.sh, there is a
> compilation error for build-x86-default:
> 
> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found

I tested this with meson but not able to catch the issue. Perhaps for my case
dependencies were build fast enough to cause a problem.

> 
> It can be fixed in
> 	net/ice: support Rx AVX2 vector
> by adding static_rte_pci and static_rte_bus_pci to the dependencies.
> I fixed it even better in
> 	net/ice: support vector SSE in Rx
> by replacing the useless include of rte_ethdev_pci.h in ice_ethdev.h
> with rte_ethdev_driver.h.

Thanks.

> 
> I could just reject the next-net tree, but I don't really have such option
> if we want to close 19.05-rc1 quickly.
> 
> In summary, I am spending my Sunday hours to fix the mess in your driver
> which was supposed to be tested before submitting, plus before merge in
> next-net-intel, plus compilation-tested before pull in next-net.
> I don't know what failed in the process, but I really don't like it.
> I don't want to see any new patch for ice PMD in 19.05 cycle.
> If you really need some fixes in 19.05 (very likely given the mass
> code drop you are doing few days before the -rc1 deadline),
> then I advise you to double check everything and make commits fully
> justified and explained.
> 
> Sorry for the bad mood, and I hope it won't happen again soon.
> 
>
  
Thomas Monjalon April 1, 2019, 1:27 p.m. UTC | #5
01/04/2019 14:51, Ferruh Yigit:
> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> > 26/03/2019 10:50, Ferruh Yigit:
> >>> Wenzhuo Lu (8):
> >>>   net/ice: fix Tx function setting
> >>>   net/ice: add pointer for queue buffer release
> >>>   net/ice: support vector SSE in RX
> >>>   net/ice: support Rx scatter SSE vector
> >>>   net/ice: support Tx SSE vector
> >>>   net/ice: support Rx AVX2 vector
> >>>   net/ice: support Rx scatter AVX2 vector
> >>>   net/ice: support vector AVX2 in TX
> >>
> >> This version (v7) pulled from next-net-intel to next-net.
> > 
> > I assume these patches have been tested, or at least compiled.
> > However, when running devtools/test-meson-builds.sh, there is a
> > compilation error for build-x86-default:
> > 
> > In file included from ../drivers/net/ice/ice_ethdev.h:10:
> > rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> 
> I tested this with meson but not able to catch the issue. Perhaps for my case
> dependencies were build fast enough to cause a problem.

No, it's not a matter of speed.
Are you running devtools/test-meson-builds.sh ?
  
Bruce Richardson April 1, 2019, 2:39 p.m. UTC | #6
On Mon, Apr 01, 2019 at 01:51:38PM +0100, Ferruh Yigit wrote:
> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> > 26/03/2019 10:50, Ferruh Yigit:
> >>> Wenzhuo Lu (8):
> >>>   net/ice: fix Tx function setting
> >>>   net/ice: add pointer for queue buffer release
> >>>   net/ice: support vector SSE in RX
> >>>   net/ice: support Rx scatter SSE vector
> >>>   net/ice: support Tx SSE vector
> >>>   net/ice: support Rx AVX2 vector
> >>>   net/ice: support Rx scatter AVX2 vector
> >>>   net/ice: support vector AVX2 in TX
> >>
> >> This version (v7) pulled from next-net-intel to next-net.
> > 
> > I assume these patches have been tested, or at least compiled.
> > However, when running devtools/test-meson-builds.sh, there is a
> > compilation error for build-x86-default:
> > 
> > In file included from ../drivers/net/ice/ice_ethdev.h:10:
> > rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> 
> I tested this with meson but not able to catch the issue. Perhaps for my case
> dependencies were build fast enough to cause a problem.
> 

That should be a problem with the meson builds. While with make builds, the
headers files are picked up after they are copied to the "include"
directory by the build process, in meson no such copying occurs and the
header files are picked up by having the paths to them passed in the
"dependency object" to each build. If the dependency does not exist then
the build will never pass, irrespective of ordering, and if the dependency
exists, the build will always find the header in its original location.

[The biggest benefit of this is that when building with ninja there are no
dependencies between the individual .c files - each one can be compiled
in parallel with all the others. It's only at the linking step that we need
to wait for previous jobs to complete]

In terms of this specific error with the header - did it get root caused?
Since it occurs on the "default" path, I'd suggest the fallback handling in
the meson.build file for the absense of AVX may be faulty, e.g. are you
replacing c flags or dependencies rather than appending to them?

/Bruce
  
Ferruh Yigit April 1, 2019, 2:56 p.m. UTC | #7
On 4/1/2019 3:39 PM, Bruce Richardson wrote:
> On Mon, Apr 01, 2019 at 01:51:38PM +0100, Ferruh Yigit wrote:
>> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
>>> 26/03/2019 10:50, Ferruh Yigit:
>>>>> Wenzhuo Lu (8):
>>>>>   net/ice: fix Tx function setting
>>>>>   net/ice: add pointer for queue buffer release
>>>>>   net/ice: support vector SSE in RX
>>>>>   net/ice: support Rx scatter SSE vector
>>>>>   net/ice: support Tx SSE vector
>>>>>   net/ice: support Rx AVX2 vector
>>>>>   net/ice: support Rx scatter AVX2 vector
>>>>>   net/ice: support vector AVX2 in TX
>>>>
>>>> This version (v7) pulled from next-net-intel to next-net.
>>>
>>> I assume these patches have been tested, or at least compiled.
>>> However, when running devtools/test-meson-builds.sh, there is a
>>> compilation error for build-x86-default:
>>>
>>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
>>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
>>
>> I tested this with meson but not able to catch the issue. Perhaps for my case
>> dependencies were build fast enough to cause a problem.
>>
> 
> That should be a problem with the meson builds. While with make builds, the
> headers files are picked up after they are copied to the "include"
> directory by the build process, in meson no such copying occurs and the
> header files are picked up by having the paths to them passed in the
> "dependency object" to each build. If the dependency does not exist then
> the build will never pass, irrespective of ordering, and if the dependency
> exists, the build will always find the header in its original location.

I was checking this and recognized that no copying is happening. And I can see
many PMDs are using this header [1], not sure why ice is failing.

> 
> [The biggest benefit of this is that when building with ninja there are no
> dependencies between the individual .c files - each one can be compiled
> in parallel with all the others. It's only at the linking step that we need
> to wait for previous jobs to complete]
> 
> In terms of this specific error with the header - did it get root caused?
> Since it occurs on the "default" path, I'd suggest the fallback handling in
> the meson.build file for the absense of AVX may be faulty, e.g. are you
> replacing c flags or dependencies rather than appending to them?

Trying to find out the root cause, but as you said it occurs on the 'default'
path only, and taking into account that there is not copying dependent headers,
I am not able to find it yet, checking.

[1]
$ git grep  rte_ethdev_pci.h



drivers/net/ark/ark_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/atlantic/atl_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/avp/avp_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/axgbe/axgbe_common.h:#include <rte_ethdev_pci.h>
drivers/net/bnx2x/bnx2x_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/bnxt/bnxt_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/cxgbe/cxgbe_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/cxgbe/cxgbe_main.c:#include <rte_ethdev_pci.h>
drivers/net/cxgbe/cxgbevf_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/cxgbe/cxgbevf_main.c:#include <rte_ethdev_pci.h>
drivers/net/e1000/em_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/e1000/igb_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/e1000/igb_flow.c:#include <rte_ethdev_pci.h>
drivers/net/ena/ena_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/enetc/enetc_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/enic/enic_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/fm10k/fm10k_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/i40e/i40e_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/i40e/i40e_ethdev_vf.c:#include <rte_ethdev_pci.h>
drivers/net/iavf/iavf_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/ice/ice_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/ixgbe/ixgbe_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/ixgbe/ixgbe_ipsec.c:#include <rte_ethdev_pci.h>
drivers/net/liquidio/lio_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/mlx4/mlx4.c:#include <rte_ethdev_pci.h>
drivers/net/mlx5/mlx5.c:#include <rte_ethdev_pci.h>
drivers/net/nfp/nfp_net.c:#include <rte_ethdev_pci.h>
drivers/net/nfp/nfpcore/nfp_cpp.h:#include <rte_ethdev_pci.h>
drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c:#include <rte_ethdev_pci.h>
drivers/net/nfp/nfpcore/nfp_cppcore.c:#include <rte_ethdev_pci.h>
drivers/net/qede/qede_ethdev.h:#include <rte_ethdev_pci.h>
drivers/net/sfc/sfc_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/szedata2/rte_eth_szedata2.c:#include <rte_ethdev_pci.h>
drivers/net/thunderx/nicvf_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/virtio/virtio_ethdev.c:#include <rte_ethdev_pci.h>
drivers/net/vmxnet3/vmxnet3_ethdev.c:#include <rte_ethdev_pci.h>
  
Ferruh Yigit April 1, 2019, 3:09 p.m. UTC | #8
On 4/1/2019 3:56 PM, Ferruh Yigit wrote:
> On 4/1/2019 3:39 PM, Bruce Richardson wrote:
>> On Mon, Apr 01, 2019 at 01:51:38PM +0100, Ferruh Yigit wrote:
>>> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
>>>> 26/03/2019 10:50, Ferruh Yigit:
>>>>>> Wenzhuo Lu (8):
>>>>>>   net/ice: fix Tx function setting
>>>>>>   net/ice: add pointer for queue buffer release
>>>>>>   net/ice: support vector SSE in RX
>>>>>>   net/ice: support Rx scatter SSE vector
>>>>>>   net/ice: support Tx SSE vector
>>>>>>   net/ice: support Rx AVX2 vector
>>>>>>   net/ice: support Rx scatter AVX2 vector
>>>>>>   net/ice: support vector AVX2 in TX
>>>>>
>>>>> This version (v7) pulled from next-net-intel to next-net.
>>>>
>>>> I assume these patches have been tested, or at least compiled.
>>>> However, when running devtools/test-meson-builds.sh, there is a
>>>> compilation error for build-x86-default:
>>>>
>>>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
>>>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
>>>
>>> I tested this with meson but not able to catch the issue. Perhaps for my case
>>> dependencies were build fast enough to cause a problem.
>>>
>>
>> That should be a problem with the meson builds. While with make builds, the
>> headers files are picked up after they are copied to the "include"
>> directory by the build process, in meson no such copying occurs and the
>> header files are picked up by having the paths to them passed in the
>> "dependency object" to each build. If the dependency does not exist then
>> the build will never pass, irrespective of ordering, and if the dependency
>> exists, the build will always find the header in its original location.
> 
> I was checking this and recognized that no copying is happening. And I can see
> many PMDs are using this header [1], not sure why ice is failing.
> 
>>
>> [The biggest benefit of this is that when building with ninja there are no
>> dependencies between the individual .c files - each one can be compiled
>> in parallel with all the others. It's only at the linking step that we need
>> to wait for previous jobs to complete]
>>
>> In terms of this specific error with the header - did it get root caused?
>> Since it occurs on the "default" path, I'd suggest the fallback handling in
>> the meson.build file for the absense of AVX may be faulty, e.g. are you
>> replacing c flags or dependencies rather than appending to them?
> 
> Trying to find out the root cause, but as you said it occurs on the 'default'
> path only, and taking into account that there is not copying dependent headers,
> I am not able to find it yet, checking.

This is meson fallback handling as Bruce guessed ...

> 
> [1]
> $ git grep  rte_ethdev_pci.h
> 
> 
> 
> drivers/net/ark/ark_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/atlantic/atl_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/avp/avp_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/axgbe/axgbe_common.h:#include <rte_ethdev_pci.h>
> drivers/net/bnx2x/bnx2x_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/bnxt/bnxt_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/cxgbe/cxgbe_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/cxgbe/cxgbe_main.c:#include <rte_ethdev_pci.h>
> drivers/net/cxgbe/cxgbevf_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/cxgbe/cxgbevf_main.c:#include <rte_ethdev_pci.h>
> drivers/net/e1000/em_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/e1000/igb_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/e1000/igb_flow.c:#include <rte_ethdev_pci.h>
> drivers/net/ena/ena_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/enetc/enetc_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/enic/enic_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/fm10k/fm10k_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/i40e/i40e_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/i40e/i40e_ethdev_vf.c:#include <rte_ethdev_pci.h>
> drivers/net/iavf/iavf_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/ice/ice_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/ixgbe/ixgbe_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/ixgbe/ixgbe_ipsec.c:#include <rte_ethdev_pci.h>
> drivers/net/liquidio/lio_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/mlx4/mlx4.c:#include <rte_ethdev_pci.h>
> drivers/net/mlx5/mlx5.c:#include <rte_ethdev_pci.h>
> drivers/net/nfp/nfp_net.c:#include <rte_ethdev_pci.h>
> drivers/net/nfp/nfpcore/nfp_cpp.h:#include <rte_ethdev_pci.h>
> drivers/net/nfp/nfpcore/nfp_cpp_pcie_ops.c:#include <rte_ethdev_pci.h>
> drivers/net/nfp/nfpcore/nfp_cppcore.c:#include <rte_ethdev_pci.h>
> drivers/net/qede/qede_ethdev.h:#include <rte_ethdev_pci.h>
> drivers/net/sfc/sfc_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/szedata2/rte_eth_szedata2.c:#include <rte_ethdev_pci.h>
> drivers/net/thunderx/nicvf_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/virtio/virtio_ethdev.c:#include <rte_ethdev_pci.h>
> drivers/net/vmxnet3/vmxnet3_ethdev.c:#include <rte_ethdev_pci.h>
>
  
Ferruh Yigit April 1, 2019, 3:12 p.m. UTC | #9
On 4/1/2019 2:27 PM, Thomas Monjalon wrote:
> 01/04/2019 14:51, Ferruh Yigit:
>> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
>>> 26/03/2019 10:50, Ferruh Yigit:
>>>>> Wenzhuo Lu (8):
>>>>>   net/ice: fix Tx function setting
>>>>>   net/ice: add pointer for queue buffer release
>>>>>   net/ice: support vector SSE in RX
>>>>>   net/ice: support Rx scatter SSE vector
>>>>>   net/ice: support Tx SSE vector
>>>>>   net/ice: support Rx AVX2 vector
>>>>>   net/ice: support Rx scatter AVX2 vector
>>>>>   net/ice: support vector AVX2 in TX
>>>>
>>>> This version (v7) pulled from next-net-intel to next-net.
>>>
>>> I assume these patches have been tested, or at least compiled.
>>> However, when running devtools/test-meson-builds.sh, there is a
>>> compilation error for build-x86-default:
>>>
>>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
>>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
>>
>> I tested this with meson but not able to catch the issue. Perhaps for my case
>> dependencies were build fast enough to cause a problem.
> 
> No, it's not a matter of speed.

No it is not,

> Are you running devtools/test-meson-builds.sh ?

No, I am using with another script but not building 'default' architecture with
meson where problem happens, that is why not able to catch this. Will try to
catch next time..
  
Thomas Monjalon April 1, 2019, 3:13 p.m. UTC | #10
01/04/2019 16:56, Ferruh Yigit:
> On 4/1/2019 3:39 PM, Bruce Richardson wrote:
> > On Mon, Apr 01, 2019 at 01:51:38PM +0100, Ferruh Yigit wrote:
> >> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> >>> 26/03/2019 10:50, Ferruh Yigit:
> >>>>> Wenzhuo Lu (8):
> >>>>>   net/ice: fix Tx function setting
> >>>>>   net/ice: add pointer for queue buffer release
> >>>>>   net/ice: support vector SSE in RX
> >>>>>   net/ice: support Rx scatter SSE vector
> >>>>>   net/ice: support Tx SSE vector
> >>>>>   net/ice: support Rx AVX2 vector
> >>>>>   net/ice: support Rx scatter AVX2 vector
> >>>>>   net/ice: support vector AVX2 in TX
> >>>>
> >>>> This version (v7) pulled from next-net-intel to next-net.
> >>>
> >>> I assume these patches have been tested, or at least compiled.
> >>> However, when running devtools/test-meson-builds.sh, there is a
> >>> compilation error for build-x86-default:
> >>>
> >>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> >>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> >>
> >> I tested this with meson but not able to catch the issue. Perhaps for my case
> >> dependencies were build fast enough to cause a problem.
> > 
> > That should be a problem with the meson builds. While with make builds, the
> > headers files are picked up after they are copied to the "include"
> > directory by the build process, in meson no such copying occurs and the
> > header files are picked up by having the paths to them passed in the
> > "dependency object" to each build. If the dependency does not exist then
> > the build will never pass, irrespective of ordering, and if the dependency
> > exists, the build will always find the header in its original location.
> 
> I was checking this and recognized that no copying is happening. And I can see
> many PMDs are using this header [1], not sure why ice is failing.
> 
> > 
> > [The biggest benefit of this is that when building with ninja there are no
> > dependencies between the individual .c files - each one can be compiled
> > in parallel with all the others. It's only at the linking step that we need
> > to wait for previous jobs to complete]
> > 
> > In terms of this specific error with the header - did it get root caused?
> > Since it occurs on the "default" path, I'd suggest the fallback handling in
> > the meson.build file for the absense of AVX may be faulty, e.g. are you
> > replacing c flags or dependencies rather than appending to them?
> 
> Trying to find out the root cause, but as you said it occurs on the 'default'
> path only, and taking into account that there is not copying dependent headers,
> I am not able to find it yet, checking.

Guys! Are you kidding me?
I already described the root cause and the possible fixes:
	http://mails.dpdk.org/archives/dev/2019-March/128375.html
This is in the case AVX2 being chosen at runtime.
rte_ethdev_pci.h is included in a header file.
The dependencies object is missing static_rte_pci and static_rte_bus_pci.
I chose to just use rte_ethdev_driver.h instead.
  
Thomas Monjalon April 1, 2019, 3:14 p.m. UTC | #11
01/04/2019 17:12, Ferruh Yigit:
> On 4/1/2019 2:27 PM, Thomas Monjalon wrote:
> > 01/04/2019 14:51, Ferruh Yigit:
> >> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> >>> 26/03/2019 10:50, Ferruh Yigit:
> >>>>> Wenzhuo Lu (8):
> >>>>>   net/ice: fix Tx function setting
> >>>>>   net/ice: add pointer for queue buffer release
> >>>>>   net/ice: support vector SSE in RX
> >>>>>   net/ice: support Rx scatter SSE vector
> >>>>>   net/ice: support Tx SSE vector
> >>>>>   net/ice: support Rx AVX2 vector
> >>>>>   net/ice: support Rx scatter AVX2 vector
> >>>>>   net/ice: support vector AVX2 in TX
> >>>>
> >>>> This version (v7) pulled from next-net-intel to next-net.
> >>>
> >>> I assume these patches have been tested, or at least compiled.
> >>> However, when running devtools/test-meson-builds.sh, there is a
> >>> compilation error for build-x86-default:
> >>>
> >>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> >>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> >>
> >> I tested this with meson but not able to catch the issue. Perhaps for my case
> >> dependencies were build fast enough to cause a problem.
> > 
> > No, it's not a matter of speed.
> 
> No it is not,
> 
> > Are you running devtools/test-meson-builds.sh ?
> 
> No, I am using with another script but not building 'default' architecture with
> meson where problem happens, that is why not able to catch this. Will try to
> catch next time..

Ferruh, why not using the scripts we are building in devtools?
  
Wenzhuo Lu April 2, 2019, 1:01 a.m. UTC | #12
Hi Thomas,


> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Monday, April 1, 2019 11:14 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>
> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>; dev@dpdk.org; O'Hare, Cathal
> <cathal.ohare@intel.com>; Mcnamara, John <john.mcnamara@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v7 0/8] Support vector instructions on ICE
> 
> 01/04/2019 17:12, Ferruh Yigit:
> > On 4/1/2019 2:27 PM, Thomas Monjalon wrote:
> > > 01/04/2019 14:51, Ferruh Yigit:
> > >> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> > >>> 26/03/2019 10:50, Ferruh Yigit:
> > >>>>> Wenzhuo Lu (8):
> > >>>>>   net/ice: fix Tx function setting
> > >>>>>   net/ice: add pointer for queue buffer release
> > >>>>>   net/ice: support vector SSE in RX
> > >>>>>   net/ice: support Rx scatter SSE vector
> > >>>>>   net/ice: support Tx SSE vector
> > >>>>>   net/ice: support Rx AVX2 vector
> > >>>>>   net/ice: support Rx scatter AVX2 vector
> > >>>>>   net/ice: support vector AVX2 in TX
> > >>>>
> > >>>> This version (v7) pulled from next-net-intel to next-net.
> > >>>
> > >>> I assume these patches have been tested, or at least compiled.
> > >>> However, when running devtools/test-meson-builds.sh, there is a
> > >>> compilation error for build-x86-default:
> > >>>
> > >>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> > >>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> > >>
> > >> I tested this with meson but not able to catch the issue. Perhaps
> > >> for my case dependencies were build fast enough to cause a problem.
> > >
> > > No, it's not a matter of speed.
> >
> > No it is not,
> >
> > > Are you running devtools/test-meson-builds.sh ?
> >
> > No, I am using with another script but not building 'default'
> > architecture with meson where problem happens, that is why not able to
> > catch this. Will try to catch next time..
> 
> Ferruh, why not using the scripts we are building in devtools?
I have a suggestion. Why not integrating all the compile check here, like http://mails.dpdk.org/archives/test-report/2019-March/077966.html.  If it fails, the patch state should be changed to "compile error". It will not be accepted. It can help everyone, especially the committer.
We cannot assume everyone knows everything. To me, have to say not familiar with meson build.
  
Thomas Monjalon April 2, 2019, 7:12 a.m. UTC | #13
02/04/2019 03:01, Lu, Wenzhuo:
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> > 01/04/2019 17:12, Ferruh Yigit:
> > > On 4/1/2019 2:27 PM, Thomas Monjalon wrote:
> > > > 01/04/2019 14:51, Ferruh Yigit:
> > > >> On 3/31/2019 4:52 PM, Thomas Monjalon wrote:
> > > >>> 26/03/2019 10:50, Ferruh Yigit:
> > > >>>>> Wenzhuo Lu (8):
> > > >>>>>   net/ice: fix Tx function setting
> > > >>>>>   net/ice: add pointer for queue buffer release
> > > >>>>>   net/ice: support vector SSE in RX
> > > >>>>>   net/ice: support Rx scatter SSE vector
> > > >>>>>   net/ice: support Tx SSE vector
> > > >>>>>   net/ice: support Rx AVX2 vector
> > > >>>>>   net/ice: support Rx scatter AVX2 vector
> > > >>>>>   net/ice: support vector AVX2 in TX
> > > >>>>
> > > >>>> This version (v7) pulled from next-net-intel to next-net.
> > > >>>
> > > >>> I assume these patches have been tested, or at least compiled.
> > > >>> However, when running devtools/test-meson-builds.sh, there is a
> > > >>> compilation error for build-x86-default:
> > > >>>
> > > >>> In file included from ../drivers/net/ice/ice_ethdev.h:10:
> > > >>> rte_ethdev_pci.h:38:10: fatal error: 'rte_pci.h' file not found
> > > >>
> > > >> I tested this with meson but not able to catch the issue. Perhaps
> > > >> for my case dependencies were build fast enough to cause a problem.
> > > >
> > > > No, it's not a matter of speed.
> > >
> > > No it is not,
> > >
> > > > Are you running devtools/test-meson-builds.sh ?
> > >
> > > No, I am using with another script but not building 'default'
> > > architecture with meson where problem happens, that is why not able to
> > > catch this. Will try to catch next time..
> > 
> > Ferruh, why not using the scripts we are building in devtools?
> I have a suggestion. Why not integrating all the compile check here, like http://mails.dpdk.org/archives/test-report/2019-March/077966.html.  If it fails, the patch state should be changed to "compile error". It will not be accepted. It can help everyone, especially the committer.
> We cannot assume everyone knows everything. To me, have to say not familiar with meson build.

Yes it would help to have meson tested in CI.