On 02/12/2021 21:16, David Marchand wrote:
When troubleshooting multiqueue setups, having per queue statistics helps checking packets repartition in rx and tx queues.Per queue statistics are exported by most DPDK drivers (with capability RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS). OVS only filters DPDK statistics, there is nothing to request in DPDK API. So the only change is to extend the filter on xstats. Querying statistics with $ ovs-vsctl get interface dpdk0 statistics | sed -e 's#[{}]##g' -e 's#, #\n#g' and comparing gives: @@ -13,7 +13,12 @@ rx_phy_crc_errors=0 rx_phy_in_range_len_errors=0 rx_phy_symbol_errors=0 +rx_q0_bytes=0 rx_q0_errors=0 +rx_q0_packets=0 +rx_q1_bytes=0 rx_q1_errors=0 +rx_q1_packets=0 rx_wqe_errors=0 tx_broadcast_packets=0 tx_bytes=0 @@ -27,3 +32,13 @@ tx_pp_rearm_queue_errors=0 tx_pp_timestamp_future_errors=0 tx_pp_timestamp_past_errors=0 +tx_q0_bytes=0 +tx_q0_packets=0 +tx_q1_bytes=0 +tx_q1_packets=0 +tx_q2_bytes=0 +tx_q2_packets=0 +tx_q3_bytes=0 +tx_q3_packets=0 +tx_q4_bytes=0 +tx_q4_packets=0 Signed-off-by: David Marchand <[email protected]> Reviewed-by: Maxime Coquelin <[email protected]>
Tested and working when increasing/decreasing rx/tx queues. 'rx_q15_bytes=0, rx_q15_errors=0, rx_q15_packets=0' Acked-by: Kevin Traynor <[email protected]>
--- Changes since RFC: - dropped regex and used simpler string manipulations, --- lib/netdev-dpdk.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 51bb41551b..1e6079d544 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -1582,6 +1582,16 @@ netdev_dpdk_get_xstat_name(struct netdev_dpdk *dev, uint64_t id) return dev->rte_xstats_names[id].name; }+static bool+is_queue_stat(const char *s) +{ + uint16_t tmp; + + return (s[0] == 'r' || s[0] == 't') && + (ovs_scan(s + 1, "x_q%"SCNu16"_packets", &tmp) || + ovs_scan(s + 1, "x_q%"SCNu16"_bytes", &tmp)); +} + static void netdev_dpdk_configure_xstats(struct netdev_dpdk *dev) OVS_REQUIRES(dev->mutex) @@ -1632,9 +1642,10 @@ netdev_dpdk_configure_xstats(struct netdev_dpdk *dev) id = rte_xstats[i].id; name = netdev_dpdk_get_xstat_name(dev, id);- /* We need to filter out everything except dropped, error and- * management counters. */ - if (string_ends_with(name, "_errors") || + /* For custom stats, we filter out everything except per rxq/txq basic + * stats, and dropped, error and management counters. */ + if (is_queue_stat(name) || + string_ends_with(name, "_errors") || strstr(name, "_management_") || string_ends_with(name, "_dropped")) {
_______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
