From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0A064A0561; Sun, 19 Apr 2020 12:11:20 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1F0681D6A6; Sun, 19 Apr 2020 12:03:58 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 0BBAE1D63F for ; Sun, 19 Apr 2020 12:03:42 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 03J9vB8R031288; Sun, 19 Apr 2020 03:03:07 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=Z1up+m60O6einzqDdfybEzP6k1ZLT8Kw/oscnNX2wsQ=; b=jzocU0iZQw26lGjwLMNBd1Suqr1PFT5qM9YgrRV3Y5NwtmPzv6mep9tg8SHHP8j7tRIA y5iQfXAJu68homRU8u5QkWzJqBxQ9rij9Ay6neWYxPn+PjcLUF2sY/2+W12SimgO71To Kp7T0CICOSXHUKJ4J57yLecS2IcFTDjLJwC+4vsY8PmjKvWdIfIiiL4eGXBgOwq6nwMy EO9QQmWNQzwkfZlom9uKPnHc5Ih2L+Bqldg3YSWgUTi/CWNUFtpkF4ogq7snMkGeiBUE PeYmuVT5MEih7XLrV1pSmIECibzJZVzR8M5PSVR9QfuPbkVdEHCQumTouzET340WSaVw dA== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 30fxwp3d7m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 19 Apr 2020 03:03:07 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 19 Apr 2020 03:03:05 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sun, 19 Apr 2020 03:03:05 -0700 Received: from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14]) by maili.marvell.com (Postfix) with ESMTP id B65753F7043; Sun, 19 Apr 2020 03:03:02 -0700 (PDT) From: To: John McNamara , Marko Kovacevic , Jerin Jacob , "Sunil Kumar Kori" CC: , , , , Date: Sun, 19 Apr 2020 15:31:24 +0530 Message-ID: <20200419100133.3232316-25-jerinj@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200419100133.3232316-1-jerinj@marvell.com> References: <20200413150116.734047-1-jerinj@marvell.com> <20200419100133.3232316-1-jerinj@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676 definitions=2020-04-19_02:2020-04-17, 2020-04-19 signatures=0 Subject: [dpdk-dev] [PATCH v6 24/33] eal/trace: add trace dir configuration parameter 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" From: Sunil Kumar Kori Trace library exposes --trace-dir EAL parameter to configure directory where traces will be generated. Signed-off-by: Sunil Kumar Kori --- doc/guides/linux_gsg/eal_args.include.rst | 11 ++++ lib/librte_eal/common/eal_common_options.c | 15 ++++++ .../common/eal_common_trace_utils.c | 54 +++++++++++++++++++ lib/librte_eal/common/eal_options.h | 2 + lib/librte_eal/common/eal_trace.h | 1 + 5 files changed, 83 insertions(+) diff --git a/doc/guides/linux_gsg/eal_args.include.rst b/doc/guides/linux_gsg/eal_args.include.rst index d9e6a1d95..98bfcd357 100644 --- a/doc/guides/linux_gsg/eal_args.include.rst +++ b/doc/guides/linux_gsg/eal_args.include.rst @@ -152,6 +152,17 @@ Debugging options Can be specified multiple times up to 32 times. +* ``--trace-dir=`` + + Specify trace directory for trace output. For example: + + Configuring ``/tmp/`` as a trace output directory:: + + --trace-dir=/tmp + + By default, trace output will created at ``home`` directory and parameter + must be specified once only. + Other options ~~~~~~~~~~~~~ diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index bb6c13177..f242d56a7 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -69,6 +69,7 @@ eal_long_options[] = { {OPT_LCORES, 1, NULL, OPT_LCORES_NUM }, {OPT_LOG_LEVEL, 1, NULL, OPT_LOG_LEVEL_NUM }, {OPT_TRACE, 1, NULL, OPT_TRACE_NUM }, + {OPT_TRACE_DIR, 1, NULL, OPT_TRACE_DIR_NUM }, {OPT_MASTER_LCORE, 1, NULL, OPT_MASTER_LCORE_NUM }, {OPT_MBUF_POOL_OPS_NAME, 1, NULL, OPT_MBUF_POOL_OPS_NAME_NUM}, {OPT_NO_HPET, 0, NULL, OPT_NO_HPET_NUM }, @@ -1430,6 +1431,15 @@ eal_parse_common_option(int opt, const char *optarg, break; } + case OPT_TRACE_DIR_NUM: { + if (eal_trace_dir_args_save(optarg) < 0) { + RTE_LOG(ERR, EAL, "invalid parameters for --" + OPT_TRACE_DIR "\n"); + return -1; + } + break; + } + case OPT_LCORES_NUM: if (eal_parse_lcores(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameter for --" @@ -1709,6 +1719,11 @@ eal_common_usage(void) " Enable trace based on regular expression trace name.\n" " By default, the trace is disabled.\n" " User must specify this option to enable trace.\n" + " --"OPT_TRACE_DIR"=\n" + " Specify trace directory for trace output.\n" + " By default, trace output will created at\n" + " $HOME directory and parameter must be\n" + " specified once only.\n" " -v Display version information on startup\n" " -h, --help This help\n" " --"OPT_IN_MEMORY" Operate entirely in memory. This will\n" diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index 7f4726d62..41f2bdd05 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -118,6 +118,22 @@ trace_session_name_generate(char *trace_dir) return -rte_errno; } +static int +trace_dir_update(const char *str) +{ + struct trace *trace = trace_obj_get(); + int rc, remaining; + + remaining = sizeof(trace->dir) - trace->dir_offset; + rc = rte_strscpy(&trace->dir[0] + trace->dir_offset, str, remaining); + if (rc < 0) + goto fail; + + trace->dir_offset += rc; +fail: + return rc; +} + int eal_trace_args_save(const char *optarg) { @@ -177,6 +193,37 @@ trace_args_apply(const char *arg) return 0; } +int +eal_trace_dir_args_save(char const *optarg) +{ + struct trace *trace = trace_obj_get(); + uint32_t size = sizeof(trace->dir); + char *dir_path = NULL; + int rc; + + if (optarg == NULL) { + trace_err("no optarg is passed"); + return -EINVAL; + } + + if (strlen(optarg) >= size) { + trace_err("input string is too big"); + return -ENAMETOOLONG; + } + + dir_path = (char *)calloc(1, size); + if (dir_path == NULL) { + trace_err("fail to allocate memory"); + return -ENOMEM; + } + + sprintf(dir_path, "%s/", optarg); + rc = trace_dir_update(dir_path); + + free(dir_path); + return rc; +} + int trace_epoch_time_save(void) { @@ -247,6 +294,10 @@ trace_mkdir(void) return rc; } + rc = trace_dir_update(dir_path); + free(dir_path); + if (rc < 0) + return rc; } /* Create the path if it t exist, no "mkdir -p" available here */ @@ -258,6 +309,9 @@ trace_mkdir(void) } rc = trace_session_name_generate(session); + if (rc < 0) + return rc; + rc = trace_dir_update(session); if (rc < 0) return rc; diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h index 4700410fd..04222e57f 100644 --- a/lib/librte_eal/common/eal_options.h +++ b/lib/librte_eal/common/eal_options.h @@ -35,6 +35,8 @@ enum { OPT_LOG_LEVEL_NUM, #define OPT_TRACE "trace" OPT_TRACE_NUM, +#define OPT_TRACE_DIR "trace-dir" + OPT_TRACE_DIR_NUM, #define OPT_MASTER_LCORE "master-lcore" OPT_MASTER_LCORE_NUM, #define OPT_MBUF_POOL_OPS_NAME "mbuf-pool-ops-name" diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h index df4dd8efd..7af7d63f0 100644 --- a/lib/librte_eal/common/eal_trace.h +++ b/lib/librte_eal/common/eal_trace.h @@ -114,5 +114,6 @@ int eal_trace_init(void); void eal_trace_fini(void); int eal_trace_args_save(const char *optarg); void eal_trace_args_free(void); +int eal_trace_dir_args_save(const char *optarg); #endif /* __EAL_TRACE_H */ -- 2.25.1