app/testpmd: add latency statistics calculation

This patch adds latency stats commandline argument to testpmd,
allowing to specify the lcore to use for latencystats updates.

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Signed-off-by: Remy Horton <remy.horton@intel.com>
This commit is contained in:
Reshma Pattan 2017-03-30 22:01:02 +01:00 committed by Thomas Monjalon
parent 5cd3cac9ed
commit 62d3216d61
3 changed files with 65 additions and 2 deletions

View File

@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
* Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
* Copyright(c) 2010-2017 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -149,6 +149,10 @@ usage(char* progname)
"the packet will be enqueued into the rx drop-queue. "
"If the drop-queue doesn't exist, the packet is dropped. "
"By default drop-queue=127.\n");
#ifdef RTE_LIBRTE_LATENCY_STATS
printf(" --latencystats=N: enable latency and jitter statistcs "
"monitoring on forwarding lcore id N.\n");
#endif
printf(" --crc-strip: enable CRC stripping by hardware.\n");
printf(" --enable-lro: enable large receive offload.\n");
printf(" --enable-rx-cksum: enable rx hardware checksum offload.\n");
@ -526,6 +530,9 @@ launch_args_parse(int argc, char** argv)
{ "pkt-filter-report-hash", 1, 0, 0 },
{ "pkt-filter-size", 1, 0, 0 },
{ "pkt-filter-drop-queue", 1, 0, 0 },
#ifdef RTE_LIBRTE_LATENCY_STATS
{ "latencystats", 1, 0, 0 },
#endif
{ "crc-strip", 0, 0, 0 },
{ "enable-lro", 0, 0, 0 },
{ "enable-rx-cksum", 0, 0, 0 },
@ -766,6 +773,19 @@ launch_args_parse(int argc, char** argv)
"drop queue %d invalid - must"
"be >= 0 \n", n);
}
#ifdef RTE_LIBRTE_LATENCY_STATS
if (!strcmp(lgopts[opt_idx].name,
"latencystats")) {
n = atoi(optarg);
if (n >= 0) {
latencystats_lcore_id = (lcoreid_t) n;
latencystats_enabled = 1;
} else
rte_exit(EXIT_FAILURE,
"invalid lcore id %d for latencystats"
" must be >= 0\n", n);
}
#endif
if (!strcmp(lgopts[opt_idx].name, "crc-strip"))
rx_mode.hw_strip_crc = 1;
if (!strcmp(lgopts[opt_idx].name, "enable-lro"))

View File

@ -83,6 +83,10 @@
#ifdef RTE_LIBRTE_BITRATE
#include <rte_bitrate.h>
#endif
#include <rte_metrics.h>
#ifdef RTE_LIBRTE_LATENCY_STATS
#include <rte_latencystats.h>
#endif
#include "testpmd.h"
@ -276,6 +280,20 @@ uint32_t bypass_timeout = RTE_BYPASS_TMT_OFF;
#endif
#ifdef RTE_LIBRTE_LATENCY_STATS
/*
* Set when latency stats is enabled in the commandline
*/
uint8_t latencystats_enabled;
/*
* Lcore ID to serive latency statistics.
*/
lcoreid_t latencystats_lcore_id = -1;
#endif
/*
* Ethernet device configuration.
*/
@ -953,6 +971,11 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
tics_datum = tics_current;
}
#endif
#ifdef RTE_LIBRTE_LATENCY_STATS
if (latencystats_lcore_id == rte_lcore_id())
rte_latencystats_update();
#endif
} while (! fc->stopped);
}
@ -2094,6 +2117,9 @@ signal_handler(int signum)
#ifdef RTE_LIBRTE_PDUMP
/* uninitialize packet capture framework */
rte_pdump_uninit();
#endif
#ifdef RTE_LIBRTE_LATENCY_STATS
rte_latencystats_uninit();
#endif
force_quit();
/* exit with the expected status */
@ -2156,6 +2182,17 @@ main(int argc, char** argv)
/* Init metrics library */
rte_metrics_init(rte_socket_id());
#ifdef RTE_LIBRTE_LATENCY_STATS
if (latencystats_enabled != 0) {
int ret = rte_latencystats_init(1, NULL);
if (ret)
printf("Warning: latencystats init()"
" returned error %d\n", ret);
printf("Latencystats running on lcore %d\n",
latencystats_lcore_id);
}
#endif
/* Setup bitrate stats */
#ifdef RTE_LIBRTE_BITRATE
bitrate_data = rte_stats_bitrate_create();

View File

@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
* Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
* Copyright(c) 2010-2017 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -381,6 +381,12 @@ extern enum dcb_queue_mapping_mode dcb_q_mapping;
extern uint16_t mbuf_data_size; /**< Mbuf data space size. */
extern uint32_t param_total_num_mbufs;
#ifdef RTE_LIBRTE_LATENCY_STATS
extern uint8_t latencystats_enabled;
extern lcoreid_t latencystats_lcore_id;
#endif
extern struct rte_fdir_conf fdir_conf;
/*