From patchwork Thu Apr 30 22:37:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Graf X-Patchwork-Id: 466756 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id CC9FE140320 for ; Fri, 1 May 2015 08:38:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751773AbbD3WiE (ORCPT ); Thu, 30 Apr 2015 18:38:04 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:33731 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751605AbbD3WiA (ORCPT ); Thu, 30 Apr 2015 18:38:00 -0400 Received: by pacwv17 with SMTP id wv17so73208532pac.0 for ; Thu, 30 Apr 2015 15:38:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7NV4kmnXyyiN16vu64AMV6Qa/GnfoimwsY2sD10n+u4=; b=ijwBtOqB/Dduxud8w+f+YAdixwY02KI6cq4NRaOsMjze5gnUCsHFlyKhxxHt0lAY32 SAxDwhs69KM1wnWYLAQJd2mZFANgQnbuDSI2Po7c6R36qsh4aMGy0ZFobVVvTJE+lbsl PHqIbZOAzBEuVAFCISGRy2cDuIG3bnV03PU4hB1QANAXCdE/PpdjSfHFExnrTCUjPP4t ApyOBjcJ8/FEOZxb4Beh3pAYOcQzG3sP8AMVkw69eBJzRV9L3cLOHG5n8UHdxC/S2yam CiMP/fepJHROrjSR+Qt8mgt17PeUgcClpnoMiL3FKXsao18YaFe7mt0UIlCEj5BL7Z7C Ni0w== X-Gm-Message-State: ALoCoQkl4b5On+DjyeWlTKWeQNoIWPyJ3dKDCEpNJG2mgngz3LF7vifiWQWEYSB8AK2Cie8hufJK X-Received: by 10.66.234.233 with SMTP id uh9mr12069398pac.81.1430433480280; Thu, 30 Apr 2015 15:38:00 -0700 (PDT) Received: from localhost.cisco.com ([128.107.241.183]) by mx.google.com with ESMTPSA id j10sm3131342pdk.48.2015.04.30.15.37.59 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Apr 2015 15:37:59 -0700 (PDT) From: Thomas Graf To: davem@davemloft.net Cc: netdev@vger.kernel.org, herbert@gondor.apana.org.au Subject: [PATCH net-next 4/6] rhashtable-test: Do not allocate individual test objects Date: Thu, 30 Apr 2015 22:37:43 +0000 Message-Id: <1430433465-6066-5-git-send-email-tgraf@suug.ch> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1430433465-6066-1-git-send-email-tgraf@suug.ch> References: <1430433465-6066-1-git-send-email-tgraf@suug.ch> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org By far the most expensive part of the selftest was the allocation of entries. Using a static array allows to measure the rhashtable operations. Signed-off-by: Thomas Graf --- lib/test_rhashtable.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c index d6d6719..935693e 100644 --- a/lib/test_rhashtable.c +++ b/lib/test_rhashtable.c @@ -49,6 +49,8 @@ struct test_obj { struct rhash_head node; }; +static struct test_obj array[MAX_ENTRIES]; + static struct rhashtable_params test_rht_params = { .head_offset = offsetof(struct test_obj, node), .key_offset = offsetof(struct test_obj, value), @@ -129,9 +131,7 @@ static void test_bucket_stats(struct rhashtable *ht, bool quiet) static s64 __init test_rhashtable(struct rhashtable *ht) { - struct bucket_table *tbl; struct test_obj *obj; - struct rhash_head *pos, *next; int err; unsigned int i; s64 start, end; @@ -143,21 +143,13 @@ static s64 __init test_rhashtable(struct rhashtable *ht) pr_info(" Adding %d keys\n", entries); start = ktime_get_ns(); for (i = 0; i < entries; i++) { - struct test_obj *obj; - - obj = kzalloc(sizeof(*obj), GFP_KERNEL); - if (!obj) { - err = -ENOMEM; - goto error; - } + struct test_obj *obj = &array[i]; obj->value = i * 2; err = rhashtable_insert_fast(ht, &obj->node, test_rht_params); - if (err) { - kfree(obj); - goto error; - } + if (err) + return err; } rcu_read_lock(); @@ -177,21 +169,12 @@ static s64 __init test_rhashtable(struct rhashtable *ht) BUG_ON(!obj); rhashtable_remove_fast(ht, &obj->node, test_rht_params); - kfree(obj); } end = ktime_get_ns(); pr_info(" Duration of test: %lld ns\n", end - start); return end - start; - -error: - tbl = rht_dereference_rcu(ht->tbl, ht); - for (i = 0; i < tbl->size; i++) - rht_for_each_entry_safe(obj, pos, next, tbl, i, node) - kfree(obj); - - return err; } static struct rhashtable ht; @@ -214,6 +197,7 @@ static int __init test_rht_init(void) s64 time; pr_info("Test %02d:\n", i); + memset(&array, 0, sizeof(array)); err = rhashtable_init(&ht, &test_rht_params); if (err < 0) { pr_warn("Test failed: Unable to initialize hashtable: %d\n",