DPDK patches and discussions
 help / color / mirror / Atom feed
* net/virtio: duplicated xstats
@ 2023-11-24  9:18 Edwin Brossette
  2023-11-24  9:26 ` Olivier Matz
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Edwin Brossette @ 2023-11-24  9:18 UTC (permalink / raw)
  To: dev; +Cc: maxime.cocquelin, Olivier Matz

[-- Attachment #1: Type: text/plain, Size: 5316 bytes --]

Hello,

I noticed a small inconsistency in the virtio pmd's xstats.
The stat "rx_q0_errors" appears twice.
I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets" and
"tx_q0_bytes" are duplicates of "rx_q0_good_packets", "rx_q0_good_bytes",
"tx_q0_good_packets" and "tx_q0_good_bytes"

I believe this issue probably appeared after this commit:

f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2

From what I understand, the rxq0_error stat was originally reported by the
librte. However, changes were made so it is reported by the pmd instead.
The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep the
old behaviour so that every pmd could have time to adapt the change.
But it seems the flag was forgotten in the virtio pmd and as a result, some
stats are fetched at two different times when displaying xstats.

First in lib_rte_ethdev:
https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
(you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS flag before
the snprintf on eth_dev_rxq_stats_strings[] )

And a second time in the virtio pmd:
https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705 pmd
(see the snprintf on rte_virtio_rxq_stat_strings[] )

This problem can be reproduced on testpmd simply by displaying the xstats
on a port with the net_virtio driver:

Reproduction:
===========

    1) start dpdk-testpmd:

modprobe -a uio_pci_generic
dpdk-devbind -b uio_pci_generic 03:00.0
dpdk-devbind -b uio_pci_generic 04:00.0

dpdk-devbind -s

Network devices using DPDK-compatible driver
============================================
0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
unused=vfio-pci
0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
unused=vfio-pci
[...]

dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
--coremask=0x4 --total-num-mbufs=250000
EAL: Detected CPU lcores: 3
EAL: Detected NUMA nodes: 1
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:03:00.0 (socket
-1)
EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:04:00.0 (socket
-1)
Interactive-mode selected
Warning: NUMA should be configured manually by using --port-numa-config and
--ring-numa-config parameters along with --numa.
testpmd: create a new mbuf pool <mb_pool_0>: n=250000, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Configuring Port 0 (socket 0)
Port 0: 52:54:00:B0:8F:88
Configuring Port 1 (socket 0)
Port 1: 52:54:00:EF:09:1F
Checking link statuses...
Done

    2) port info:

show port info 0

********************* Infos for port 0  *********************
MAC address: 52:54:00:B0:8F:88
Device name: 0000:03:00.0
Driver name: net_virtio
Firmware-version: not available
Devargs:
Connect to socket: 0
memory allocation on the socket: 0
Link status: up
Link speed: Unknown
Link duplex: full-duplex
Autoneg status: On
MTU: 1500
Promiscuous mode: enabled
Allmulticast mode: disabled
Maximum number of MAC addresses: 64
Maximum number of MAC addresses of hash filtering: 0
VLAN offload:
  strip off, filter off, extend off, qinq strip off
No RSS offload flow type is supported.
Minimum size of RX buffer: 64
Maximum configurable length of RX packet: 9728
Maximum configurable size of LRO aggregated packet: 0
Current number of RX queues: 1
Max possible RX queues: 1
Max possible number of RXDs per queue: 32768
Min possible number of RXDs per queue: 32
RXDs number alignment: 1
Current number of TX queues: 1
Max possible TX queues: 1
Max possible number of TXDs per queue: 32768
Min possible number of TXDs per queue: 32
TXDs number alignment: 1
Max segment number per packet: 65535
Max segment number per MTU/TSO: 65535
Device capabilities: 0x0( )
Device error handling mode: none
Device private info:
guest_features: 0x110af8020
vtnet_hdr_size: 12
use_vec: rx-0 tx-0
use_inorder: rx-0 tx-0
intr_lsc: 1
max_mtu: 9698
max_rx_pkt_len: 1530
max_queue_pairs: 1
req_guest_features: 0x8000005f10ef8028

    3) show port xstats:

show port xstats 0
###### NIC extended statistics for port 0
rx_good_packets: 0
tx_good_packets: 0
rx_good_bytes: 0
tx_good_bytes: 0
rx_missed_errors: 0
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0_packets: 0
rx_q0_bytes: 0
rx_q0_errors: 0      <==================
tx_q0_packets: 0
tx_q0_bytes: 0
rx_q0_good_packets: 0
rx_q0_good_bytes: 0
rx_q0_errors: 0      <==================
rx_q0_multicast_packets: 0
rx_q0_broadcast_packets: 0
rx_q0_undersize_packets: 0
rx_q0_size_64_packets: 0
rx_q0_size_65_127_packets: 0
rx_q0_size_128_255_packets: 0
rx_q0_size_256_511_packets: 0
rx_q0_size_512_1023_packets: 0
rx_q0_size_1024_1518_packets: 0
rx_q0_size_1519_max_packets: 0
tx_q0_good_packets: 0
tx_q0_good_bytes: 0
tx_q0_multicast_packets: 0
tx_q0_broadcast_packets: 0
tx_q0_undersize_packets: 0
tx_q0_size_64_packets: 0
tx_q0_size_65_127_packets: 0
tx_q0_size_128_255_packets: 0
tx_q0_size_256_511_packets: 0
tx_q0_size_512_1023_packets: 0
tx_q0_size_1024_1518_packets: 0
tx_q0_size_1519_max_packets: 0

You can see the stat "rx_q0_errors" appeared twice.

[-- Attachment #2: Type: text/html, Size: 6588 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-24  9:18 net/virtio: duplicated xstats Edwin Brossette
@ 2023-11-24  9:26 ` Olivier Matz
  2023-11-24 10:39   ` Maxime Coquelin
  2023-11-24 13:52 ` [PATCH] net/virtio: fix duplicated rxq xstats edwin.brossette
  2023-11-27 10:19 ` net/virtio: duplicated xstats Ferruh Yigit
  2 siblings, 1 reply; 10+ messages in thread
From: Olivier Matz @ 2023-11-24  9:26 UTC (permalink / raw)
  To: Edwin Brossette; +Cc: dev, Maxime Coquelin

Fix Maxime's mail.

On Fri, Nov 24, 2023 at 10:18:27AM +0100, Edwin Brossette wrote:
> Hello,
> 
> I noticed a small inconsistency in the virtio pmd's xstats.
> The stat "rx_q0_errors" appears twice.
> I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets" and
> "tx_q0_bytes" are duplicates of "rx_q0_good_packets", "rx_q0_good_bytes",
> "tx_q0_good_packets" and "tx_q0_good_bytes"
> 
> I believe this issue probably appeared after this commit:
> 
> f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
> http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2
> 
> From what I understand, the rxq0_error stat was originally reported by the
> librte. However, changes were made so it is reported by the pmd instead.
> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep the
> old behaviour so that every pmd could have time to adapt the change.
> But it seems the flag was forgotten in the virtio pmd and as a result, some
> stats are fetched at two different times when displaying xstats.
> 
> First in lib_rte_ethdev:
> https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
> (you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS flag before
> the snprintf on eth_dev_rxq_stats_strings[] )
> 
> And a second time in the virtio pmd:
> https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705 pmd
> (see the snprintf on rte_virtio_rxq_stat_strings[] )
> 
> This problem can be reproduced on testpmd simply by displaying the xstats
> on a port with the net_virtio driver:
> 
> Reproduction:
> ===========
> 
>     1) start dpdk-testpmd:
> 
> modprobe -a uio_pci_generic
> dpdk-devbind -b uio_pci_generic 03:00.0
> dpdk-devbind -b uio_pci_generic 04:00.0
> 
> dpdk-devbind -s
> 
> Network devices using DPDK-compatible driver
> ============================================
> 0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> unused=vfio-pci
> 0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> unused=vfio-pci
> [...]
> 
> dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
> --coremask=0x4 --total-num-mbufs=250000
> EAL: Detected CPU lcores: 3
> EAL: Detected NUMA nodes: 1
> EAL: Detected static linkage of DPDK
> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
> EAL: Selected IOVA mode 'PA'
> EAL: VFIO support initialized
> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:03:00.0 (socket
> -1)
> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:04:00.0 (socket
> -1)
> Interactive-mode selected
> Warning: NUMA should be configured manually by using --port-numa-config and
> --ring-numa-config parameters along with --numa.
> testpmd: create a new mbuf pool <mb_pool_0>: n=250000, size=2176, socket=0
> testpmd: preferred mempool ops selected: ring_mp_mc
> Configuring Port 0 (socket 0)
> Port 0: 52:54:00:B0:8F:88
> Configuring Port 1 (socket 0)
> Port 1: 52:54:00:EF:09:1F
> Checking link statuses...
> Done
> 
>     2) port info:
> 
> show port info 0
> 
> ********************* Infos for port 0  *********************
> MAC address: 52:54:00:B0:8F:88
> Device name: 0000:03:00.0
> Driver name: net_virtio
> Firmware-version: not available
> Devargs:
> Connect to socket: 0
> memory allocation on the socket: 0
> Link status: up
> Link speed: Unknown
> Link duplex: full-duplex
> Autoneg status: On
> MTU: 1500
> Promiscuous mode: enabled
> Allmulticast mode: disabled
> Maximum number of MAC addresses: 64
> Maximum number of MAC addresses of hash filtering: 0
> VLAN offload:
>   strip off, filter off, extend off, qinq strip off
> No RSS offload flow type is supported.
> Minimum size of RX buffer: 64
> Maximum configurable length of RX packet: 9728
> Maximum configurable size of LRO aggregated packet: 0
> Current number of RX queues: 1
> Max possible RX queues: 1
> Max possible number of RXDs per queue: 32768
> Min possible number of RXDs per queue: 32
> RXDs number alignment: 1
> Current number of TX queues: 1
> Max possible TX queues: 1
> Max possible number of TXDs per queue: 32768
> Min possible number of TXDs per queue: 32
> TXDs number alignment: 1
> Max segment number per packet: 65535
> Max segment number per MTU/TSO: 65535
> Device capabilities: 0x0( )
> Device error handling mode: none
> Device private info:
> guest_features: 0x110af8020
> vtnet_hdr_size: 12
> use_vec: rx-0 tx-0
> use_inorder: rx-0 tx-0
> intr_lsc: 1
> max_mtu: 9698
> max_rx_pkt_len: 1530
> max_queue_pairs: 1
> req_guest_features: 0x8000005f10ef8028
> 
>     3) show port xstats:
> 
> show port xstats 0
> ###### NIC extended statistics for port 0
> rx_good_packets: 0
> tx_good_packets: 0
> rx_good_bytes: 0
> tx_good_bytes: 0
> rx_missed_errors: 0
> rx_errors: 0
> tx_errors: 0
> rx_mbuf_allocation_errors: 0
> rx_q0_packets: 0
> rx_q0_bytes: 0
> rx_q0_errors: 0      <==================
> tx_q0_packets: 0
> tx_q0_bytes: 0
> rx_q0_good_packets: 0
> rx_q0_good_bytes: 0
> rx_q0_errors: 0      <==================
> rx_q0_multicast_packets: 0
> rx_q0_broadcast_packets: 0
> rx_q0_undersize_packets: 0
> rx_q0_size_64_packets: 0
> rx_q0_size_65_127_packets: 0
> rx_q0_size_128_255_packets: 0
> rx_q0_size_256_511_packets: 0
> rx_q0_size_512_1023_packets: 0
> rx_q0_size_1024_1518_packets: 0
> rx_q0_size_1519_max_packets: 0
> tx_q0_good_packets: 0
> tx_q0_good_bytes: 0
> tx_q0_multicast_packets: 0
> tx_q0_broadcast_packets: 0
> tx_q0_undersize_packets: 0
> tx_q0_size_64_packets: 0
> tx_q0_size_65_127_packets: 0
> tx_q0_size_128_255_packets: 0
> tx_q0_size_256_511_packets: 0
> tx_q0_size_512_1023_packets: 0
> tx_q0_size_1024_1518_packets: 0
> tx_q0_size_1519_max_packets: 0
> 
> You can see the stat "rx_q0_errors" appeared twice.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-24  9:26 ` Olivier Matz
@ 2023-11-24 10:39   ` Maxime Coquelin
  2023-11-24 13:13     ` Edwin Brossette
  0 siblings, 1 reply; 10+ messages in thread
