diff options
author | Ole Troan <ot@cisco.com> | 2018-06-14 09:28:27 +0200 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2018-06-15 12:07:40 +0000 |
commit | 1ec0ea85c3f57f4638e32a00396057f80d958ec9 (patch) | |
tree | fba386994bf101d4fda3a87af7d5e1a783cdf4c1 /src/vnet | |
parent | c22f87b8763c844e09177e30bbb92830cd928812 (diff) |
STATS: Add more hierarchy to counters.
Put error counters under node_index.
/err/<node-name>/<error-name>
E.g:
/err/ip4-lookup/Hash table collisions
/err/ip6-rewrite/Buffer allocation error
Error names are not globally unique, and this allows
for walking all errors for a particular node.
Put interface counters under the directory /if.
E.g. /if/rx
Put system counters under the directory /sys.
E.g. /sys/vector_rate
Change-Id: I5b794d16698f61bcb2063a8cd77a7c4ae36419b8
Signed-off-by: Ole Troan <ot@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/interface.c | 44 | ||||
-rw-r--r-- | src/vnet/interface.h | 20 |
2 files changed, 33 insertions, 31 deletions
diff --git a/src/vnet/interface.c b/src/vnet/interface.c index 7a2c3abd2d4..34ad292a728 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -1297,38 +1297,20 @@ vnet_interface_init (vlib_main_t * vm) CLIB_CACHE_LINE_BYTES); im->sw_if_counter_lock[0] = 1; /* should be no need */ - /* - * $$$$ add stat segment name(s) if desired - * set xxx.stat_segment_name = "whatever"... - */ vec_validate (im->sw_if_counters, VNET_N_SIMPLE_INTERFACE_COUNTER - 1); - im->sw_if_counters[VNET_INTERFACE_COUNTER_DROP].name = "drops"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_PUNT].name = "punts"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_IP4].name = "ip4"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_IP6].name = "ip6"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_RX_NO_BUF].name = "rx-no-buf"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_RX_MISS].name = "rx-miss"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_RX_ERROR].name = "rx-error"; - im->sw_if_counters[VNET_INTERFACE_COUNTER_TX_ERROR].name = "tx-error"; - - vec_validate (im->combined_sw_if_counters, - VNET_N_COMBINED_INTERFACE_COUNTER - 1); - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_RX].name = "rx"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_RX_UNICAST].name = - "rx-unicast"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_RX_MULTICAST].name = - "rx-multicast"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_RX_BROADCAST].name = - "rx-broadcast"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX].name = "tx"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX_UNICAST].name = - "tx-unicast"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX_MULTICAST].name = - "tx-multicast"; - im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX_BROADCAST].name = - "tx-broadcast"; - - im->sw_if_counter_lock[0] = 0; +#define _(E,n,p) \ + im->sw_if_counters[VNET_INTERFACE_COUNTER_##E].name = #n; \ + im->sw_if_counters[VNET_INTERFACE_COUNTER_##E].stat_segment_name = "/" #p "/" #n; + foreach_simple_interface_counter_name +#undef _ + vec_validate (im->combined_sw_if_counters, + VNET_N_COMBINED_INTERFACE_COUNTER - 1); +#define _(E,n,p) \ + im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_##E].name = #n; \ + im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_##E].stat_segment_name = "/" #p "/" #n; + foreach_combined_interface_counter_name +#undef _ + im->sw_if_counter_lock[0] = 0; im->device_class_by_name = hash_create_string ( /* size */ 0, sizeof (uword)); diff --git a/src/vnet/interface.h b/src/vnet/interface.h index b582dba7c8d..1181c341a0c 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -737,6 +737,26 @@ typedef enum _x <= VNET_INTERFACE_COUNTER_TX_BROADCAST; \ _x++) +#define foreach_simple_interface_counter_name \ + _(DROP, drops, if) \ + _(PUNT, punt, if) \ + _(IP4, ip4, if) \ + _(IP6, ip6, if) \ + _(RX_NO_BUF, rx-no-buf, if) \ + _(RX_MISS, rx-miss, if) \ + _(RX_ERROR, rx-error, if) \ + _(TX_ERROR, tx-error, if) + +#define foreach_combined_interface_counter_name \ + _(RX, rx, if) \ + _(RX_UNICAST, rx-unicast, if) \ + _(RX_MULTICAST, rx-multicast, if) \ + _(RX_BROADCAST, rx-broadcast, if) \ + _(TX, tx, if) \ + _(TX_UNICAST, tx-unicast-miss, if) \ + _(TX_MULTICAST, tx-multicast, if) \ + _(TX_BROADCAST, tx-broadcast, if) + typedef enum { COLLECT_SIMPLE_STATS = 0, |