From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
To: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Cc: <dev@dpdk.org>, Byron Marohn <byron.marohn@intel.com>,
Saikrishna Edupuganti <saikrishna.edupuganti@intel.com>
Subject: Re: [PATCH v4 1/5] efd: new Elastic Flow Distributor library
Date: Mon, 16 Jan 2017 09:55:48 +0530 [thread overview]
Message-ID: <20170116042547.GA6781@localhost.localdomain> (raw)
In-Reply-To: <1484481875-126335-2-git-send-email-pablo.de.lara.guarch@intel.com>
On Sun, Jan 15, 2017 at 12:04:31PM +0000, Pablo de Lara wrote:
> Elastic Flow Distributor (EFD) is a distributor library that uses
> perfect hashing to determine a target/value for a given incoming flow key.
> It has the following advantages:
>
> - First, because it uses perfect hashing, it does not store
> the key itself and hence lookup performance is not dependent
> on the key size.
>
> - Second, the target/value can be any arbitrary value hence
> the system designer and/or operator can better optimize service rates
> and inter-cluster network traffic locating.
>
> - Third, since the storage requirement is much smaller than a hash-based
> flow table (i.e. better fit for CPU cache), EFD can scale to
> millions of flow keys.
> Finally, with current optimized library implementation performance
> is fully scalable with number of CPU cores.
>
> Signed-off-by: Byron Marohn <byron.marohn@intel.com>
> Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> Signed-off-by: Saikrishna Edupuganti <saikrishna.edupuganti@intel.com>
> Acked-by: Christian Maciocco <christian.maciocco@intel.com>
> ---
> +#if (RTE_EFD_VALUE_NUM_BITS == 8 || RTE_EFD_VALUE_NUM_BITS == 16 || \
> + RTE_EFD_VALUE_NUM_BITS == 24 || RTE_EFD_VALUE_NUM_BITS == 32)
> +#define EFD_LOAD_SI128(val) _mm_load_si128(val)
> +#else
> +#define EFD_LOAD_SI128(val) _mm_lddqu_si128(val)
> +#endif
> +
> +static inline efd_value_t
> +efd_lookup_internal(const struct efd_online_group_entry * const group,
> + const uint32_t hash_val_a, const uint32_t hash_val_b,
> + enum rte_efd_compare_function cmp_fn)
> +{
> + efd_value_t value = 0;
> + uint32_t i;
> +
> + switch (cmp_fn) {
> +#ifdef RTE_MACHINE_CPUFLAG_AVX2
> + case RTE_HASH_COMPARE_AVX2:
> +
> + i = 0;
> + __m256i vhash_val_a = _mm256_set1_epi32(hash_val_a);
> + __m256i vhash_val_b = _mm256_set1_epi32(hash_val_b);
> +
Could you please abstract and move SIMD specific code to another file like other
libraries(example: lib_acl) to enable smooth integration with neon and altivec
SIMD implementations in future.
> + for (; i < RTE_EFD_VALUE_NUM_BITS; i += 8) {
> + __m256i vhash_idx =
> + _mm256_cvtepu16_epi32(EFD_LOAD_SI128(
> + (__m128i const *) &group->hash_idx[i]));
> + __m256i vlookup_table = _mm256_cvtepu16_epi32(
> + EFD_LOAD_SI128((__m128i const *)
> + &group->lookup_table[i]));
> + __m256i vhash = _mm256_add_epi32(vhash_val_a,
> + _mm256_mullo_epi32(vhash_idx, vhash_val_b));
> + __m256i vbucket_idx = _mm256_srli_epi32(vhash,
> + EFD_LOOKUPTBL_SHIFT);
> + __m256i vresult = _mm256_srlv_epi32(vlookup_table,
> + vbucket_idx);
> +
> + value |= (_mm256_movemask_ps(
> + (__m256) _mm256_slli_epi32(vresult, 31))
> + & ((1 << (RTE_EFD_VALUE_NUM_BITS - i)) - 1)) << i;
> + }
> + break;
> +#endif
next prev parent reply other threads:[~2017-01-16 4:26 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-02 14:52 [PATCH 0/2] Elastic Flow Distributor Pablo de Lara
2016-12-02 14:52 ` [PATCH 1/2] efd: new Elastic Flow Distributor library Pablo de Lara
2016-12-02 14:52 ` [PATCH 2/2] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 0/5] Elastic Flow Distributor Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 1/5] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 2/5] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 3/5] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 4/5] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-07 1:06 ` [PATCH v2 5/5] doc: add flow distributor guide Pablo de Lara
2017-01-09 18:19 ` [PATCH v2 0/5] Elastic Flow Distributor Maciocco, Christian
2017-01-12 22:15 ` [PATCH v3 " Pablo de Lara
2017-01-12 22:15 ` [PATCH v3 1/5] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-12 22:15 ` [PATCH v3 2/5] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-12 22:15 ` [PATCH v3 3/5] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-12 22:15 ` [PATCH v3 4/5] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-12 22:16 ` [PATCH v3 5/5] doc: add flow distributor guide Pablo de Lara
2017-01-15 12:04 ` [PATCH v4 0/5] Elastic Flow Distributor Pablo de Lara
2017-01-15 12:04 ` [PATCH v4 1/5] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-16 4:25 ` Jerin Jacob [this message]
2017-01-16 15:34 ` De Lara Guarch, Pablo
2017-01-15 12:04 ` [PATCH v4 2/5] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-15 12:04 ` [PATCH v4 3/5] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-15 12:04 ` [PATCH v4 4/5] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-16 4:15 ` Jerin Jacob
2017-01-16 15:33 ` De Lara Guarch, Pablo
2017-01-15 12:04 ` [PATCH v4 5/5] doc: add flow distributor guide Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 0/5] Elastic Flow Distributor Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 1/5] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 2/5] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 3/5] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 4/5] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-16 9:43 ` [PATCH v5 5/5] doc: add flow distributor guide Pablo de Lara
2017-01-16 15:08 ` [PATCH v5 0/5] Elastic Flow Distributor Thomas Monjalon
2017-01-17 8:34 ` De Lara Guarch, Pablo
2017-01-16 19:21 ` [PATCH v6 " Pablo de Lara
2017-01-16 19:21 ` [PATCH v6 1/5] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-17 20:32 ` Thomas Monjalon
2017-01-17 21:11 ` Thomas Monjalon
2017-01-16 19:21 ` [PATCH v6 2/5] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-16 19:21 ` [PATCH v6 3/5] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-16 19:21 ` [PATCH v6 4/5] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-16 19:21 ` [PATCH v6 5/5] doc: add flow distributor guide Pablo de Lara
2017-01-17 20:35 ` Thomas Monjalon
2017-01-17 20:29 ` [PATCH v6 0/5] Elastic Flow Distributor Thomas Monjalon
2017-01-17 22:10 ` [PATCH v7 0/6] " Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 1/6] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 2/6] efd: add AVX2 vect lookup function Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 3/6] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 4/6] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 5/6] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-17 22:10 ` [PATCH v7 6/6] doc: add flow distributor guide Pablo de Lara
2017-01-17 22:18 ` [PATCH v7 0/6] Elastic Flow Distributor De Lara Guarch, Pablo
2017-01-17 22:23 ` [PATCH v8 " Pablo de Lara
2017-01-17 22:23 ` [PATCH v8 1/6] efd: new Elastic Flow Distributor library Pablo de Lara
2017-01-18 18:56 ` Thomas Monjalon
2017-01-18 19:27 ` De Lara Guarch, Pablo
2017-01-18 19:44 ` Thomas Monjalon
2017-01-17 22:23 ` [PATCH v8 2/6] efd: add AVX2 vect lookup function Pablo de Lara
2017-01-17 22:23 ` [PATCH v8 3/6] app/test: add EFD functional and perf tests Pablo de Lara
2017-01-17 22:23 ` [PATCH v8 4/6] examples/flow_distributor: sample app to demonstrate EFD usage Pablo de Lara
2017-01-17 22:23 ` [PATCH v8 5/6] doc: add EFD library section in Programmers guide Pablo de Lara
2017-01-17 22:23 ` [PATCH v8 6/6] doc: add flow distributor guide Pablo de Lara
2017-01-18 19:57 ` [PATCH v8 0/6] Elastic Flow Distributor Thomas Monjalon
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=20170116042547.GA6781@localhost.localdomain \
--to=jerin.jacob@caviumnetworks.com \
--cc=byron.marohn@intel.com \
--cc=dev@dpdk.org \
--cc=pablo.de.lara.guarch@intel.com \
--cc=saikrishna.edupuganti@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.