From: Maxime Coquelin @ 2023-11-24 10:39 UTC (permalink / raw)
  To: Olivier Matz, Edwin Brossette, Ferruh Yigit; +Cc: dev

Hi Edwin,

Thanks for reporting the issue.

On 11/24/23 10:26, Olivier Matz wrote:
> Fix Maxime's mail.

Thanks Olivier.

> On Fri, Nov 24, 2023 at 10:18:27AM +0100, Edwin Brossette wrote:
>> Hello,
>>
>> I noticed a small inconsistency in the virtio pmd's xstats.
>> The stat "rx_q0_errors" appears twice.
>> I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets" and
>> "tx_q0_bytes" are duplicates of "rx_q0_good_packets", "rx_q0_good_bytes",
>> "tx_q0_good_packets" and "tx_q0_good_bytes"
>>
>> I believe this issue probably appeared after this commit:
>>
>> f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
>> http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2

Adding Ferruh as he is the author of this commit.

>>  From what I understand, the rxq0_error stat was originally reported by the
>> librte. However, changes were made so it is reported by the pmd instead.
>> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep the
>> old behaviour so that every pmd could have time to adapt the change.
>> But it seems the flag was forgotten in the virtio pmd and as a result, some
>> stats are fetched at two different times when displaying xstats.

