app/testpmd: add bitrate statistics calculation
Calculate bitrate statistics using the bitrate stats library. The resulting statistics can be viewed via proc_info. Signed-off-by: Remy Horton <remy.horton@intel.com>
This commit is contained in:
parent
2ad7ba9a65
commit
7e4441c8ef
@ -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
|
||||
@ -79,6 +79,10 @@
|
||||
#include <rte_pdump.h>
|
||||
#endif
|
||||
#include <rte_flow.h>
|
||||
#include <rte_metrics.h>
|
||||
#ifdef RTE_LIBRTE_BITRATE
|
||||
#include <rte_bitrate.h>
|
||||
#endif
|
||||
|
||||
#include "testpmd.h"
|
||||
|
||||
@ -323,6 +327,9 @@ uint16_t nb_rx_queue_stats_mappings = 0;
|
||||
|
||||
unsigned max_socket = 0;
|
||||
|
||||
/* Bitrate statistics */
|
||||
struct rte_stats_bitrates *bitrate_data;
|
||||
|
||||
/* Forward function declarations */
|
||||
static void map_port_queue_stats_mapping_registers(uint8_t pi, struct rte_port *port);
|
||||
static void check_all_ports_link_status(uint32_t port_mask);
|
||||
@ -922,12 +929,30 @@ run_pkt_fwd_on_lcore(struct fwd_lcore *fc, packet_fwd_t pkt_fwd)
|
||||
struct fwd_stream **fsm;
|
||||
streamid_t nb_fs;
|
||||
streamid_t sm_id;
|
||||
#ifdef RTE_LIBRTE_BITRATE
|
||||
uint64_t tics_per_1sec;
|
||||
uint64_t tics_datum;
|
||||
uint64_t tics_current;
|
||||
uint8_t idx_port, cnt_ports;
|
||||
|
||||
cnt_ports = rte_eth_dev_count();
|
||||
tics_datum = rte_rdtsc();
|
||||
tics_per_1sec = rte_get_timer_hz();
|
||||
#endif
|
||||
fsm = &fwd_streams[fc->stream_idx];
|
||||
nb_fs = fc->stream_nb;
|
||||
do {
|
||||
for (sm_id = 0; sm_id < nb_fs; sm_id++)
|
||||
(*pkt_fwd)(fsm[sm_id]);
|
||||
#ifdef RTE_LIBRTE_BITRATE
|
||||
tics_current = rte_rdtsc();
|
||||
if (tics_current - tics_datum >= tics_per_1sec) {
|
||||
/* Periodic bitrate calculation */
|
||||
for (idx_port = 0; idx_port < cnt_ports; idx_port++)
|
||||
rte_stats_bitrate_calc(bitrate_data, idx_port);
|
||||
tics_datum = tics_current;
|
||||
}
|
||||
#endif
|
||||
} while (! fc->stopped);
|
||||
}
|
||||
|
||||
@ -2128,6 +2153,18 @@ main(int argc, char** argv)
|
||||
FOREACH_PORT(port_id, ports)
|
||||
rte_eth_promiscuous_enable(port_id);
|
||||
|
||||
/* Init metrics library */
|
||||
rte_metrics_init(rte_socket_id());
|
||||
|
||||
/* Setup bitrate stats */
|
||||
#ifdef RTE_LIBRTE_BITRATE
|
||||
bitrate_data = rte_stats_bitrate_create();
|
||||
if (bitrate_data == NULL)
|
||||
rte_exit(EXIT_FAILURE, "Could not allocate bitrate data.\n");
|
||||
rte_stats_bitrate_reg(bitrate_data);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef RTE_LIBRTE_CMDLINE
|
||||
if (interactive == 1) {
|
||||
if (auto_start) {
|
||||
|
Loading…
Reference in New Issue
Block a user