From patchwork Tue Jun 25 21:15:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Honnappa Nagarahalli X-Patchwork-Id: 167756 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp40276ilk; Tue, 25 Jun 2019 14:15:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqzL5zNYwTDcS+TwM4lHUA75hgBbP/QY4iub1kTL6dLZGmXtwguL9UKl5la7hUcY5kR6HCuH X-Received: by 2002:a1c:ab06:: with SMTP id u6mr255090wme.125.1561497353225; Tue, 25 Jun 2019 14:15:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561497353; cv=none; d=google.com; s=arc-20160816; b=ACt0aD7RAtX+5QZCyTXClZO96leqjDrf3FlmGwSUXfy/F5fT0KerwQJOhDTkO4EcE7 6gs/LGDD+xl/rgRhnVd2m24Kj0l8cCvIpu4xE/L31QL6vb04o0D8eQQAPAlU8O9Mat8q jC9hXiqR20nlSR39mb+xmoH4LbSM1sqTVhmGEl5wkFj2IZQB+RYYq/7EH9XY2OJawNDC 1jdipQOq1nVm//R7ofiQ0527oE8SnvyHcKsctSg94vgdC2KAoI1GXGdRZJFJnKQuSdae xY9XSFO1JGGHPkbi7J9yVKGzu39qocsp9I7XIi2vyWkpeUp+WwOeqM9b6HyllkM4Q5yE b3HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=Crijhf6udlqXzMyz4gRBZmepexs9+f0+ADdCg58IDL8=; b=BgtSWtg6oBGlYUaSK+aV/teTG+tmxcLPkapQlt04SnaBqbEeXl5b0nV+G0ilmDUFmN V096XbPq5ZPeevTZQl1vBPwbFSK/I05QyM253Vq01cRaKTRI42PUCj1+lGjwexeJMP21 MorRGF2cQXK+p5WExGvs1GigIjHuIbDgpO4ED5uALKqqTbdLf4ZY7n2XmLqFcUIl70T2 mTxtRdtjJL+YSq0//rlbnlHaZYu3rokifcPbuynWSdoy3U1IwyzLDHrI4k9IM8HDkv5V LFTeC0icUjmt+6WRavrcBrMdODl+pmXXaMoGNG3qZRNs0P7gkmAm8sw5YfCNWARF1c3s zZDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id x2si156697wmb.168.2019.06.25.14.15.52; Tue, 25 Jun 2019 14:15:53 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 343321B9A1; Tue, 25 Jun 2019 23:15:44 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id BAC8A1B993; Tue, 25 Jun 2019 23:15:40 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 03DDBC0A; Tue, 25 Jun 2019 14:15:40 -0700 (PDT) Received: from qc2400f-1.austin.arm.com (qc2400f-1.austin.arm.com [10.118.12.65]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E4F163F7D8; Tue, 25 Jun 2019 14:15:39 -0700 (PDT) From: Honnappa Nagarahalli To: yipeng1.wang@intel.com, sameh.gobriel@intel.com, bruce.richardson@intel.com, pablo.de.lara.guarch@intel.com, honnappa.nagarahalli@arm.com Cc: gavin.hu@arm.com, ruifeng.wang@arm.com, dev@dpdk.org, nd@arm.com, stable@dpdk.org Date: Tue, 25 Jun 2019 16:15:18 -0500 Message-Id: <20190625211520.43181-2-honnappa.nagarahalli@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190625211520.43181-1-honnappa.nagarahalli@arm.com> References: <20190625211520.43181-1-honnappa.nagarahalli@arm.com> Subject: [dpdk-dev] [PATCH 1/3] lib/hash: use ordered loads only if signature matches X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Relaxed signature comparison is done first. Further ordered loads are done only if the signature matches. Any false positives are caught by the full key comparison. Fixes: e605a1d36 ("hash: add lock-free r/w concurrency") Cc: stable@dpdk.org Signed-off-by: Honnappa Nagarahalli Reviewed-by: Gavin Hu Tested-by: Ruifeng Wang --- lib/librte_hash/rte_cuckoo_hash.c | 35 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 14 deletions(-) -- 2.17.1 Acked-by: Yipeng Wang diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c index 953928f27..f37f6957d 100644 --- a/lib/librte_hash/rte_cuckoo_hash.c +++ b/lib/librte_hash/rte_cuckoo_hash.c @@ -1188,22 +1188,29 @@ search_one_bucket_lf(const struct rte_hash *h, const void *key, uint16_t sig, struct rte_hash_key *k, *keys = h->key_store; for (i = 0; i < RTE_HASH_BUCKET_ENTRIES; i++) { - key_idx = __atomic_load_n(&bkt->key_idx[i], + /* Signature comparison is done before the acquire-load + * of the key index to achieve better performance. + * Any false positives will be caught in full comparison + * of the key. + */ + if (bkt->sig_current[i] == sig) { + key_idx = __atomic_load_n(&bkt->key_idx[i], __ATOMIC_ACQUIRE); - if (bkt->sig_current[i] == sig && key_idx != EMPTY_SLOT) { - k = (struct rte_hash_key *) ((char *)keys + - key_idx * h->key_entry_size); - pdata = __atomic_load_n(&k->pdata, - __ATOMIC_ACQUIRE); + if (key_idx != EMPTY_SLOT) { + k = (struct rte_hash_key *) ((char *)keys + + key_idx * h->key_entry_size); + pdata = __atomic_load_n(&k->pdata, + __ATOMIC_ACQUIRE); - if (rte_hash_cmp_eq(key, k->key, h) == 0) { - if (data != NULL) - *data = pdata; - /* - * Return index where key is stored, - * subtracting the first dummy index - */ - return key_idx - 1; + if (rte_hash_cmp_eq(key, k->key, h) == 0) { + if (data != NULL) + *data = pdata; + /* + * Return index where key is stored, + * subtracting the first dummy index + */ + return key_idx - 1; + } } } }