Have you tried adding this flag to Virtio PMD? Does it fixes the issue?

>> First in lib_rte_ethdev:
>> https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
>> (you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS flag before
>> the snprintf on eth_dev_rxq_stats_strings[] )
>>
>> And a second time in the virtio pmd:
>> https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705 pmd
>> (see the snprintf on rte_virtio_rxq_stat_strings[] )
>>
>> This problem can be reproduced on testpmd simply by displaying the xstats
>> on a port with the net_virtio driver:
>>
>> Reproduction:
>> ===========
>>
>>      1) start dpdk-testpmd:
>>
>> modprobe -a uio_pci_generic
>> dpdk-devbind -b uio_pci_generic 03:00.0
>> dpdk-devbind -b uio_pci_generic 04:00.0
>>
>> dpdk-devbind -s
>>
>> Network devices using DPDK-compatible driver
>> ============================================
>> 0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
>> unused=vfio-pci
>> 0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
>> unused=vfio-pci
>> [...]
>>
>> dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
>> --coremask=0x4 --total-num-mbufs=250000
>> EAL: Detected CPU lcores: 3
>> EAL: Detected NUMA nodes: 1
>> EAL: Detected static linkage of DPDK
>> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
>> EAL: Selected IOVA mode 'PA'
>> EAL: VFIO support initialized
>> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:03:00.0 (socket
>> -1)
>> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:04:00.0 (socket
>> -1)
>> Interactive-mode selected
>> Warning: NUMA should be configured manually by using --port-numa-config and
>> --ring-numa-config parameters along with --numa.
>> testpmd: create a new mbuf pool <mb_pool_0>: n=250000, size=2176, socket=0
>> testpmd: preferred mempool ops selected: ring_mp_mc
>> Configuring Port 0 (socket 0)
>> Port 0: 52:54:00:B0:8F:88
>> Configuring Port 1 (socket 0)
>> Port 1: 52:54:00:EF:09:1F
>> Checking link statuses...
>> Done
>>
>>      2) port info:
>>
>> show port info 0
>>
>> ********************* Infos for port 0  *********************
>> MAC address: 52:54:00:B0:8F:88
>> Device name: 0000:03:00.0
>> Driver name: net_virtio
>> Firmware-version: not available
>> Devargs:
>> Connect to socket: 0
>> memory allocation on the socket: 0
>> Link status: up
>> Link speed: Unknown
>> Link duplex: full-duplex
>> Autoneg status: On
>> MTU: 1500
>> Promiscuous mode: enabled
>> Allmulticast mode: disabled
>> Maximum number of MAC addresses: 64
>> Maximum number of MAC addresses of hash filtering: 0
>> VLAN offload:
>>    strip off, filter off, extend off, qinq strip off
>> No RSS offload flow type is supported.
>> Minimum size of RX buffer: 64
>> Maximum configurable length of RX packet: 9728
>> Maximum configurable size of LRO aggregated packet: 0
>> Current number of RX queues: 1
>> Max possible RX queues: 1
>> Max possible number of RXDs per queue: 32768
>> Min possible number of RXDs per queue: 32
>> RXDs number alignment: 1
>> Current number of TX queues: 1
>> Max possible TX queues: 1
>> Max possible number of TXDs per queue: 32768
>> Min possible number of TXDs per queue: 32
>> TXDs number alignment: 1
>> Max segment number per packet: 65535
>> Max segment number per MTU/TSO: 65535
>> Device capabilities: 0x0( )
>> Device error handling mode: none
>> Device private info:
>> guest_features: 0x110af8020
>> vtnet_hdr_size: 12
>> use_vec: rx-0 tx-0
>> use_inorder: rx-0 tx-0
>> intr_lsc: 1
>> max_mtu: 9698
>> max_rx_pkt_len: 1530
>> max_queue_pairs: 1
>> req_guest_features: 0x8000005f10ef8028
>>
>>      3) show port xstats:
>>
>> show port xstats 0
>> ###### NIC extended statistics for port 0
>> rx_good_packets: 0
>> tx_good_packets: 0
>> rx_good_bytes: 0
>> tx_good_bytes: 0
>> rx_missed_errors: 0
>> rx_errors: 0
>> tx_errors: 0
>> rx_mbuf_allocation_errors: 0
>> rx_q0_packets: 0
>> rx_q0_bytes: 0
>> rx_q0_errors: 0      <==================
>> tx_q0_packets: 0
>> tx_q0_bytes: 0
>> rx_q0_good_packets: 0
>> rx_q0_good_bytes: 0
>> rx_q0_errors: 0      <==================
>> rx_q0_multicast_packets: 0
>> rx_q0_broadcast_packets: 0
>> rx_q0_undersize_packets: 0
>> rx_q0_size_64_packets: 0
>> rx_q0_size_65_127_packets: 0
>> rx_q0_size_128_255_packets: 0
>> rx_q0_size_256_511_packets: 0
>> rx_q0_size_512_1023_packets: 0
>> rx_q0_size_1024_1518_packets: 0
>> rx_q0_size_1519_max_packets: 0
>> tx_q0_good_packets: 0
>> tx_q0_good_bytes: 0
>> tx_q0_multicast_packets: 0
>> tx_q0_broadcast_packets: 0
>> tx_q0_undersize_packets: 0
>> tx_q0_size_64_packets: 0
>> tx_q0_size_65_127_packets: 0
>> tx_q0_size_128_255_packets: 0
>> tx_q0_size_256_511_packets: 0
>> tx_q0_size_512_1023_packets: 0
>> tx_q0_size_1024_1518_packets: 0
>> tx_q0_size_1519_max_packets: 0
>>
>> You can see the stat "rx_q0_errors" appeared twice.
> 

If simply adding the flag solves your issue, do you plan to submit a
patch?

If not, could you please file a Bz in the upstream bug tracker so that
we don't lose track of this bug?

