Comment 8 for bug 1799397

Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

I checked the default build, as expected no breakage.
But this no more is about the default dpdk build, but a potential gcc bug lets ignore the default gcc build and use DPDK source as a test.

To enable a non portable build you would have to use the rte_machine DBE_BUILD_OPTION in dpdk.

$ DEB_BUILD_OPTIONS="parallel=8 rte_machine=native" sbuild --purge=never -Adbionic-amd64 dpdk_18.08-1~ubuntu0.18.04.5.dsc

Further is you don't have the very latest skylake you'd also need to modify a build file to set this march still.
  => mk/machine/native/rte.vars.mk

Replace -march=native with -march=skylake-avx512

Then check the built testpmd program from the static build tree (to have all in one object):
$ objdump -dM intel /build/dpdk-9ZbA0X/dpdk-18.08/debian/build/static-root/build/app/test-pmd/testpmd > /tmp/testpmd.objdump
grep -e 'vmovdqu' /tmp/testpmd.objdump | grep -e '\[rax.*0x[2468]\]' | pastebinit

-march=skylake-avx512 -mno-avx512f
=> http://paste.ubuntu.com/p/nGrfJgffbk/
-march=skylake-avx512
=> http://paste.ubuntu.com/p/zhbhFRqVjF/

I do not see the same error sequence as reported in https://bugs.dpdk.org/show_bug.cgi?id=97#c39

Could it be that:
gdb -batch -ex 'file /build/dpdk-9ZbA0X/dpdk-18.08/debian/build/static-root/build/app/test-pmd/testpmd' -ex 'set disassembly-flavor intel' -ex 'disassemble/rs mlx5_tx_descriptor_status' | less
/build/dpdk-9ZbA0X/dpdk-18.08/debian/build/static-root/include/rte_memcpy.h:
427 dst = (uint8_t *)dst + 128;
   0x000000000045a1d7 <+2311>: 48 83 ea 80 sub rdx,0xffffffffffffff80

/usr/lib/gcc/x86_64-linux-gnu/7/include/avxintrin.h:
921 return *__P;
   0x000000000045a1db <+2315>: 62 f1 fe 28 6f 04 c5 01 00 00 00 vmovdqu64 ymm0,YMMWORD PTR [rax*8+0x1]

922 }
923
924 extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
925 _mm256_storeu_si256 (__m256i_u *__P, __m256i __A)
926 {
927 *__P = __A;
   0x000000000045a1e6 <+2326>: 62 f1 fe 28 7f 42 fd vmovdqu64 YMMWORD PTR [rdx-0x60],ymm0

921 return *__P;
   0x000000000045a1ed <+2333>: 62 f1 fe 28 6f 04 c5 02 00 00 00 vmovdqu64 ymm0,YMMWORD PTR [rax*8+0x2]

922 }
923
924 extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
925 _mm256_storeu_si256 (__m256i_u *__P, __m256i __A)
926 {
927 *__P = __A;
   0x000000000045a1f8 <+2344>: 62 f1 fe 28 7f 42 fe vmovdqu64 YMMWORD PTR [rdx-0x40],ymm0

921 return *__P;
   0x000000000045a1ff <+2351>: 62 f1 fe 28 6f 04 c5 03 00 00 00 vmovdqu64 ymm0,YMMWORD PTR [rax*8+0x3]