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

Reply via email to