Best regards,
Maxime


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-24 10:39   ` Maxime Coquelin
@ 2023-11-24 13:13     ` Edwin Brossette
  2023-11-24 13:16       ` Maxime Coquelin
  0 siblings, 1 reply; 10+ messages in thread
From: Edwin Brossette @ 2023-11-24 13:13 UTC (permalink / raw)
  To: Maxime Coquelin; +Cc: Olivier Matz, Ferruh Yigit, dev

[-- Attachment #1: Type: text/plain, Size: 7256 bytes --]

Hello again,

The flag is already set during the device init, so it should be removed,
not added.
I can confirm removing it fixed my issue.

I will submit a patch for this bug.

Regards,
Edwin Brossette.

On Fri, Nov 24, 2023 at 11:39 AM Maxime Coquelin <maxime.coquelin@redhat.com>
wrote:

> Hi Edwin,
>
> Thanks for reporting the issue.
>
> On 11/24/23 10:26, Olivier Matz wrote:
> > Fix Maxime's mail.
>
> Thanks Olivier.
>
> > On Fri, Nov 24, 2023 at 10:18:27AM +0100, Edwin Brossette wrote:
> >> Hello,
> >>
> >> I noticed a small inconsistency in the virtio pmd's xstats.
> >> The stat "rx_q0_errors" appears twice.
> >> I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets"
> and
> >> "tx_q0_bytes" are duplicates of "rx_q0_good_packets",
> "rx_q0_good_bytes",
> >> "tx_q0_good_packets" and "tx_q0_good_bytes"
> >>
> >> I believe this issue probably appeared after this commit:
> >>
> >> f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
> >>
> http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2
>
> Adding Ferruh as he is the author of this commit.
>
> >>  From what I understand, the rxq0_error stat was originally reported by
> the
> >> librte. However, changes were made so it is reported by the pmd instead.
> >> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep
> the
> >> old behaviour so that every pmd could have time to adapt the change.
> >> But it seems the flag was forgotten in the virtio pmd and as a result,
> some
> >> stats are fetched at two different times when displaying xstats.
>
> Have you tried adding this flag to Virtio PMD? Does it fixes the issue?
>
> >> First in lib_rte_ethdev:
> >> https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
> >> (you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS flag
> before
> >> the snprintf on eth_dev_rxq_stats_strings[] )
> >>
> >> And a second time in the virtio pmd:
> >> https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705
> pmd
> >> (see the snprintf on rte_virtio_rxq_stat_strings[] )
> >>
> >> This problem can be reproduced on testpmd simply by displaying the
> xstats
> >> on a port with the net_virtio driver:
> >>
> >> Reproduction:
> >> ===========
> >>
> >>      1) start dpdk-testpmd:
> >>
> >> modprobe -a uio_pci_generic
> >> dpdk-devbind -b uio_pci_generic 03:00.0
> >> dpdk-devbind -b uio_pci_generic 04:00.0
> >>
> >> dpdk-devbind -s
> >>
> >> Network devices using DPDK-compatible driver
> >> ============================================
> >> 0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> >> unused=vfio-pci
> >> 0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> >> unused=vfio-pci
> >> [...]
> >>
> >> dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
> >> --coremask=0x4 --total-num-mbufs=250000
> >> EAL: Detected CPU lcores: 3
> >> EAL: Detected NUMA nodes: 1
> >> EAL: Detected static linkage of DPDK
> >> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
> >> EAL: Selected IOVA mode 'PA'
> >> EAL: VFIO support initialized
> >> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:03:00.0
> (socket
> >> -1)
> >> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:04:00.0
> (socket
> >> -1)
> >> Interactive-mode selected
> >> Warning: NUMA should be configured manually by using --port-numa-config
> and
> >> --ring-numa-config parameters along with --numa.
> >> testpmd: create a new mbuf pool <mb_pool_0>: n=250000, size=2176,
> socket=0
> >> testpmd: preferred mempool ops selected: ring_mp_mc
> >> Configuring Port 0 (socket 0)
> >> Port 0: 52:54:00:B0:8F:88
> >> Configuring Port 1 (socket 0)
> >> Port 1: 52:54:00:EF:09:1F
> >> Checking link statuses...
> >> Done
> >>
> >>      2) port info:
> >>
> >> show port info 0
> >>
> >> ********************* Infos for port 0  *********************
> >> MAC address: 52:54:00:B0:8F:88
> >> Device name: 0000:03:00.0
> >> Driver name: net_virtio
> >> Firmware-version: not available
> >> Devargs:
> >> Connect to socket: 0
> >> memory allocation on the socket: 0
> >> Link status: up
> >> Link speed: Unknown
> >> Link duplex: full-duplex
> >> Autoneg status: On
> >> MTU: 1500
> >> Promiscuous mode: enabled
> >> Allmulticast mode: disabled
> >> Maximum number of MAC addresses: 64
> >> Maximum number of MAC addresses of hash filtering: 0
> >> VLAN offload:
> >>    strip off, filter off, extend off, qinq strip off
> >> No RSS offload flow type is supported.
> >> Minimum size of RX buffer: 64
> >> Maximum configurable length of RX packet: 9728
> >> Maximum configurable size of LRO aggregated packet: 0
> >> Current number of RX queues: 1
> >> Max possible RX queues: 1
> >> Max possible number of RXDs per queue: 32768
> >> Min possible number of RXDs per queue: 32
> >> RXDs number alignment: 1
> >> Current number of TX queues: 1
> >> Max possible TX queues: 1
> >> Max possible number of TXDs per queue: 32768
> >> Min possible number of TXDs per queue: 32
> >> TXDs number alignment: 1
> >> Max segment number per packet: 65535
> >> Max segment number per MTU/TSO: 65535
> >> Device capabilities: 0x0( )
> >> Device error handling mode: none
> >> Device private info:
> >> guest_features: 0x110af8020
> >> vtnet_hdr_size: 12
> >> use_vec: rx-0 tx-0
> >> use_inorder: rx-0 tx-0
> >> intr_lsc: 1
> >> max_mtu: 9698
> >> max_rx_pkt_len: 1530
> >> max_queue_pairs: 1
> >> req_guest_features: 0x8000005f10ef8028
> >>
> >>      3) show port xstats:
> >>
> >> show port xstats 0
> >> ###### NIC extended statistics for port 0
> >> rx_good_packets: 0
> >> tx_good_packets: 0
> >> rx_good_bytes: 0
> >> tx_good_bytes: 0
> >> rx_missed_errors: 0
> >> rx_errors: 0
> >> tx_errors: 0
> >> rx_mbuf_allocation_errors: 0
> >> rx_q0_packets: 0
> >> rx_q0_bytes: 0
> >> rx_q0_errors: 0      <==================
> >> tx_q0_packets: 0
> >> tx_q0_bytes: 0
> >> rx_q0_good_packets: 0
> >> rx_q0_good_bytes: 0
> >> rx_q0_errors: 0      <==================
> >> rx_q0_multicast_packets: 0
> >> rx_q0_broadcast_packets: 0
> >> rx_q0_undersize_packets: 0
> >> rx_q0_size_64_packets: 0
> >> rx_q0_size_65_127_packets: 0
> >> rx_q0_size_128_255_packets: 0
> >> rx_q0_size_256_511_packets: 0
> >> rx_q0_size_512_1023_packets: 0
> >> rx_q0_size_1024_1518_packets: 0
> >> rx_q0_size_1519_max_packets: 0
> >> tx_q0_good_packets: 0
> >> tx_q0_good_bytes: 0
> >> tx_q0_multicast_packets: 0
> >> tx_q0_broadcast_packets: 0
> >> tx_q0_undersize_packets: 0
> >> tx_q0_size_64_packets: 0
> >> tx_q0_size_65_127_packets: 0
> >> tx_q0_size_128_255_packets: 0
> >> tx_q0_size_256_511_packets: 0
> >> tx_q0_size_512_1023_packets: 0
> >> tx_q0_size_1024_1518_packets: 0
> >> tx_q0_size_1519_max_packets: 0
> >>
> >> You can see the stat "rx_q0_errors" appeared twice.
> >
>
> If simply adding the flag solves your issue, do you plan to submit a
> patch?
>
> If not, could you please file a Bz in the upstream bug tracker so that
> we don't lose track of this bug?
>
> Best regards,
> Maxime
>
>

[-- Attachment #2: Type: text/html, Size: 9555 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-24 13:13     ` Edwin Brossette
@ 2023-11-24 13:16       ` Maxime Coquelin
  0 siblings, 0 replies; 10+ messages in thread
From: Maxime Coquelin @ 2023-11-24 13:16 UTC (permalink / raw)
  To: Edwin Brossette; +Cc: Olivier Matz, Ferruh Yigit, dev



On 11/24/23 14:13, Edwin Brossette wrote:
> Hello again,
> 
> The flag is already set during the device init, so it should be removed, 
> not added.
> I can confirm removing it fixed my issue.
> 
> I will submit a patch for this bug.
g

Great, thanks Edwin!

Don't forget to add the Fixes: tag and cc stable@dpdk.org.

Maxime

> Regards,
> Edwin Brossette.
> 
> On Fri, Nov 24, 2023 at 11:39 AM Maxime Coquelin 
> <maxime.coquelin@redhat.com <mailto:maxime.coquelin@redhat.com>> wrote:
> 
>     Hi Edwin,
> 
>     Thanks for reporting the issue.
> 
>     On 11/24/23 10:26, Olivier Matz wrote:
>      > Fix Maxime's mail.
> 
>     Thanks Olivier.
> 
>      > On Fri, Nov 24, 2023 at 10:18:27AM +0100, Edwin Brossette wrote:
>      >> Hello,
>      >>
>      >> I noticed a small inconsistency in the virtio pmd's xstats.
>      >> The stat "rx_q0_errors" appears twice.
>      >> I also think the stats "rx_q0_packets", "rx_q0_bytes",
>     "tx_q0_packets" and
>      >> "tx_q0_bytes" are duplicates of "rx_q0_good_packets",
>     "rx_q0_good_bytes",
>      >> "tx_q0_good_packets" and "tx_q0_good_bytes"
>      >>
>      >> I believe this issue probably appeared after this commit:
>      >>
>      >> f30e69b41f94: ethdev: add device flag to bypass auto-filled
>     queue xstats
>      >>
>     http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2 <http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2>
> 
>     Adding Ferruh as he is the author of this commit.
> 
>      >>  From what I understand, the rxq0_error stat was originally
>     reported by the
>      >> librte. However, changes were made so it is reported by the pmd
>     instead.
>      >> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set
>     to keep the
>      >> old behaviour so that every pmd could have time to adapt the change.
>      >> But it seems the flag was forgotten in the virtio pmd and as a
>     result, some
>      >> stats are fetched at two different times when displaying xstats.
> 
>     Have you tried adding this flag to Virtio PMD? Does it fixes the issue?
> 
>      >> First in lib_rte_ethdev:
>      >> https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
>     <https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266>
>      >> (you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS
>     flag before
>      >> the snprintf on eth_dev_rxq_stats_strings[] )
>      >>
>      >> And a second time in the virtio pmd:
>      >>
>     https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705 <https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705> pmd
>      >> (see the snprintf on rte_virtio_rxq_stat_strings[] )
>      >>
>      >> This problem can be reproduced on testpmd simply by displaying
>     the xstats
>      >> on a port with the net_virtio driver:
>      >>
>      >> Reproduction:
>      >> ===========
>      >>
>      >>      1) start dpdk-testpmd:
>      >>
>      >> modprobe -a uio_pci_generic
>      >> dpdk-devbind -b uio_pci_generic 03:00.0
>      >> dpdk-devbind -b uio_pci_generic 04:00.0
>      >>
>      >> dpdk-devbind -s
>      >>
>      >> Network devices using DPDK-compatible driver
>      >> ============================================
>      >> 0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
>      >> unused=vfio-pci
>      >> 0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
>      >> unused=vfio-pci
>      >> [...]
>      >>
>      >> dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
>      >> --coremask=0x4 --total-num-mbufs=250000
>      >> EAL: Detected CPU lcores: 3
>      >> EAL: Detected NUMA nodes: 1
>      >> EAL: Detected static linkage of DPDK
>      >> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
>      >> EAL: Selected IOVA mode 'PA'
>      >> EAL: VFIO support initialized
>      >> EAL: Probe PCI driver: net_virtio (1af4:1041) device:
>     0000:03:00.0 (socket
>      >> -1)
>      >> EAL: Probe PCI driver: net_virtio (1af4:1041) device:
>     0000:04:00.0 (socket
>      >> -1)
>      >> Interactive-mode selected
>      >> Warning: NUMA should be configured manually by using
>     --port-numa-config and
>      >> --ring-numa-config parameters along with --numa.
>      >> testpmd: create a new mbuf pool <mb_pool_0>: n=250000,
>     size=2176, socket=0
>      >> testpmd: preferred mempool ops selected: ring_mp_mc
>      >> Configuring Port 0 (socket 0)
>      >> Port 0: 52:54:00:B0:8F:88
>      >> Configuring Port 1 (socket 0)
>      >> Port 1: 52:54:00:EF:09:1F
>      >> Checking link statuses...
>      >> Done
>      >>
>      >>      2) port info:
>      >>
>      >> show port info 0
>      >>
>      >> ********************* Infos for port 0  *********************
>      >> MAC address: 52:54:00:B0:8F:88
>      >> Device name: 0000:03:00.0
>      >> Driver name: net_virtio
>      >> Firmware-version: not available
>      >> Devargs:
>      >> Connect to socket: 0
>      >> memory allocation on the socket: 0
>      >> Link status: up
>      >> Link speed: Unknown
>      >> Link duplex: full-duplex
>      >> Autoneg status: On
>      >> MTU: 1500
>      >> Promiscuous mode: enabled
>      >> Allmulticast mode: disabled
>      >> Maximum number of MAC addresses: 64
>      >> Maximum number of MAC addresses of hash filtering: 0
>      >> VLAN offload:
>      >>    strip off, filter off, extend off, qinq strip off
>      >> No RSS offload flow type is supported.
>      >> Minimum size of RX buffer: 64
>      >> Maximum configurable length of RX packet: 9728
>      >> Maximum configurable size of LRO aggregated packet: 0
>      >> Current number of RX queues: 1
>      >> Max possible RX queues: 1
>      >> Max possible number of RXDs per queue: 32768
>      >> Min possible number of RXDs per queue: 32
>      >> RXDs number alignment: 1
>      >> Current number of TX queues: 1
>      >> Max possible TX queues: 1
>      >> Max possible number of TXDs per queue: 32768
>      >> Min possible number of TXDs per queue: 32
>      >> TXDs number alignment: 1
>      >> Max segment number per packet: 65535
>      >> Max segment number per MTU/TSO: 65535
>      >> Device capabilities: 0x0( )
>      >> Device error handling mode: none
>      >> Device private info:
>      >> guest_features: 0x110af8020
>      >> vtnet_hdr_size: 12
>      >> use_vec: rx-0 tx-0
>      >> use_inorder: rx-0 tx-0
>      >> intr_lsc: 1
>      >> max_mtu: 9698
>      >> max_rx_pkt_len: 1530
>      >> max_queue_pairs: 1
>      >> req_guest_features: 0x8000005f10ef8028
>      >>
>      >>      3) show port xstats:
>      >>
>      >> show port xstats 0
>      >> ###### NIC extended statistics for port 0
>      >> rx_good_packets: 0
>      >> tx_good_packets: 0
>      >> rx_good_bytes: 0
>      >> tx_good_bytes: 0
>      >> rx_missed_errors: 0
>      >> rx_errors: 0
>      >> tx_errors: 0
>      >> rx_mbuf_allocation_errors: 0
>      >> rx_q0_packets: 0
>      >> rx_q0_bytes: 0
>      >> rx_q0_errors: 0      <==================
>      >> tx_q0_packets: 0
>      >> tx_q0_bytes: 0
>      >> rx_q0_good_packets: 0
>      >> rx_q0_good_bytes: 0
>      >> rx_q0_errors: 0      <==================
>      >> rx_q0_multicast_packets: 0
>      >> rx_q0_broadcast_packets: 0
>      >> rx_q0_undersize_packets: 0
>      >> rx_q0_size_64_packets: 0
>      >> rx_q0_size_65_127_packets: 0
>      >> rx_q0_size_128_255_packets: 0
>      >> rx_q0_size_256_511_packets: 0
>      >> rx_q0_size_512_1023_packets: 0
>      >> rx_q0_size_1024_1518_packets: 0
>      >> rx_q0_size_1519_max_packets: 0
>      >> tx_q0_good_packets: 0
>      >> tx_q0_good_bytes: 0
>      >> tx_q0_multicast_packets: 0
>      >> tx_q0_broadcast_packets: 0
>      >> tx_q0_undersize_packets: 0
>      >> tx_q0_size_64_packets: 0
>      >> tx_q0_size_65_127_packets: 0
>      >> tx_q0_size_128_255_packets: 0
>      >> tx_q0_size_256_511_packets: 0
>      >> tx_q0_size_512_1023_packets: 0
>      >> tx_q0_size_1024_1518_packets: 0
>      >> tx_q0_size_1519_max_packets: 0
>      >>
>      >> You can see the stat "rx_q0_errors" appeared twice.
>      >
> 
>     If simply adding the flag solves your issue, do you plan to submit a
>     patch?
> 
>     If not, could you please file a Bz in the upstream bug tracker so that
>     we don't lose track of this bug?
> 
>     Best regards,
>     Maxime
> 


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] net/virtio: fix duplicated rxq xstats
  2023-11-24  9:18 net/virtio: duplicated xstats Edwin Brossette
  2023-11-24  9:26 ` Olivier Matz
