app/testpmd: add record-burst-stats runtime config
authorDharmik Thakkar <dharmik.thakkar@arm.com>
Tue, 14 Jul 2020 21:51:05 +0000 (16:51 -0500)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:08 +0000 (18:55 +0200)
Convert CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS to a
runtime configuration.

Signed-off-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
Tested-by: Phil Yang <phil.yang@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
16 files changed:
app/test-pmd/5tswap.c
app/test-pmd/cmdline.c
app/test-pmd/config.c
app/test-pmd/csumonly.c
app/test-pmd/flowgen.c
app/test-pmd/icmpecho.c
app/test-pmd/iofwd.c
app/test-pmd/macfwd.c
app/test-pmd/macswap.c
app/test-pmd/parameters.c
app/test-pmd/rxonly.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h
app/test-pmd/txonly.c
doc/guides/testpmd_app_ug/run_app.rst
doc/guides/testpmd_app_ug/testpmd_funcs.rst

index 04f035b..d9026ce 100644 (file)
@@ -117,9 +117,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)
        if (unlikely(nb_rx == 0))
                return;
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
 
        fs->rx_packets += nb_rx;
        txp = &ports[fs->tx_port];
@@ -178,9 +176,7 @@ pkt_burst_5tuple_swap(struct fwd_stream *fs)
                }
        }
        fs->tx_packets += nb_tx;
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {
                fs->fwd_dropped += (nb_rx - nb_tx);
                do {
index fc9f504..0f33948 100644 (file)
@@ -532,6 +532,9 @@ static void cmd_help_long_parsed(void *parsed_result,
                        "set record-core-cycles on|off\n"
                        "    Set the option to enable measurement of CPU cycles.\n"
 
+                       "set record-burst-stats on|off\n"
+                       "    Set the option to enable display of RX and TX bursts.\n"
+
                        "set port (port_id) vf (vf_id) rx|tx on|off\n"
                        "    Enable/Disable a VF receive/tranmit from a port\n\n"
 
@@ -8380,6 +8383,48 @@ cmdline_parse_inst_t cmd_set_record_core_cycles = {
        },
 };
 
+/* *** SET OPTION TO ENABLE DISPLAY OF RX AND TX BURSTS *** */
+struct cmd_set_record_burst_stats_result {
+       cmdline_fixed_string_t keyword;
+       cmdline_fixed_string_t name;
+       cmdline_fixed_string_t on_off;
+};
+
+static void
+cmd_set_record_burst_stats_parsed(void *parsed_result,
+                       __rte_unused struct cmdline *cl,
+                       __rte_unused void *data)
+{
+       struct cmd_set_record_burst_stats_result *res;
+       uint16_t on_off = 0;
+
+       res = parsed_result;
+       on_off = !strcmp(res->on_off, "on") ? 1 : 0;
+       set_record_burst_stats(on_off);
+}
+
+cmdline_parse_token_string_t cmd_set_record_burst_stats_keyword =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                keyword, "set");
+cmdline_parse_token_string_t cmd_set_record_burst_stats_name =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                name, "record-burst-stats");
+cmdline_parse_token_string_t cmd_set_record_burst_stats_on_off =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_record_burst_stats_result,
+                                on_off, "on#off");
+
+cmdline_parse_inst_t cmd_set_record_burst_stats = {
+       .f = cmd_set_record_burst_stats_parsed,
+       .data = NULL,
+       .help_str = "set record-burst-stats on|off",
+       .tokens = {
+               (void *)&cmd_set_record_burst_stats_keyword,
+               (void *)&cmd_set_record_burst_stats_name,
+               (void *)&cmd_set_record_burst_stats_on_off,
+               NULL,
+       },
+};
+
 /* *** CONFIGURE UNICAST HASH TABLE *** */
 struct cmd_set_uc_hash_table {
        cmdline_fixed_string_t set;
@@ -19533,6 +19578,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_qmap,
        (cmdline_parse_inst_t *)&cmd_set_xstats_hide_zero,
        (cmdline_parse_inst_t *)&cmd_set_record_core_cycles,
+       (cmdline_parse_inst_t *)&cmd_set_record_burst_stats,
        (cmdline_parse_inst_t *)&cmd_operate_port,
        (cmdline_parse_inst_t *)&cmd_operate_specific_port,
        (cmdline_parse_inst_t *)&cmd_operate_attach_port,
index 7a7e3f0..dabe7c1 100644 (file)
@@ -3686,6 +3686,12 @@ set_record_core_cycles(uint8_t on_off)
        record_core_cycles = on_off;
 }
 
