From: Remy Horton Date: Thu, 30 Mar 2017 21:01:00 +0000 (+0100) Subject: app/testpmd: add bitrate statistics calculation X-Git-Tag: spdx-start~3772 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=7e4441c8efb9;p=dpdk.git 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 --- diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 484c19bcb3..41c39b16f0 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -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 #endif #include +#include +#ifdef RTE_LIBRTE_BITRATE +#include +#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) {