diff options
author | Sean Hope <shope@cisco.com> | 2016-03-28 13:11:31 -0400 |
---|---|---|
committer | Damjan Marion <damarion@cisco.com> | 2016-04-18 14:26:48 +0000 |
commit | a4f16a0e570e663bdf6285b0ac5c4258fcd9ffd3 (patch) | |
tree | 4b9386c4c483ffbec77579a559c44f90cd61d925 /vnet/vnet/devices/dpdk/format.c | |
parent | fef15b4bb88c61248393b93d13b1f79bb628def0 (diff) |
Add API to get the dpdk interface stats delta.
Internally change the clearing and displaying of the dpdk stats to be
based on deltas.
Change-Id: I76605ac67492a374ff5522ff44d4a0190cf94e18
Signed-off-by: Todd Foggoa (tfoggoa) <tfoggoa@cisco.com>
Diffstat (limited to 'vnet/vnet/devices/dpdk/format.c')
-rw-r--r-- | vnet/vnet/devices/dpdk/format.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/vnet/vnet/devices/dpdk/format.c b/vnet/vnet/devices/dpdk/format.c index 447dfffb1b6..9c015d06272 100644 --- a/vnet/vnet/devices/dpdk/format.c +++ b/vnet/vnet/devices/dpdk/format.c @@ -529,27 +529,37 @@ u8 * format_dpdk_device (u8 * s, va_list * args) { #define _(N, V) \ - if (xd->stats.V != 0) \ - s = format (s, "\n%U%-40U%16Ld", \ - format_white_space, indent + 2, \ - format_c_identifier, #N, xd->stats.V); + if ((xd->stats.V - xd->last_cleared_stats.V) != 0) { \ + s = format (s, "\n%U%-40U%16Ld", \ + format_white_space, indent + 2, \ + format_c_identifier, #N, \ + xd->stats.V - xd->last_cleared_stats.V); \ + } \ foreach_dpdk_counter #undef _ } u8 * xs = 0; - struct rte_eth_xstats * xstat; + u32 i = 0; - vec_foreach(xstat, xd->xstats) + ASSERT(vec_len(xd->xstats) == vec_len(xd->last_cleared_xstats)); + + vec_foreach_index(i, xd->xstats) { - if (verbose == 2 || (verbose && xstat->value)) + u64 delta = 0; + struct rte_eth_xstats* xstat = vec_elt_at_index(xd->xstats, i); + struct rte_eth_xstats* last_xstat = + vec_elt_at_index(xd->last_cleared_xstats, i); + + delta = xstat->value - last_xstat->value; + if (verbose == 2 || (verbose && delta)) { - /* format_c_identifier don't like c strings inside vector */ + /* format_c_identifier doesn't like c strings inside vector */ u8 * name = format(0,"%s", xstat->name); xs = format(xs, "\n%U%-38U%16Ld", format_white_space, indent + 4, - format_c_identifier, name, xstat->value); + format_c_identifier, name, delta); vec_free(name); } } |