+void
+set_record_burst_stats(uint8_t on_off)
+{
+       record_burst_stats = on_off;
+}
+
 static inline void
 print_fdir_mask(struct rte_eth_fdir_masks *mask)
 {
index 836bafa..7ece398 100644 (file)
@@ -796,9 +796,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
        /* receive a burst of packet */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,
                                 nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
 
@@ -1082,9 +1080,7 @@ tunnel_update:
        fs->rx_bad_l4_csum += rx_bad_l4_csum;
        fs->rx_bad_outer_l4_csum += rx_bad_outer_l4_csum;
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {
                fs->fwd_dropped += (nb_rx - nb_tx);
                do {
index e92a0ee..acf3e24 100644 (file)
@@ -188,9 +188,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs)
        }
        fs->tx_packets += nb_tx;
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_pkt)) {
                /* Back out the flow counter. */
                next_flow -= (nb_pkt - nb_tx);
index 3f27e8c..af6f7e7 100644 (file)
@@ -302,9 +302,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
         */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,
                                 nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
 
@@ -503,9 +501,7 @@ reply_to_icmp_echo_rqsts(struct fwd_stream *fs)
                        }
                }
                fs->tx_packets += nb_tx;
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-               fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+               inc_tx_burst_stats(fs, nb_tx);
                if (unlikely(nb_tx < nb_replies)) {
                        fs->fwd_dropped += (nb_replies - nb_tx);
                        do {
index 456f7b5..83d098a 100644 (file)
@@ -59,9 +59,7 @@ pkt_burst_io_forward(struct fwd_stream *fs)
         */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue,
                        pkts_burst, nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
        fs->rx_packets += nb_rx;
@@ -80,9 +78,7 @@ pkt_burst_io_forward(struct fwd_stream *fs)
                }
        }
        fs->tx_packets += nb_tx;
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {
                fs->fwd_dropped += (nb_rx - nb_tx);
                do {
index 6a77568..0568ea7 100644 (file)
@@ -65,9 +65,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
         */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,
                                 nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
 
@@ -111,9 +109,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs)
        }
 
        fs->tx_packets += nb_tx;
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {
                fs->fwd_dropped += (nb_rx - nb_tx);
                do {
index aaef5b0..74e2dd8 100644 (file)
@@ -66,9 +66,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
         */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,
                                 nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
 
@@ -90,9 +88,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs)
                }
        }
        fs->tx_packets += nb_tx;
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_rx)) {
                fs->fwd_dropped += (nb_rx - nb_tx);
                do {
index 76072ae..7845153 100644 (file)
@@ -70,7 +70,8 @@ usage(char* progname)
               "--rxpt= | --rxht= | --rxwt= | --rxfreet= | "
               "--txpt= | --txht= | --txwt= | --txfreet= | "
               "--txrst= | --tx-offloads= | | --rx-offloads= | "
-              "--vxlan-gpe-port= | --record-core-cycles]\n",
+              "--vxlan-gpe-port= | --record-core-cycles | "
+              "--record-burst-stats]\n",
               progname);
 #ifdef RTE_LIBRTE_CMDLINE
        printf("  --interactive: run in interactive mode.\n");
@@ -217,6 +218,7 @@ usage(char* progname)
        printf("  --rx-mq-mode=0xX: hexadecimal bitmask of RX mq mode can be "
               "enabled\n");
        printf("  --record-core-cycles: enable measurement of CPU cycles.\n");
+       printf("  --record-burst-stats: enable display of RX and TX bursts.\n");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -679,6 +681,7 @@ launch_args_parse(int argc, char** argv)
                { "no-iova-contig",             0, 0, 0 },
                { "rx-mq-mode",                 1, 0, 0 },
                { "record-core-cycles",         0, 0, 0 },
+               { "record-burst-stats",         0, 0, 0 },
                { 0, 0, 0, 0 },
        };
 