@ 2023-11-24 13:52 ` edwin.brossette
  2023-11-27 10:20   ` Ferruh Yigit
  2024-02-06 14:56   ` Maxime Coquelin
  2023-11-27 10:19 ` net/virtio: duplicated xstats Ferruh Yigit
  2 siblings, 2 replies; 10+ messages in thread
From: edwin.brossette @ 2023-11-24 13:52 UTC (permalink / raw)
  To: dev; +Cc: maxime.coquelin, ferruh.yigit, olivier.matz, stable, Edwin Brossette

From: Edwin Brossette <edwin.brossette@6wind.com>

The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set while
moving queue stats from 'struct rte_eth_stats' to the individual pmds,
as explained in commit f30e69b41f94 ("ethdev: add device flag to bypass
auto-filled queue xstats").

This flag was added so every pmd would keep its original behavior until
the change was implemented. However, this flag was not removed
afterwards in the virtio pmd and as a result, some queue stats are
displayed twice when trying to get them: once in lib_rte_ethdev, and a
second time in the virtio pmd.

Remove this flag so stats are printed only once.

Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
Cc: stable@dpdk.org

Signed-off-by: Edwin Brossette <edwin.brossette@6wind.com>
---
 drivers/net/virtio/virtio_ethdev.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index c2c0a1a11137..517585740eeb 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1793,8 +1793,6 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)
 	else
 		eth_dev->data->dev_flags &= ~RTE_ETH_DEV_INTR_LSC;
 
