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:
parent
5cd3cac9ed
commit
62d3216d61
@ -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"))
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user