@@ -1385,6 +1388,8 @@ launch_args_parse(int argc, char** argv)
                        }
                        if (!strcmp(lgopts[opt_idx].name, "record-core-cycles"))
                                record_core_cycles = 1;
+                       if (!strcmp(lgopts[opt_idx].name, "record-burst-stats"))
+                               record_burst_stats = 1;
                        break;
                case 'h':
                        usage(argv[0]);
index b6c8b8c..c78fc46 100644 (file)
@@ -58,9 +58,7 @@ pkt_burst_receive(struct fwd_stream *fs)
         */
        nb_rx = rte_eth_rx_burst(fs->rx_port, fs->rx_queue, pkts_burst,
                                 nb_pkt_per_burst);
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
-#endif
+       inc_rx_burst_stats(fs, nb_rx);
        if (unlikely(nb_rx == 0))
                return;
 
index f327b16..fb286b8 100644 (file)
@@ -480,6 +480,11 @@ uint8_t xstats_hide_zero;
  */
 uint8_t record_core_cycles;
 
+/*
+ * Display of RX and TX bursts disabled by default
+ */
+uint8_t record_burst_stats;
+
 unsigned int num_sockets = 0;
 unsigned int socket_ids[RTE_MAX_NUMA_NODES];
 
@@ -1684,7 +1689,6 @@ init_fwd_streams(void)
        return 0;
 }
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
 static void
 pkt_burst_stats_display(const char *rx_tx, struct pkt_burst_stats *pbs)
 {
@@ -1751,7 +1755,6 @@ pkt_burst_stats_display(const char *rx_tx, struct pkt_burst_stats *pbs)
                sburstp += burst_percent[i];
        }
 }
-#endif /* RTE_TEST_PMD_RECORD_BURST_STATS */
 
 static void
 fwd_stream_stats_display(streamid_t stream_id)
@@ -1782,10 +1785,10 @@ fwd_stream_stats_display(streamid_t stream_id)
                printf("\n");
        }
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       pkt_burst_stats_display("RX", &fs->rx_burst_stats);
-       pkt_burst_stats_display("TX", &fs->tx_burst_stats);
-#endif
+       if (record_burst_stats) {
+               pkt_burst_stats_display("RX", &fs->rx_burst_stats);
+               pkt_burst_stats_display("TX", &fs->tx_burst_stats);
+       }
 }
 
 void
@@ -1915,14 +1918,14 @@ fwd_stats_display(void)
                               stats.opackets + ports_stats[pt_id].tx_dropped);
                }
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-               if (ports_stats[pt_id].rx_stream)
-                       pkt_burst_stats_display("RX",
-                               &ports_stats[pt_id].rx_stream->rx_burst_stats);
-               if (ports_stats[pt_id].tx_stream)
-                       pkt_burst_stats_display("TX",
-                               &ports_stats[pt_id].tx_stream->tx_burst_stats);
-#endif
+               if (record_burst_stats) {
+                       if (ports_stats[pt_id].rx_stream)
+                               pkt_burst_stats_display("RX",
+                                       &ports_stats[pt_id].rx_stream->rx_burst_stats);
+                       if (ports_stats[pt_id].tx_stream)
+                               pkt_burst_stats_display("TX",
+                                       &ports_stats[pt_id].tx_stream->tx_burst_stats);
+               }
 
                if (port->rx_queue_stats_mapping_enabled) {
                        printf("\n");
@@ -2004,10 +2007,8 @@ fwd_stats_reset(void)
                fs->rx_bad_l4_csum = 0;
                fs->rx_bad_outer_l4_csum = 0;
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
                memset(&fs->rx_burst_stats, 0, sizeof(fs->rx_burst_stats));
                memset(&fs->tx_burst_stats, 0, sizeof(fs->tx_burst_stats));
-#endif
                fs->core_cycles = 0;
        }
 }