-	eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
-
 	/* Setting up rx_header size for the device */
 	if (virtio_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF) ||
 	    virtio_with_feature(hw, VIRTIO_F_VERSION_1) ||
-- 
2.35.0.4.g44a5d4affccf


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-24  9:18 net/virtio: duplicated xstats Edwin Brossette
  2023-11-24  9:26 ` Olivier Matz
  2023-11-24 13:52 ` [PATCH] net/virtio: fix duplicated rxq xstats edwin.brossette
@ 2023-11-27 10:19 ` Ferruh Yigit
  2023-11-27 10:22   ` Ferruh Yigit
  2 siblings, 1 reply; 10+ messages in thread
From: Ferruh Yigit @ 2023-11-27 10:19 UTC (permalink / raw)
  To: Edwin Brossette, dev; +Cc: maxime.cocquelin, Olivier Matz

On 11/24/2023 9:18 AM, Edwin Brossette wrote:
> Hello,
> 
> I noticed a small inconsistency in the virtio pmd's xstats.
> The stat "rx_q0_errors" appears twice.
> I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets"
> and "tx_q0_bytes" are duplicates of "rx_q0_good_packets",
> "rx_q0_good_bytes", "tx_q0_good_packets" and "tx_q0_good_bytes"
> 

Ack, I didn't reproduce but from code I can see this inconsistency can
occur.


