Re: [dpdk-dev] [PATCH v6 0/8] fib: implement AVX512 vector lookup
From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2020-07-14 14:38:35
On Tue, 14 Jul 2020 08:31:32 +0100 "Kinsella, Ray" [off-list ref] wrote:
On 13/07/2020 23:19, Stephen Hemminger wrote:quoted
On Mon, 13 Jul 2020 12:11:19 +0100 Vladimir Medvedkin [off-list ref] wrote:quoted
This patch series implements vectorized lookup using AVX512 for ipv4 dir24_8 and ipv6 trie algorithms. Also introduced rte_fib_set_lookup_fn() to change lookup function type. Added option to select lookup function type in testfib application. v6: - style fixes v5: - prefix zmm macro in rte_vect.h with RTE_X86 - remove unnecessary typedef for _x86_zmm_t - reword commit title - fix typos v4: - use __rte_aligned() instead of using compiler attribute directly - rework and add comments to meson.build v3: - separate out the AVX-512 code into a separate file v2: - rename rte_zmm to __rte_x86_zmm to reflect its internal usage - make runtime decision to use avx512 lookup Vladimir Medvedkin (8): eal/x86: introduce AVX 512-bit type fib: make lookup function type configurable fib: move lookup definition into the header file fib: introduce AVX512 lookup fib6: make lookup function type configurable fib6: move lookup definition into the header file fib6: introduce AVX512 lookup app/testfib: add support for different lookup functions app/test-fib/main.c | 58 +++++- lib/librte_eal/x86/include/rte_vect.h | 19 ++ lib/librte_fib/Makefile | 24 +++ lib/librte_fib/dir24_8.c | 281 +++++--------------------- lib/librte_fib/dir24_8.h | 226 ++++++++++++++++++++- lib/librte_fib/dir24_8_avx512.c | 165 +++++++++++++++ lib/librte_fib/dir24_8_avx512.h | 24 +++ lib/librte_fib/meson.build | 31 +++ lib/librte_fib/rte_fib.c | 21 +- lib/librte_fib/rte_fib.h | 24 +++ lib/librte_fib/rte_fib6.c | 20 +- lib/librte_fib/rte_fib6.h | 22 ++ lib/librte_fib/rte_fib_version.map | 2 + lib/librte_fib/trie.c | 161 +++------------ lib/librte_fib/trie.h | 119 ++++++++++- lib/librte_fib/trie_avx512.c | 269 ++++++++++++++++++++++++ lib/librte_fib/trie_avx512.h | 20 ++ 17 files changed, 1114 insertions(+), 372 deletions(-) create mode 100644 lib/librte_fib/dir24_8_avx512.c create mode 100644 lib/librte_fib/dir24_8_avx512.h create mode 100644 lib/librte_fib/trie_avx512.c create mode 100644 lib/librte_fib/trie_avx512.hDid anyone else see the recent AVX512 discussion from Linus: "I hope AVX512 dies a painful death, and that Intel starts fixing real problems instead of trying to create magic instructions to then create benchmarks that they can look good on.Yup - I saw this one. Sweeping statements like these are good to provoke debate, the truth is generally more nuanced. If you continue to read the post, Linus appears to be mostly questioning microprocessor design decisions. That is an interesting discussion, however the reality is that the technology does exists and may be beneficial for Packet Processing. I would suggest, we continue to apply the same logic governing adoption of any technology by DPDK. When the technology is present and a clear benefit is shown, we use it with caution. In the case of Vladimir's patch, the user has to explicitly switch on the AVX512 lookup with RTE_FIB_DIR24_8_VECTOR_AVX512.
Using what is available makes sense in DPDK.