index dcc37be..a8ae5cc 100644 (file)
@@ -76,7 +76,6 @@ enum {
        /**< allocate mempool natively, use rte_pktmbuf_pool_create_extbuf */
 };
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
 /**
  * The data structure associated with RX and TX packet burst statistics
  * that are recorded for each forwarding stream.
@@ -84,7 +83,6 @@ enum {
 struct pkt_burst_stats {
        unsigned int pkt_burst_spread[MAX_PKT_BURST];
 };
-#endif
 
 /** Information for a given RSS type. */
 struct rss_type_info {
@@ -130,10 +128,8 @@ struct fwd_stream {
        /**< received packets has bad outer l4 checksum */
        unsigned int gro_times; /**< GRO operation times */
        uint64_t     core_cycles; /**< used for RX and TX processing */
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
        struct pkt_burst_stats rx_burst_stats;
        struct pkt_burst_stats tx_burst_stats;
-#endif
 };
 
 /** Descriptor for a single flow. */
@@ -300,6 +296,7 @@ extern uint8_t xstats_hide_zero; /**< Hide zero values for xstats display */
 
 /* globals used for configuration */
 extern uint8_t record_core_cycles; /**< Enables measurement of CPU cycles */
+extern uint8_t record_burst_stats; /**< Enables display of RX and TX bursts */
 extern uint16_t verbose_level; /**< Drives messages being displayed, if any. */
 extern int testpmd_logtype; /**< Log type for testpmd logs */
 extern uint8_t  interactive;
@@ -694,6 +691,20 @@ get_end_cycles(struct fwd_stream *fs, uint64_t start_tsc)
                fs->core_cycles += rte_rdtsc() - start_tsc;
 }
 
+static inline void
+inc_rx_burst_stats(struct fwd_stream *fs, uint16_t nb_rx)
+{
+       if (record_burst_stats)
+               fs->rx_burst_stats.pkt_burst_spread[nb_rx]++;
+}
+
+static inline void
+inc_tx_burst_stats(struct fwd_stream *fs, uint16_t nb_tx)
+{
+       if (record_burst_stats)
+               fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
+}
+
 /* Prototypes */
 unsigned int parse_item_list(char* str, const char* item_name,
                        unsigned int max_items,
@@ -786,6 +797,7 @@ void set_qmap(portid_t port_id, uint8_t is_rx, uint16_t queue_id, uint8_t map_va
 void set_xstats_hide_zero(uint8_t on_off);
 
 void set_record_core_cycles(uint8_t on_off);
+void set_record_burst_stats(uint8_t on_off);
 void set_verbose_level(uint16_t vb_level);
 void set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs);
 void show_tx_pkt_segments(void);
index 2f20112..45def72 100644 (file)
@@ -374,9 +374,7 @@ pkt_burst_transmit(struct fwd_stream *fs)
        if (txonly_multi_flow)
                RTE_PER_LCORE(_ip_var) -= nb_pkt - nb_tx;
 
-#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-       fs->tx_burst_stats.pkt_burst_spread[nb_tx]++;
-#endif
+       inc_tx_burst_stats(fs, nb_tx);
        if (unlikely(nb_tx < nb_pkt)) {
                if (verbose_level > 0 && fs->fwd_dropped == 0)
                        printf("port %d tx_queue %d - drop "
index 00bacb2..e2539f6 100644 (file)
@@ -493,3 +493,7 @@ The command line options are:
 *   ``--record-core-cycles``
 
     Enable measurement of CPU cycles per packet.
+
+*   ``--record-burst-stats``
+
+    Enable display of RX and TX burst stats.
index 59d052c..e881f41 100644 (file)
@@ -725,6 +725,21 @@ Where:
 
 This is equivalent to the ``--record-core-cycles command-line`` option.
 
+set record-burst-stats
+~~~~~~~~~~~~~~~~~~~~~~
+
+Set the displaying of RX and TX bursts::
+
+   testpmd> set record-burst-stats (on|off)
+
+Where:
+
+* ``on`` enables display of RX and TX bursts.
+
+* ``off`` disables display of RX and TX bursts.
+
+This is equivalent to the ``--record-burst-stats command-line`` option.
+
 set burst
 ~~~~~~~~~