> I believe this issue probably appeared after this commit:
> 
> f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
> http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2 <http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2>
> 
> From what I understand, the rxq0_error stat was originally reported by
> the librte. However, changes were made so it is reported by the pmd instead.
> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep
> the old behaviour so that every pmd could have time to adapt the change.
> But it seems the flag was forgotten in the virtio pmd and as a result,
> some stats are fetched at two different times when displaying xstats.
> 

Motivation is move queue stats from "basic stats" to "xstats".

'RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS' is a temporary flag, as you said,
and when driver sets it, ethdev layer copies queue stats from basic
stats to xstats.
In long term expectation is driver itself implement queue stats in
xstats and unset the flag, when all drivers implement this, flag will be
removed.


The issue with virtio is it already has queue stats in the xstats, with
the flag some queue stats duplicated.
It seems it is not forgotten to be removed, but it was mistake to add
flag at first place. So OK to remove the flag from virtio PMD.



> First in lib_rte_ethdev:
> https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266
> <https://git.dpdk.org/dpdk/tree/lib/ethdev/rte_ethdev.c#n3266>
> (you can see the check on the RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS flag
> before the snprintf on |eth_dev_rxq_stats_strings[]| )
> 
> And a second time in the virtio pmd:
> https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705
> <https://git.dpdk.org/dpdk/tree/drivers/net/virtio/virtio_ethdev.c#n705> pmd
> (see the snprintf on|rte_virtio_rxq_stat_strings|[] )
> 
> This problem can be reproduced on testpmd simply by displaying the
> xstats on a port with the net_virtio driver:
> 
> Reproduction:
> ===========
> 
>     1) start dpdk-testpmd:
> 
> modprobe -a uio_pci_generic
> dpdk-devbind -b uio_pci_generic 03:00.0
> dpdk-devbind -b uio_pci_generic 04:00.0
> 
> dpdk-devbind -s
> 
> Network devices using DPDK-compatible driver
> ============================================
> 0000:03:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> unused=vfio-pci
> 0000:04:00.0 'Virtio 1.0 network device 1041' drv=uio_pci_generic
> unused=vfio-pci
> [...]
> 
> dpdk-testpmd -a 0000:03:00.0 -a 0000:04:00.0 -- -i --rxq=1 --txq=1
> --coremask=0x4 --total-num-mbufs=250000
> EAL: Detected CPU lcores: 3
> EAL: Detected NUMA nodes: 1
> EAL: Detected static linkage of DPDK
> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
> EAL: Selected IOVA mode 'PA'
> EAL: VFIO support initialized
> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:03:00.0
> (socket -1)
> EAL: Probe PCI driver: net_virtio (1af4:1041) device: 0000:04:00.0
> (socket -1)
> Interactive-mode selected
> Warning: NUMA should be configured manually by using --port-numa-config
> and --ring-numa-config parameters along with --numa.
> testpmd: create a new mbuf pool <mb_pool_0>: n=250000, size=2176, socket=0
> testpmd: preferred mempool ops selected: ring_mp_mc
> Configuring Port 0 (socket 0)
> Port 0: 52:54:00:B0:8F:88
> Configuring Port 1 (socket 0)
> Port 1: 52:54:00:EF:09:1F
> Checking link statuses...
> Done
> 
>     2) port info:
> 
> show port info 0
> 
> ********************* Infos for port 0  *********************
> MAC address: 52:54:00:B0:8F:88
> Device name: 0000:03:00.0
> Driver name: net_virtio
> Firmware-version: not available
> Devargs:
> Connect to socket: 0
> memory allocation on the socket: 0
> Link status: up
> Link speed: Unknown
> Link duplex: full-duplex
> Autoneg status: On
> MTU: 1500
> Promiscuous mode: enabled
> Allmulticast mode: disabled
> Maximum number of MAC addresses: 64
> Maximum number of MAC addresses of hash filtering: 0
> VLAN offload:
>   strip off, filter off, extend off, qinq strip off
> No RSS offload flow type is supported.
> Minimum size of RX buffer: 64
> Maximum configurable length of RX packet: 9728
> Maximum configurable size of LRO aggregated packet: 0
> Current number of RX queues: 1
> Max possible RX queues: 1
> Max possible number of RXDs per queue: 32768
> Min possible number of RXDs per queue: 32
> RXDs number alignment: 1
> Current number of TX queues: 1
> Max possible TX queues: 1
> Max possible number of TXDs per queue: 32768
> Min possible number of TXDs per queue: 32
> TXDs number alignment: 1
> Max segment number per packet: 65535
> Max segment number per MTU/TSO: 65535
> Device capabilities: 0x0( )
> Device error handling mode: none
> Device private info:
> guest_features: 0x110af8020
> vtnet_hdr_size: 12
> use_vec: rx-0 tx-0
> use_inorder: rx-0 tx-0
> intr_lsc: 1
> max_mtu: 9698
> max_rx_pkt_len: 1530
> max_queue_pairs: 1
> req_guest_features: 0x8000005f10ef8028
> 
>     3) show port xstats:
> 
> show port xstats 0
> ###### NIC extended statistics for port 0
> rx_good_packets: 0
> tx_good_packets: 0
> rx_good_bytes: 0
> tx_good_bytes: 0
> rx_missed_errors: 0
> rx_errors: 0
> tx_errors: 0
> rx_mbuf_allocation_errors: 0
> rx_q0_packets: 0
> rx_q0_bytes: 0
> rx_q0_errors: 0      <==================
> tx_q0_packets: 0
> tx_q0_bytes: 0
> rx_q0_good_packets: 0
> rx_q0_good_bytes: 0
> rx_q0_errors: 0      <==================
> rx_q0_multicast_packets: 0
> rx_q0_broadcast_packets: 0
> rx_q0_undersize_packets: 0
> rx_q0_size_64_packets: 0
> rx_q0_size_65_127_packets: 0
> rx_q0_size_128_255_packets: 0
> rx_q0_size_256_511_packets: 0
> rx_q0_size_512_1023_packets: 0
> rx_q0_size_1024_1518_packets: 0
> rx_q0_size_1519_max_packets: 0
> tx_q0_good_packets: 0
> tx_q0_good_bytes: 0
> tx_q0_multicast_packets: 0
> tx_q0_broadcast_packets: 0
> tx_q0_undersize_packets: 0
> tx_q0_size_64_packets: 0
> tx_q0_size_65_127_packets: 0
> tx_q0_size_128_255_packets: 0
> tx_q0_size_256_511_packets: 0
> tx_q0_size_512_1023_packets: 0
> tx_q0_size_1024_1518_packets: 0
> tx_q0_size_1519_max_packets: 0
> 
> You can see the stat "rx_q0_errors" appeared twice.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] net/virtio: fix duplicated rxq xstats
  2023-11-24 13:52 ` [PATCH] net/virtio: fix duplicated rxq xstats edwin.brossette
@ 2023-11-27 10:20   ` Ferruh Yigit
  2024-02-06 14:56   ` Maxime Coquelin
  1 sibling, 0 replies; 10+ messages in thread
From: Ferruh Yigit @ 2023-11-27 10:20 UTC (permalink / raw)
  To: edwin.brossette, dev; +Cc: maxime.coquelin, olivier.matz, stable

On 11/24/2023 1:52 PM, edwin.brossette@6wind.com wrote:
> From: Edwin Brossette <edwin.brossette@6wind.com>
> 
> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set while
> moving queue stats from 'struct rte_eth_stats' to the individual pmds,
> as explained in commit f30e69b41f94 ("ethdev: add device flag to bypass
> auto-filled queue xstats").
> 
> This flag was added so every pmd would keep its original behavior until
> the change was implemented. However, this flag was not removed
> afterwards in the virtio pmd and as a result, some queue stats are
> displayed twice when trying to get them: once in lib_rte_ethdev, and a
> second time in the virtio pmd.
> 
> Remove this flag so stats are printed only once.
> 
> Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Edwin Brossette <edwin.brossette@6wind.com>
> 

Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: net/virtio: duplicated xstats
  2023-11-27 10:19 ` net/virtio: duplicated xstats Ferruh Yigit
