get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/74020/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 74020,
    "url": "http://patches.dpdk.org/api/patches/74020/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200714215108.22437-2-dharmik.thakkar@arm.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200714215108.22437-2-dharmik.thakkar@arm.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200714215108.22437-2-dharmik.thakkar@arm.com",
    "date": "2020-07-14T21:51:03",
    "name": "[1/6] app/testpmd: add record-core-cycles runtime config",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "4050eca10366fcfe8bb634b03851227de55cc91c",
    "submitter": {
        "id": 1108,
        "url": "http://patches.dpdk.org/api/people/1108/?format=api",
        "name": "Dharmik Thakkar",
        "email": "dharmik.thakkar@arm.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200714215108.22437-2-dharmik.thakkar@arm.com/mbox/",
    "series": [
        {
            "id": 11023,
            "url": "http://patches.dpdk.org/api/series/11023/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11023",
            "date": "2020-07-14T21:51:04",
            "name": "app/testpmd: add runtime config",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11023/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/74020/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/74020/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 09B15A0540;\n\tTue, 14 Jul 2020 23:52:10 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 367E81C21F;\n\tTue, 14 Jul 2020 23:51:48 +0200 (CEST)",
            "from foss.arm.com (foss.arm.com [217.140.110.172])\n by dpdk.org (Postfix) with ESMTP id 89E211C1F2\n for <dev@dpdk.org>; Tue, 14 Jul 2020 23:51:41 +0200 (CEST)",
            "from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])\n by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C91DDFC2;\n Tue, 14 Jul 2020 14:51:40 -0700 (PDT)",
            "from localhost.localdomain (2p2660v4-1.austin.arm.com\n [10.118.12.95])\n by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BFB413F66E;\n Tue, 14 Jul 2020 14:51:40 -0700 (PDT)"
        ],
        "From": "Dharmik Thakkar <dharmik.thakkar@arm.com>",
        "To": "Wenzhuo Lu <wenzhuo.lu@intel.com>, Beilei Xing <beilei.xing@intel.com>,\n Bernard Iremonger <bernard.iremonger@intel.com>",
        "Cc": "dev@dpdk.org,\n\tnd@arm.com,\n\tDharmik Thakkar <dharmik.thakkar@arm.com>",
        "Date": "Tue, 14 Jul 2020 16:51:03 -0500",
        "Message-Id": "<20200714215108.22437-2-dharmik.thakkar@arm.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200714215108.22437-1-dharmik.thakkar@arm.com>",
        "References": "<20200520032023.2649-2-dharmik.thakkar@arm.com>\n <20200714215108.22437-1-dharmik.thakkar@arm.com>",
        "Subject": "[dpdk-dev] [PATCH 1/6] app/testpmd: add record-core-cycles runtime\n\tconfig",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Convert CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES to a\nruntime configuration.\n\nSigned-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>\nTested-by: Phil Yang <phil.yang@arm.com>\nReviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>\nReviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>\n---\n app/test-pmd/5tswap.c     | 16 +++-----------\n app/test-pmd/cmdline.c    | 46 +++++++++++++++++++++++++++++++++++++++\n app/test-pmd/config.c     |  6 +++++\n app/test-pmd/csumonly.c   | 16 +++-----------\n app/test-pmd/flowgen.c    | 17 ++++-----------\n app/test-pmd/icmpecho.c   | 16 +++-----------\n app/test-pmd/iofwd.c      | 18 ++++-----------\n app/test-pmd/macfwd.c     | 17 ++++-----------\n app/test-pmd/macswap.c    | 16 +++-----------\n app/test-pmd/parameters.c |  6 ++++-\n app/test-pmd/rxonly.c     | 15 +++----------\n app/test-pmd/testpmd.c    | 44 ++++++++++++++++++-------------------\n app/test-pmd/testpmd.h    | 18 +++++++++++++--\n app/test-pmd/txonly.c     | 16 +++-----------\n 14 files changed, 125 insertions(+), 142 deletions(-)",
    "diff": "diff --git a/app/test-pmd/5tswap.c b/app/test-pmd/5tswap.c\nindex 972f6b93b31d..04f035bb450f 100644\n--- a/app/test-pmd/5tswap.c\n+++ b/app/test-pmd/5tswap.c\n@@ -105,15 +105,9 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)\n \t\tuint8_t *byte;\n \t} h;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * Receive a burst of packets and forward them.\n@@ -193,11 +187,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)\n \t\t\trte_pktmbuf_free(pkts_burst[nb_tx]);\n \t\t} while (++nb_tx < nb_rx);\n \t}\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine five_tuple_swap_fwd_engine = {\ndiff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 39a1e772ed7c..1f30a9021500 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -529,6 +529,9 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t\t\"    Set the option to hide the zero values\"\n \t\t\t\" for xstats display.\\n\"\n \n+\t\t\t\"set record-core-cycles on|off\\n\"\n+\t\t\t\"    Set the option to enable measurement of CPU cycles.\\n\"\n+\n \t\t\t\"set port (port_id) vf (vf_id) rx|tx on|off\\n\"\n \t\t\t\"    Enable/Disable a VF receive/tranmit from a port\\n\\n\"\n \n@@ -8335,6 +8338,48 @@ cmdline_parse_inst_t cmd_set_xstats_hide_zero = {\n \t},\n };\n \n+/* *** SET OPTION TO ENABLE MEASUREMENT OF CPU CYCLES *** */\n+struct cmd_set_record_core_cycles_result {\n+\tcmdline_fixed_string_t keyword;\n+\tcmdline_fixed_string_t name;\n+\tcmdline_fixed_string_t on_off;\n+};\n+\n+static void\n+cmd_set_record_core_cycles_parsed(void *parsed_result,\n+\t\t\t__rte_unused struct cmdline *cl,\n+\t\t\t__rte_unused void *data)\n+{\n+\tstruct cmd_set_record_core_cycles_result *res;\n+\tuint16_t on_off = 0;\n+\n+\tres = parsed_result;\n+\ton_off = !strcmp(res->on_off, \"on\") ? 1 : 0;\n+\tset_record_core_cycles(on_off);\n+}\n+\n+cmdline_parse_token_string_t cmd_set_record_core_cycles_keyword =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,\n+\t\t\t\t keyword, \"set\");\n+cmdline_parse_token_string_t cmd_set_record_core_cycles_name =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,\n+\t\t\t\t name, \"record-core-cycles\");\n+cmdline_parse_token_string_t cmd_set_record_core_cycles_on_off =\n+\tTOKEN_STRING_INITIALIZER(struct cmd_set_record_core_cycles_result,\n+\t\t\t\t on_off, \"on#off\");\n+\n+cmdline_parse_inst_t cmd_set_record_core_cycles = {\n+\t.f = cmd_set_record_core_cycles_parsed,\n+\t.data = NULL,\n+\t.help_str = \"set record-core-cycles on|off\",\n+\t.tokens = {\n+\t\t(void *)&cmd_set_record_core_cycles_keyword,\n+\t\t(void *)&cmd_set_record_core_cycles_name,\n+\t\t(void *)&cmd_set_record_core_cycles_on_off,\n+\t\tNULL,\n+\t},\n+};\n+\n /* *** CONFIGURE UNICAST HASH TABLE *** */\n struct cmd_set_uc_hash_table {\n \tcmdline_fixed_string_t set;\n@@ -19487,6 +19532,7 @@ cmdline_parse_ctx_t main_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_set_fwd_eth_peer,\n \t(cmdline_parse_inst_t *)&cmd_set_qmap,\n \t(cmdline_parse_inst_t *)&cmd_set_xstats_hide_zero,\n+\t(cmdline_parse_inst_t *)&cmd_set_record_core_cycles,\n \t(cmdline_parse_inst_t *)&cmd_operate_port,\n \t(cmdline_parse_inst_t *)&cmd_operate_specific_port,\n \t(cmdline_parse_inst_t *)&cmd_operate_attach_port,\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex fcbe6b6f7440..d93699b34e3a 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -3679,6 +3679,12 @@ set_xstats_hide_zero(uint8_t on_off)\n \txstats_hide_zero = on_off;\n }\n \n+void\n+set_record_core_cycles(uint8_t on_off)\n+{\n+\trecord_core_cycles = on_off;\n+}\n+\n static inline void\n print_fdir_mask(struct rte_eth_fdir_masks *mask)\n {\ndiff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c\nindex 0a96b24eb27b..836bafa0f6df 100644\n--- a/app/test-pmd/csumonly.c\n+++ b/app/test-pmd/csumonly.c\n@@ -789,15 +789,9 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \tuint16_t nb_segments = 0;\n \tint ret;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/* receive a burst of packet */\n \tnb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,\n@@ -1098,11 +1092,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t} while (++nb_tx < nb_rx);\n \t}\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine csum_fwd_engine = {\ndiff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c\nindex 4bd351e6754a..e92a0eeca254 100644\n--- a/app/test-pmd/flowgen.c\n+++ b/app/test-pmd/flowgen.c\n@@ -97,16 +97,10 @@ pkt_burst_flow_gen(struct fwd_stream *fs)\n \tuint16_t i;\n \tuint32_t retry;\n \tuint64_t tx_offloads;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \tstatic int next_flow = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/* Receive a burst of packets and discard them. */\n \tnb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,\n@@ -207,11 +201,8 @@ pkt_burst_flow_gen(struct fwd_stream *fs)\n \t\t\trte_pktmbuf_free(pkts_burst[nb_tx]);\n \t\t} while (++nb_tx < nb_pkt);\n \t}\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine flow_gen_engine = {\ndiff --git a/app/test-pmd/icmpecho.c b/app/test-pmd/icmpecho.c\nindex 78e3adf2c106..3f27e8c29d33 100644\n--- a/app/test-pmd/icmpecho.c\n+++ b/app/test-pmd/icmpecho.c\n@@ -293,15 +293,9 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)\n \tuint32_t cksum;\n \tuint8_t  i;\n \tint l2_len;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * First, receive a burst of packets.\n@@ -520,11 +514,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)\n \t\t}\n \t}\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine icmp_echo_engine = {\ndiff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c\nindex 22b59bbdaf5a..456f7b5925ed 100644\n--- a/app/test-pmd/iofwd.c\n+++ b/app/test-pmd/iofwd.c\n@@ -50,16 +50,9 @@ pkt_burst_io_forward(struct fwd_stream *fs)\n \tuint16_t nb_rx;\n \tuint16_t nb_tx;\n \tuint32_t retry;\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n-\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * Receive a burst of packets and forward them.\n@@ -96,11 +89,8 @@ pkt_burst_io_forward(struct fwd_stream *fs)\n \t\t\trte_pktmbuf_free(pkts_burst[nb_tx]);\n \t\t} while (++nb_tx < nb_rx);\n \t}\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine io_fwd_engine = {\ndiff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c\nindex 0a89d94befe5..6a77568c7e60 100644\n--- a/app/test-pmd/macfwd.c\n+++ b/app/test-pmd/macfwd.c\n@@ -56,15 +56,9 @@ pkt_burst_mac_forward(struct fwd_stream *fs)\n \tuint16_t i;\n \tuint64_t ol_flags = 0;\n \tuint64_t tx_offloads;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * Receive a burst of packets and forward them.\n@@ -126,11 +120,8 @@ pkt_burst_mac_forward(struct fwd_stream *fs)\n \t\t\trte_pktmbuf_free(pkts_burst[nb_tx]);\n \t\t} while (++nb_tx < nb_rx);\n \t}\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine mac_fwd_engine = {\ndiff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c\nindex fbe8cb39e5d2..aaef5b0047b1 100644\n--- a/app/test-pmd/macswap.c\n+++ b/app/test-pmd/macswap.c\n@@ -57,15 +57,9 @@ pkt_burst_mac_swap(struct fwd_stream *fs)\n \tuint16_t nb_rx;\n \tuint16_t nb_tx;\n \tuint32_t retry;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * Receive a burst of packets and forward them.\n@@ -105,11 +99,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs)\n \t\t\trte_pktmbuf_free(pkts_burst[nb_tx]);\n \t\t} while (++nb_tx < nb_rx);\n \t}\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine mac_swap_engine = {\ndiff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex 7cb0e3d6ec0a..76072ae81b93 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -70,7 +70,7 @@ usage(char* progname)\n \t       \"--rxpt= | --rxht= | --rxwt= | --rxfreet= | \"\n \t       \"--txpt= | --txht= | --txwt= | --txfreet= | \"\n \t       \"--txrst= | --tx-offloads= | | --rx-offloads= | \"\n-\t       \"--vxlan-gpe-port= ]\\n\",\n+\t       \"--vxlan-gpe-port= | --record-core-cycles]\\n\",\n \t       progname);\n #ifdef RTE_LIBRTE_CMDLINE\n \tprintf(\"  --interactive: run in interactive mode.\\n\");\n@@ -216,6 +216,7 @@ usage(char* progname)\n \t       \"valid only with --mp-alloc=anon\\n\");\n \tprintf(\"  --rx-mq-mode=0xX: hexadecimal bitmask of RX mq mode can be \"\n \t       \"enabled\\n\");\n+\tprintf(\"  --record-core-cycles: enable measurement of CPU cycles.\\n\");\n }\n \n #ifdef RTE_LIBRTE_CMDLINE\n@@ -677,6 +678,7 @@ launch_args_parse(int argc, char** argv)\n \t\t{ \"noisy-lkup-num-reads-writes\", 1, 0, 0 },\n \t\t{ \"no-iova-contig\",             0, 0, 0 },\n \t\t{ \"rx-mq-mode\",                 1, 0, 0 },\n+\t\t{ \"record-core-cycles\",         0, 0, 0 },\n \t\t{ 0, 0, 0, 0 },\n \t};\n \n@@ -1381,6 +1383,8 @@ launch_args_parse(int argc, char** argv)\n \t\t\t\t\t\t \"rx-mq-mode must be >= 0 and <= %d\\n\",\n \t\t\t\t\t\t ETH_MQ_RX_VMDQ_DCB_RSS);\n \t\t\t}\n+\t\t\tif (!strcmp(lgopts[opt_idx].name, \"record-core-cycles\"))\n+\t\t\t\trecord_core_cycles = 1;\n \t\t\tbreak;\n \t\tcase 'h':\n \t\t\tusage(argv[0]);\ndiff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c\nindex 18d59a68d652..b6c8b8c7d5db 100644\n--- a/app/test-pmd/rxonly.c\n+++ b/app/test-pmd/rxonly.c\n@@ -49,14 +49,9 @@ pkt_burst_receive(struct fwd_stream *fs)\n \tstruct rte_mbuf  *pkts_burst[MAX_PKT_BURST];\n \tuint16_t nb_rx;\n \tuint16_t i;\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \t/*\n \t * Receive a burst of packets.\n@@ -73,11 +68,7 @@ pkt_burst_receive(struct fwd_stream *fs)\n \tfor (i = 0; i < nb_rx; i++)\n \t\trte_pktmbuf_free(pkts_burst[i]);\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n struct fwd_engine rx_only_engine = {\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex 7842c3b78120..f327b16604d2 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -475,6 +475,11 @@ uint16_t nb_rx_queue_stats_mappings = 0;\n  */\n uint8_t xstats_hide_zero;\n \n+/*\n+ * Measure of CPU cycles disabled by default\n+ */\n+uint8_t record_core_cycles;\n+\n unsigned int num_sockets = 0;\n unsigned int socket_ids[RTE_MAX_NUMA_NODES];\n \n@@ -1800,9 +1805,7 @@ fwd_stats_display(void)\n \tuint64_t total_tx_dropped = 0;\n \tuint64_t total_rx_nombuf = 0;\n \tstruct rte_eth_stats stats;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \tuint64_t fwd_cycles = 0;\n-#endif\n \tuint64_t total_recv = 0;\n \tuint64_t total_xmit = 0;\n \tstruct rte_port *port;\n@@ -1830,9 +1833,8 @@ fwd_stats_display(void)\n \t\tports_stats[fs->rx_port].rx_bad_outer_l4_csum +=\n \t\t\t\tfs->rx_bad_outer_l4_csum;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\t\tfwd_cycles += fs->core_cycles;\n-#endif\n+\t\tif (record_core_cycles)\n+\t\t\tfwd_cycles += fs->core_cycles;\n \t}\n \tfor (i = 0; i < cur_fwd_config.nb_fwd_ports; i++) {\n \t\tuint8_t j;\n@@ -1961,24 +1963,24 @@ fwd_stats_display(void)\n \tprintf(\"  %s++++++++++++++++++++++++++++++++++++++++++++++\"\n \t       \"%s\\n\",\n \t       acc_stats_border, acc_stats_border);\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n+\tif (record_core_cycles) {\n #define CYC_PER_MHZ 1E6\n-\tif (total_recv > 0 || total_xmit > 0) {\n-\t\tuint64_t total_pkts = 0;\n-\t\tif (strcmp(cur_fwd_eng->fwd_mode_name, \"txonly\") == 0 ||\n-\t\t    strcmp(cur_fwd_eng->fwd_mode_name, \"flowgen\") == 0)\n-\t\t\ttotal_pkts = total_xmit;\n-\t\telse\n-\t\t\ttotal_pkts = total_recv;\n+\t\tif (total_recv > 0 || total_xmit > 0) {\n+\t\t\tuint64_t total_pkts = 0;\n+\t\t\tif (strcmp(cur_fwd_eng->fwd_mode_name, \"txonly\") == 0 ||\n+\t\t\t    strcmp(cur_fwd_eng->fwd_mode_name, \"flowgen\") == 0)\n+\t\t\t\ttotal_pkts = total_xmit;\n+\t\t\telse\n+\t\t\t\ttotal_pkts = total_recv;\n \n-\t\tprintf(\"\\n  CPU cycles/packet=%.2F (total cycles=\"\n-\t\t       \"%\"PRIu64\" / total %s packets=%\"PRIu64\") at %\"PRIu64\n-\t\t       \" MHz Clock\\n\",\n-\t\t       (double) fwd_cycles / total_pkts,\n-\t\t       fwd_cycles, cur_fwd_eng->fwd_mode_name, total_pkts,\n-\t\t       (uint64_t)(rte_get_tsc_hz() / CYC_PER_MHZ));\n+\t\t\tprintf(\"\\n  CPU cycles/packet=%.2F (total cycles=\"\n+\t\t\t       \"%\"PRIu64\" / total %s packets=%\"PRIu64\") at %\"PRIu64\n+\t\t\t       \" MHz Clock\\n\",\n+\t\t\t       (double) fwd_cycles / total_pkts,\n+\t\t\t       fwd_cycles, cur_fwd_eng->fwd_mode_name, total_pkts,\n+\t\t\t       (uint64_t)(rte_get_tsc_hz() / CYC_PER_MHZ));\n+\t\t}\n \t}\n-#endif\n }\n \n void\n@@ -2006,9 +2008,7 @@ fwd_stats_reset(void)\n \t\tmemset(&fs->rx_burst_stats, 0, sizeof(fs->rx_burst_stats));\n \t\tmemset(&fs->tx_burst_stats, 0, sizeof(fs->tx_burst_stats));\n #endif\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \t\tfs->core_cycles = 0;\n-#endif\n \t}\n }\n \ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex 25a12b14f29d..dcc37be02d59 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -129,9 +129,7 @@ struct fwd_stream {\n \tuint64_t rx_bad_outer_l4_csum;\n \t/**< received packets has bad outer l4 checksum */\n \tunsigned int gro_times;\t/**< GRO operation times */\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \tuint64_t     core_cycles; /**< used for RX and TX processing */\n-#endif\n #ifdef RTE_TEST_PMD_RECORD_BURST_STATS\n \tstruct pkt_burst_stats rx_burst_stats;\n \tstruct pkt_burst_stats tx_burst_stats;\n@@ -301,6 +299,7 @@ extern uint16_t nb_rx_queue_stats_mappings;\n extern uint8_t xstats_hide_zero; /**< Hide zero values for xstats display */\n \n /* globals used for configuration */\n+extern uint8_t record_core_cycles; /**< Enables measurement of CPU cycles */\n extern uint16_t verbose_level; /**< Drives messages being displayed, if any. */\n extern int testpmd_logtype; /**< Log type for testpmd logs */\n extern uint8_t  interactive;\n@@ -681,6 +680,20 @@ port_pci_reg_write(struct rte_port *port, uint32_t reg_off, uint32_t reg_v)\n #define port_id_pci_reg_write(pt_id, reg_off, reg_value) \\\n \tport_pci_reg_write(&ports[(pt_id)], (reg_off), (reg_value))\n \n+static inline void\n+get_start_cycles(uint64_t *start_tsc)\n+{\n+\tif (record_core_cycles)\n+\t\t*start_tsc = rte_rdtsc();\n+}\n+\n+static inline void\n+get_end_cycles(struct fwd_stream *fs, uint64_t start_tsc)\n+{\n+\tif (record_core_cycles)\n+\t\tfs->core_cycles += rte_rdtsc() - start_tsc;\n+}\n+\n /* Prototypes */\n unsigned int parse_item_list(char* str, const char* item_name,\n \t\t\tunsigned int max_items,\n@@ -772,6 +785,7 @@ void set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint8_t map_va\n \n void set_xstats_hide_zero(uint8_t on_off);\n \n+void set_record_core_cycles(uint8_t on_off);\n void set_verbose_level(uint16_t vb_level);\n void set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs);\n void show_tx_pkt_segments(void);\ndiff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c\nindex 97f4a452da12..00a3a6f90c7a 100644\n--- a/app/test-pmd/txonly.c\n+++ b/app/test-pmd/txonly.c\n@@ -294,15 +294,9 @@ pkt_burst_transmit(struct fwd_stream *fs)\n \tuint32_t retry;\n \tuint64_t ol_flags = 0;\n \tuint64_t tx_offloads;\n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tuint64_t start_tsc;\n-\tuint64_t end_tsc;\n-\tuint64_t core_cycles;\n-#endif\n+\tuint64_t start_tsc = 0;\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tstart_tsc = rte_rdtsc();\n-#endif\n+\tget_start_cycles(&start_tsc);\n \n \tmbp = current_fwd_lcore()->mbp;\n \ttxp = &ports[fs->tx_port];\n@@ -391,11 +385,7 @@ pkt_burst_transmit(struct fwd_stream *fs)\n \t\t} while (++nb_tx < nb_pkt);\n \t}\n \n-#ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n-\tend_tsc = rte_rdtsc();\n-\tcore_cycles = (end_tsc - start_tsc);\n-\tfs->core_cycles = (uint64_t) (fs->core_cycles + core_cycles);\n-#endif\n+\tget_end_cycles(fs, start_tsc);\n }\n \n static void\n",
    "prefixes": [
        "1/6"
    ]
}