From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 07B711B45A for ; Thu, 31 Jan 2019 16:50:11 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 697709B309; Thu, 31 Jan 2019 15:50:10 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-117-200.ams2.redhat.com [10.36.117.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF0705C26D; Thu, 31 Jan 2019 15:50:08 +0000 (UTC) From: Kevin Traynor To: Ferruh Yigit Cc: Thomas Monjalon , dpdk stable Date: Thu, 31 Jan 2019 15:48:29 +0000 Message-Id: <20190131154901.5383-21-ktraynor@redhat.com> In-Reply-To: <20190131154901.5383-1-ktraynor@redhat.com> References: <20190131154901.5383-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 31 Jan 2019 15:50:10 +0000 (UTC) Subject: [dpdk-stable] patch 'mk: fix scope of disabling AVX512F support' has been queued to LTS release 18.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 31 Jan 2019 15:50:11 -0000 Hi, FYI, your patch has been queued to LTS release 18.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/07/19. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Kevin Traynor --- >>From b96963c2df2779080b57f350df885a7d03d0ada3 Mon Sep 17 00:00:00 2001 From: Ferruh Yigit Date: Mon, 14 Jan 2019 15:49:35 +0000 Subject: [PATCH] mk: fix scope of disabling AVX512F support [ upstream commit a32ca9a4ebc1350ce48df0222decef95a72b742b ] AVX512 was disabled for GCC because of Bugzilla issue 97 [1], the GCC defect submitted for the issue [2] highlighted that this is a known binutils version 2.30 issue. Narrowed the scope of no-avx512 to the this specific binutils version. [1] https://bugs.dpdk.org/show_bug.cgi?id=97 [2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096 Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support") Signed-off-by: Ferruh Yigit Acked-by: Thomas Monjalon --- config/meson.build | 8 ++++++ doc/guides/rel_notes/known_issues.rst | 35 ++++++++++++++++++++++++ mk/rte.cpuflags.mk | 4 +-- mk/toolchain/gcc/rte.toolchain-compat.mk | 10 +++++++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/config/meson.build b/config/meson.build index db32499b3..40802fc88 100644 --- a/config/meson.build +++ b/config/meson.build @@ -44,4 +44,12 @@ dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain) dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1) +# get binutils version for the workaround of Bug 97 +ldver = run_command('ld', '-v').stdout().strip() +if ldver.contains('2.30') + if cc.has_argument('-mno-avx512f') + machine_args += '-mno-avx512f' + endif +endif + add_project_link_arguments('-Wl,--no-as-needed', language: 'c') dpdk_extra_ldflags += '-Wl,--no-as-needed' diff --git a/doc/guides/rel_notes/known_issues.rst b/doc/guides/rel_notes/known_issues.rst index a1face9c1..358dfa321 100644 --- a/doc/guides/rel_notes/known_issues.rst +++ b/doc/guides/rel_notes/known_issues.rst @@ -827,2 +827,37 @@ Kernel crash when hot-unplug igb_uio device while DPDK application is running **Driver/Module**: ``igb_uio`` module. + + +AVX-512 support disabled +------------------------ + +**Description**: + ``AVX-512`` support has been disabled on some conditions. + This shouldn't be confused with ``CONFIG_RTE_ENABLE_AVX512`` config option which is already + disabled by default. This config option defines if ``AVX-512`` specific implementations of + some file to be used or not. What has been disabled is compiler feature to produce ``AVX-512`` + instructions from any source code. + + On DPDK v18.11 ``AVX-512`` is disabled for all ``GCC`` builds which reported to cause a performance + drop. + + On DPDK v19.02 ``AVX-512`` disable scope is reduced to ``GCC`` and ``binutils version 2.30`` based + on information accured from the GCC community defect. + +**Reason**: + Generated ``AVX-512`` code cause crash: + https://bugs.dpdk.org/show_bug.cgi?id=97 + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096 + +**Resolution/Workaround**: + * Update ``binutils`` to newer version than ``2.30``. + + OR + + * Use different compiler, like ``clang`` for this case. + +**Affected Environment/Platform**: + ``GCC`` and ``binutils version 2.30``. + +**Driver/Module**: + ALL. diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk index c3291b17a..541211c61 100644 --- a/mk/rte.cpuflags.mk +++ b/mk/rte.cpuflags.mk @@ -70,6 +70,6 @@ ifeq ($(CONFIG_RTE_ENABLE_AVX512),y) CPUFLAGS += AVX512F else -# disable AVX512F support of gcc as a workaround for Bug 97 -ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y) +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97 +ifeq ($(FORCE_DISABLE_AVX512),y) MACHINE_CFLAGS += -mno-avx512f endif diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk index 44904295c..dbddc986e 100644 --- a/mk/toolchain/gcc/rte.toolchain-compat.mk +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk @@ -21,4 +21,14 @@ HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | t HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR) +LD_VERSION = $(shell $(LD) -v) +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97 +ifneq ($(filter 2.30%,$(LD_VERSION)),) +FORCE_DISABLE_AVX512 := y +# print warning only once for librte_eal +ifneq ($(filter %librte_eal,$(CURDIR)),) +$(warning AVX512 support disabled because of ld 2.30. See Bug 97) +endif +endif + # if GCC is older than 4.x ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1) -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-01-31 15:44:06.240890131 +0000 +++ 0021-mk-fix-scope-of-disabling-AVX512F-support.patch 2019-01-31 15:44:05.000000000 +0000 @@ -1,8 +1,10 @@ -From a32ca9a4ebc1350ce48df0222decef95a72b742b Mon Sep 17 00:00:00 2001 +From b96963c2df2779080b57f350df885a7d03d0ada3 Mon Sep 17 00:00:00 2001 From: Ferruh Yigit Date: Mon, 14 Jan 2019 15:49:35 +0000 Subject: [PATCH] mk: fix scope of disabling AVX512F support +[ upstream commit a32ca9a4ebc1350ce48df0222decef95a72b742b ] + AVX512 was disabled for GCC because of Bugzilla issue 97 [1], the GCC defect submitted for the issue [2] highlighted that this is a known binutils version 2.30 issue. @@ -16,17 +18,15 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096 Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support") -Cc: stable@dpdk.org Signed-off-by: Ferruh Yigit Acked-by: Thomas Monjalon --- config/meson.build | 8 ++++++ doc/guides/rel_notes/known_issues.rst | 35 ++++++++++++++++++++++++ - doc/guides/rel_notes/release_19_02.rst | 15 ++++++++++ mk/rte.cpuflags.mk | 4 +-- mk/toolchain/gcc/rte.toolchain-compat.mk | 10 +++++++ - 5 files changed, 70 insertions(+), 2 deletions(-) + 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/config/meson.build b/config/meson.build index db32499b3..40802fc88 100644 @@ -87,30 +87,6 @@ + +**Driver/Module**: + ALL. -diff --git a/doc/guides/rel_notes/release_19_02.rst b/doc/guides/rel_notes/release_19_02.rst -index 832ac8c2a..5a2f62ca9 100644 ---- a/doc/guides/rel_notes/release_19_02.rst -+++ b/doc/guides/rel_notes/release_19_02.rst -@@ -335,4 +335,19 @@ Known Issues - ========================================================= - -+* ``AVX-512`` support has been disabled for ``GCC`` builds when ``binutils 2.30`` -+ is detected [1] because of a crash [2]. This can affect ``native`` machine type -+ build targets on the platforms that support ``AVX512F`` like ``Intel Skylake`` -+ processors, and can cause a possible performance drop. The immediate workaround -+ is to use ``clang`` compiler on these platforms. -+ Initial workaround in DPDK v18.11 was to disable ``AVX-512`` support for ``GCC`` -+ completely, but based on information on defect submitted to GCC community [3], -+ issue has been identified as ``binutils 2.30`` issue. Since currently only GCC -+ generates ``AVX-512`` instructions, the scope is limited to ``GCC`` and -+ ``binutils 2.30`` -+ -+ - [1]: Commit ("mk: fix scope of disabling AVX512F support") -+ - [2]: https://bugs.dpdk.org/show_bug.cgi?id=97 -+ - [3]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096 -+ - - Tested Platforms diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk index c3291b17a..541211c61 100644 --- a/mk/rte.cpuflags.mk