@ 2023-11-27 10:22   ` Ferruh Yigit
  0 siblings, 0 replies; 10+ messages in thread
From: Ferruh Yigit @ 2023-11-27 10:22 UTC (permalink / raw)
  To: Edwin Brossette, dev; +Cc: Olivier Matz, Maxime Coquelin

On 11/27/2023 10:19 AM, Ferruh Yigit wrote:
> On 11/24/2023 9:18 AM, Edwin Brossette wrote:
>> Hello,
>>
>> I noticed a small inconsistency in the virtio pmd's xstats.
>> The stat "rx_q0_errors" appears twice.
>> I also think the stats "rx_q0_packets", "rx_q0_bytes", "tx_q0_packets"
>> and "tx_q0_bytes" are duplicates of "rx_q0_good_packets",
>> "rx_q0_good_bytes", "tx_q0_good_packets" and "tx_q0_good_bytes"
>>
> 
> Ack, I didn't reproduce but from code I can see this inconsistency can
> occur.
> 
> 
>> I believe this issue probably appeared after this commit:
>>
>> f30e69b41f94: ethdev: add device flag to bypass auto-filled queue xstats
>> http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2 <http://scm.6wind.com/vendor/dpdk.org/dpdk/commit/?id=f30e69b41f949cd4a9afb6ff39de196e661708e2>
>>
>> From what I understand, the rxq0_error stat was originally reported by
>> the librte. However, changes were made so it is reported by the pmd instead.
>> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set to keep
>> the old behaviour so that every pmd could have time to adapt the change.
>> But it seems the flag was forgotten in the virtio pmd and as a result,
>> some stats are fetched at two different times when displaying xstats.
>>
> 
> Motivation is move queue stats from "basic stats" to "xstats".
> 
> 'RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS' is a temporary flag, as you said,
> and when driver sets it, ethdev layer copies queue stats from basic
> stats to xstats.
> In long term expectation is driver itself implement queue stats in
> xstats and unset the flag, when all drivers implement this, flag will be
> removed.
> 
> 
> The issue with virtio is it already has queue stats in the xstats, with
> the flag some queue stats duplicated.
> It seems it is not forgotten to be removed, but it was mistake to add
> flag at first place. So OK to remove the flag from virtio PMD.
> 

Fixed Maxime's email.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] net/virtio: fix duplicated rxq xstats
  2023-11-24 13:52 ` [PATCH] net/virtio: fix duplicated rxq xstats edwin.brossette
  2023-11-27 10:20   ` Ferruh Yigit
@ 2024-02-06 14:56   ` Maxime Coquelin
  1 sibling, 0 replies; 10+ messages in thread
From: Maxime Coquelin @ 2024-02-06 14:56 UTC (permalink / raw)
  To: edwin.brossette, dev; +Cc: ferruh.yigit, olivier.matz, stable



On 11/24/23 14:52, edwin.brossette@6wind.com wrote:
> From: Edwin Brossette <edwin.brossette@6wind.com>
> 
> The flag RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS was temporarily set while
> moving queue stats from 'struct rte_eth_stats' to the individual pmds,
> as explained in commit f30e69b41f94 ("ethdev: add device flag to bypass
> auto-filled queue xstats").
> 
> This flag was added so every pmd would keep its original behavior until
> the change was implemented. However, this flag was not removed
> afterwards in the virtio pmd and as a result, some queue stats are
> displayed twice when trying to get them: once in lib_rte_ethdev, and a
> second time in the virtio pmd.
> 
> Remove this flag so stats are printed only once.
> 
> Fixes: f30e69b41f94 ("ethdev: add device flag to bypass auto-filled queue xstats")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Edwin Brossette <edwin.brossette@6wind.com>
> ---
>   drivers/net/virtio/virtio_ethdev.c | 2 --
>   1 file changed, 2 deletions(-)
> 

Applied to next-virtio tree.

Thanks,
Maxime


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-02-06 14:57 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-24  9:18 net/virtio: duplicated xstats Edwin Brossette
2023-11-24  9:26 ` Olivier Matz
2023-11-24 10:39   ` Maxime Coquelin
2023-11-24 13:13     ` Edwin Brossette
2023-11-24 13:16       ` Maxime Coquelin
2023-11-24 13:52 ` [PATCH] net/virtio: fix duplicated rxq xstats edwin.brossette
2023-11-27 10:20   ` Ferruh Yigit
2024-02-06 14:56   ` Maxime Coquelin
2023-11-27 10:19 ` net/virtio: duplicated xstats Ferruh Yigit
2023-11-27 10:22   ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).