On 19 Sep 2024, at 12:46, Jun Wang wrote:
>> On Wed, Sep 18, 2024 at 4:01 AM Jun Wang <[email protected]> wrote: >>> >>>> On Mon, Sep 16, 2024 at 9:46 AM Eelco Chaudron <[email protected]> wrote: >>>>> On 14 Sep 2024, at 7:26, Jun Wang wrote: >>>>> >>>>>> For many network cards, xstat statistics cannot be queried in the >>>>>> ovs interface. A new interface is added to retrieve all xstat >>>>>> information of the network card. >>>>> Hi Jun, >>>>> >>>>> Isn’t this already handled with netdev_dpdk_get_custom_stats()? I think >>>>> you can see them with ‘ovs-vsctl get Interface <port> statistics. >>>>> >>>>> If this is not the case this is what we should enhance. >>>> >>>> xstats are currently filtered to only save per queue stats and some >>>> common counters. >>> >>>> 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) >>>> { >>>> ... >>>> >>>> /* 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->rte_xstats_ids[dev->rte_xstats_ids_size] = id; >>>> dev->rte_xstats_ids_size++; >>>> } >>>> >>>> >>>> Could you explain which stats you are missing? >>> >>> Hi David, >>> As you mentioned, I also found that the results obtained by >>> netdev_dpdk_get_custom_stats are filtered. However, I noticed that in >>> DPDK, different net drivers handle xstats commands in various ways. >>> If we apply a unified filtering process, it may result in not being >>> able to retrieve the desired results for different net drivers. >>> Therefore, I believe adding a new interface might be a suitable >>> solution. For example, the xstats of the ixgbe/i40e/txgbe driver. >> >> Well, the problem is that drivers came up with all the stats they >> could get from the hw with no unification. >> This is why I was requesting some example of the stats you need, to >> see if DPDK can align drivers, and then OVS filter can be extended. >> >> On the other hand, for *debugging*, you may query those vendor >> specific stats via the DPDK telemetry socket. > > I tried using DPDK telemetry with the X710 network card, and it was > indeed able to retrieve all xstat statistics. However, there seems to > be an issue with retrieving xstat data from the Wangxun network card > using the txgbe driver. > This might be an issue with the specific driver. > > X710 i40e driver: > --> /ethdev/xstats,0 > { > "/ethdev/xstats": { > "rx_good_packets": 4158196, > "tx_good_packets": 817922, > "rx_good_bytes": 307686767, > "tx_good_bytes": 64879395, > "rx_missed_errors": 0, > "rx_errors": 0, > "tx_errors": 0, > "rx_mbuf_allocation_errors": 0, > "rx_unicast_packets": 804771, > "rx_multicast_packets": 387605, > "rx_broadcast_packets": 2947488, > "rx_dropped_packets": 0, > "rx_unknown_protocol_packets": 4158200, > "rx_size_error_packets": 0, > "tx_unicast_packets": 799583, > "tx_multicast_packets": 18288, > "tx_broadcast_packets": 51, > "tx_dropped_packets": 0, > "tx_link_down_dropped": 0, > "rx_crc_errors": 0, > "rx_illegal_byte_errors": 0, > "rx_error_bytes": 0, > "mac_local_errors": 1, > "mac_remote_errors": 1, > "rx_length_errors": 0, > "tx_xon_packets": 0, > "rx_xon_packets": 0, > "tx_xoff_packets": 0, > "rx_xoff_packets": 0, > "rx_size_64_packets": 546485, > "rx_size_65_to_127_packets": 3542514, > "rx_size_128_to_255_packets": 18619, > "rx_size_256_to_511_packets": 18319, > "rx_size_512_to_1023_packets": 8458, > "rx_size_1024_to_1522_packets": 5469, > "rx_size_1523_to_max_packets": 0, > "rx_undersized_errors": 0, > "rx_oversize_errors": 0, > "rx_mac_short_dropped": 0, > "rx_fragmented_errors": 0, > "rx_jabber_errors": 0, > "tx_size_64_packets": 198245, > "tx_size_65_to_127_packets": 599690, > "tx_size_128_to_255_packets": 19645, > "tx_size_256_to_511_packets": 236, > "tx_size_512_to_1023_packets": 53, > "tx_size_1024_to_1522_packets": 53, > "tx_size_1523_to_max_packets": 0, > "rx_flow_director_atr_match_packets": 0, > "rx_flow_director_sb_match_packets": 378618, > "tx_low_power_idle_status": 0, > "rx_low_power_idle_status": 0, > "tx_low_power_idle_count": 0, > "rx_low_power_idle_count": 0, > "rx_priority0_xon_packets": 0, > "rx_priority1_xon_packets": 0, > "rx_priority2_xon_packets": 0, > "rx_priority3_xon_packets": 0, > "rx_priority4_xon_packets": 0, > "rx_priority5_xon_packets": 0, > "rx_priority6_xon_packets": 0, > "rx_priority7_xon_packets": 0, > "rx_priority0_xoff_packets": 0, > "rx_priority1_xoff_packets": 0, > "rx_priority2_xoff_packets": 0, > "rx_priority3_xoff_packets": 0, > "rx_priority4_xoff_packets": 0, > "rx_priority5_xoff_packets": 0, > "rx_priority6_xoff_packets": 0, > "rx_priority7_xoff_packets": 0, > "tx_priority0_xon_packets": 0, > "tx_priority1_xon_packets": 0, > "tx_priority2_xon_packets": 0, > "tx_priority3_xon_packets": 0, > "tx_priority4_xon_packets": 0, > "tx_priority5_xon_packets": 0, > "tx_priority6_xon_packets": 0, > "tx_priority7_xon_packets": 0, > "tx_priority0_xoff_packets": 0, > "tx_priority1_xoff_packets": 0, > "tx_priority2_xoff_packets": 0, > "tx_priority3_xoff_packets": 0, > "tx_priority4_xoff_packets": 0, > "tx_priority5_xoff_packets": 0, > "tx_priority6_xoff_packets": 0, > "tx_priority7_xoff_packets": 0, > "tx_priority0_xon_to_xoff_packets": 0, > "tx_priority1_xon_to_xoff_packets": 0, > "tx_priority2_xon_to_xoff_packets": 0, > "tx_priority3_xon_to_xoff_packets": 0, > "tx_priority4_xon_to_xoff_packets": 0, > "tx_priority5_xon_to_xoff_packets": 0, > "tx_priority6_xon_to_xoff_packets": 0, > "tx_priority7_xon_to_xoff_packets": 0 > } > } > > wangxun txgbe driver: > --> /ethdev/xstats,0 > { > "/ethdev/xstats": { > "rx_good_packets": 28224, > "tx_good_packets": 110, > "rx_good_bytes": 3048375, > "tx_good_bytes": 13640, > "rx_missed_errors": 0, > "rx_errors": 0, > "tx_errors": 0, > "rx_mbuf_allocation_errors": 0 > } > } > As you can get the data through telemetry, I feel like we should not add any (duplicate) DPDK-specific commands. If you feel like we still need this through OVS somehow, I would suggest researching if we can get it by adding some additional flag to an existing command. Cheers, Eelco _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
