From patchwork Tue May 19 12:13:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Medvedkin X-Patchwork-Id: 70436 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 33302A0093; Tue, 19 May 2020 14:14:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 170C31D63B; Tue, 19 May 2020 14:13:23 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 8CFC71D61A for ; Tue, 19 May 2020 14:13:17 +0200 (CEST) IronPort-SDR: 13vefN0C2sv/wUcLiGt7zD0Frc+qDpbUnVeuZBOzM42GwMJyfHgH69PC4HatcTGY98xc619ixE ZkSfcwrhm6tw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 May 2020 05:13:16 -0700 IronPort-SDR: fO4P/df+OCDw0BP/iZDps3WIIjnMihnXFRLNuPPynxqATAI6IHWh9+GPqiA6yr64P47sKni6IY /VtXx9C2Tx9Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,410,1583222400"; d="scan'208";a="288938446" Received: from silpixa00400072.ir.intel.com ([10.237.222.213]) by fmsmga004.fm.intel.com with ESMTP; 19 May 2020 05:13:15 -0700 From: Vladimir Medvedkin To: dev@dpdk.org Cc: konstantin.ananyev@intel.com, bruce.richardson@intel.com Date: Tue, 19 May 2020 13:13:03 +0100 Message-Id: <3c4fa9b50d256092d6b898bf56268d6263bae01e.1589890263.git.vladimir.medvedkin@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH v3 8/8] app/testfib: add support for different lookup functions 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" Added -v option to switch between different lookup implementations to measure their performance and correctness. Signed-off-by: Vladimir Medvedkin --- app/test-fib/main.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/app/test-fib/main.c b/app/test-fib/main.c index 6e80d65..b72e8c4 100644 --- a/app/test-fib/main.c +++ b/app/test-fib/main.c @@ -99,6 +99,7 @@ static struct { uint8_t ent_sz; uint8_t rnd_lookup_ips_ratio; uint8_t print_fract; + uint8_t lookup_fn; } config = { .routes_file = NULL, .lookup_ips_file = NULL, @@ -110,7 +111,8 @@ static struct { .tbl8 = DEFAULT_LPM_TBL8, .ent_sz = 4, .rnd_lookup_ips_ratio = 0, - .print_fract = 10 + .print_fract = 10, + .lookup_fn = 0 }; struct rt_rule_4 { @@ -636,7 +638,11 @@ print_usage(void) "1/2/4/8 (default 4)>]\n" "[-g ]\n" "[-w ]\n" - "[-u ]\n", + "[-u ]\n" + "[-v ]\n", config.prgname); } @@ -679,7 +685,7 @@ parse_opts(int argc, char **argv) int opt; char *endptr; - while ((opt = getopt(argc, argv, "f:t:n:d:l:r:c6ab:e:g:w:u:s")) != + while ((opt = getopt(argc, argv, "f:t:n:d:l:r:c6ab:e:g:w:u:sv:")) != -1) { switch (opt) { case 'f': @@ -767,6 +773,22 @@ parse_opts(int argc, char **argv) rte_exit(-EINVAL, "Invalid option -g\n"); } break; + case 'v': + if ((strcmp(optarg, "s1") == 0) || + (strcmp(optarg, "s") == 0)) + break; + else if (strcmp(optarg, "v") == 0) { + config.lookup_fn = 1; + break; + } else if (strcmp(optarg, "s2") == 0) { + config.lookup_fn = 2; + break; + } else if (strcmp(optarg, "s3") == 0) { + config.lookup_fn = 3; + break; + } + print_usage(); + rte_exit(-EINVAL, "Invalid option -v %s\n", optarg); default: print_usage(); rte_exit(-EINVAL, "Invalid options\n"); @@ -844,6 +866,24 @@ run_v4(void) return -rte_errno; } + if (config.lookup_fn != 0) { + if (config.lookup_fn == 1) + ret = rte_fib_set_lookup_fn(fib, + RTE_FIB_DIR24_8_VECTOR); + else if (config.lookup_fn == 2) + ret = rte_fib_set_lookup_fn(fib, + RTE_FIB_DIR24_8_SCALAR_INLINE); + else if (config.lookup_fn == 3) + ret = rte_fib_set_lookup_fn(fib, + RTE_FIB_DIR24_8_SCALAR_UNI); + else + ret = -EINVAL; + if (ret != 0) { + printf("Can not init lookup function\n"); + return ret; + } + } + for (k = config.print_fract, i = 0; k > 0; k--) { start = rte_rdtsc_precise(); for (j = 0; j < (config.nb_routes - i) / k; j++) { @@ -1023,6 +1063,18 @@ run_v6(void) return -rte_errno; } + if (config.lookup_fn != 0) { + if (config.lookup_fn == 1) + ret = rte_fib6_set_lookup_fn(fib, + RTE_FIB6_TRIE_VECTOR); + else + ret = -EINVAL; + if (ret != 0) { + printf("Can not init lookup function\n"); + return ret; + } + } + for (k = config.print_fract, i = 0; k > 0; k--) { start = rte_rdtsc_precise(); for (j = 0; j < (config.nb_routes - i) / k; j++) {