DPDK patches and discussions
 help / color / mirror / Atom feed
* ixgbe rxq interrupt not working
@ 2023-03-07 18:52 Rajasekhar Pulluru
  2023-03-07 21:11 ` Stephen Hemminger
  2023-03-08  0:19 ` Honnappa Nagarahalli
  0 siblings, 2 replies; 7+ messages in thread
From: Rajasekhar Pulluru @ 2023-03-07 18:52 UTC (permalink / raw)
  To: dev

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

Hi Team,

Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven
by igb and the rest of the 4 ports driven by ixgbe.

I am following the below sequence to initialize these ports:

dev_conf.intr_conf.lsc = 1; //Enable link state change interrupt
dev_conf.intr_conf.rxq = 1; //Enable RX Queue Interrupt
dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
dev_conf.rxmode.offloads = 0;
dev_conf.txmode.mq_mode = RTE_ETH_MQ_TX_NONE;
dev_conf.txmode.offloads = 0;

rte_eth_dev_configure
rte_eth_rx_queue_setup
rte_eth_tx_queue_setup
rte_eth_dev_start
data = port_id << CHAR_BIT | queue_id;
rte_eth_dev_rx_intr_ctl_q(port_id, queue_id, RTE_EPOLL_PER_THREAD,
RTE_INTR_EVENT_ADD, (void *)((uintptr_t)data));
rte_eth_dev_rx_intr_enable(port_id, queue_id);

And then main loop repeats the below:

rte_epoll_wait(RTE_EPOLL_PER_THREAD, event, 1, timeout /* 200micro-sec */);
/* ignore return value */
rte_eth_dev_rx_intr_disable(port_id, queue_id);
rte_eth_rx_burst(port_id, queue_id, pkts, num_pkts);
rte_eth_dev_rx_intr_enable(port_id, queue_id);

The code is same for all the ports, igb ports are able to come-up and rx
packets, where-as the ixgbe ports are not able to rx packets at all.
cat /proc/interrupts dumps vfio-msix counters for ixgbe as 0, where-as it's
non-zero for igb.

If I don't use/enable rxq interrupt for ixgbe (and remove epoll wait,
interrupt enable/disable from while loop) and simply poll for
rte_eth_rx_burst in a loop, ixgbe ports are able to rx packets.

What could be wrong here? Appreciate any help.

I would also like to know if there's an asynchronous rxq interrupt
notification to the application instead of rte_epoll_wait (and sleep).

Thanks & Regards,
Rajasekhar

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

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

* Re: ixgbe rxq interrupt not working
  2023-03-07 18:52 ixgbe rxq interrupt not working Rajasekhar Pulluru
@ 2023-03-07 21:11 ` Stephen Hemminger
  2023-03-08 17:23   ` Rajasekhar Pulluru
  2023-03-08  0:19 ` Honnappa Nagarahalli
  1 sibling, 1 reply; 7+ messages in thread
From: Stephen Hemminger @ 2023-03-07 21:11 UTC (permalink / raw)
  To: Rajasekhar Pulluru; +Cc: dev

On Wed, 8 Mar 2023 00:22:10 +0530
Rajasekhar Pulluru <pullururajasekhar@gmail.com> wrote:

> Hi Team,
> 
> Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven
> by igb and the rest of the 4 ports driven by ixgbe.


FYI - 22.07 is not a supported release, only LTS releases like 22.11 are supported.

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

* RE: ixgbe rxq interrupt not working
  2023-03-07 18:52 ixgbe rxq interrupt not working Rajasekhar Pulluru
  2023-03-07 21:11 ` Stephen Hemminger
@ 2023-03-08  0:19 ` Honnappa Nagarahalli
  2023-03-08 17:24   ` Rajasekhar Pulluru
  1 sibling, 1 reply; 7+ messages in thread
From: Honnappa Nagarahalli @ 2023-03-08  0:19 UTC (permalink / raw)
  To: Rajasekhar Pulluru, dev; +Cc: nd, nd



From: Rajasekhar Pulluru <pullururajasekhar@gmail.com> 
Sent: Tuesday, March 7, 2023 12:52 PM
To: dev@dpdk.org
Subject: ixgbe rxq interrupt not working

Hi Team,

Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven by igb and the rest of the 4 ports driven by ixgbe. 
[Honnappa]  Do you have packets crossing between the 2 drivers?


I am following the below sequence to initialize these ports:

dev_conf.intr_conf.lsc = 1; //Enable link state change interrupt
dev_conf.intr_conf.rxq = 1; //Enable RX Queue Interrupt
dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
dev_conf.rxmode.offloads = 0;
dev_conf.txmode.mq_mode = RTE_ETH_MQ_TX_NONE;
dev_conf.txmode.offloads = 0;

rte_eth_dev_configure
rte_eth_rx_queue_setup
rte_eth_tx_queue_setup
rte_eth_dev_start
data = port_id << CHAR_BIT | queue_id;
rte_eth_dev_rx_intr_ctl_q(port_id, queue_id, RTE_EPOLL_PER_THREAD, RTE_INTR_EVENT_ADD, (void *)((uintptr_t)data));
rte_eth_dev_rx_intr_enable(port_id, queue_id);

And then main loop repeats the below:

rte_epoll_wait(RTE_EPOLL_PER_THREAD, event, 1, timeout /* 200micro-sec */); /* ignore return value */
rte_eth_dev_rx_intr_disable(port_id, queue_id);
rte_eth_rx_burst(port_id, queue_id, pkts, num_pkts);
rte_eth_dev_rx_intr_enable(port_id, queue_id);

The code is same for all the ports, igb ports are able to come-up and rx packets, where-as the ixgbe ports are not able to rx packets at all.
cat /proc/interrupts dumps vfio-msix counters for ixgbe as 0, where-as it's non-zero for igb. 
If I don't use/enable rxq interrupt for ixgbe (and remove epoll wait, interrupt enable/disable from while loop) and simply poll for rte_eth_rx_burst in a loop, ixgbe ports are able to rx packets.

What could be wrong here? Appreciate any help.

I would also like to know if there's an asynchronous rxq interrupt notification to the application instead of rte_epoll_wait (and sleep).

Thanks & Regards,
Rajasekhar

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

* Re: ixgbe rxq interrupt not working
  2023-03-07 21:11 ` Stephen Hemminger
@ 2023-03-08 17:23   ` Rajasekhar Pulluru
  0 siblings, 0 replies; 7+ messages in thread
From: Rajasekhar Pulluru @ 2023-03-08 17:23 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

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

Hi Stephen,

Downloaded https://fast.dpdk.org/rel/dpdk-22.11.1.tar.xz, built and linked
with the application. Still don't get rxq interrupt of ixgbe ports.

EAL: Detected CPU lcores: 4
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: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ixgbe (8086:15e4) device: 0000:02:00.0 (socket
-1)
EAL: Probe PCI driver: net_ixgbe (8086:15e4) device: 0000:02:00.1 (socket
-1)
EAL: Ignore mapping IO port bar(2)
EAL: Probe PCI driver: net_e1000_igb (8086:1521) device: 0000:04:00.1
(socket -11)

# cat /proc/interrupts | grep vfio
 59:          0          0          6          0  IR-PCI-MSI 1048576-edge
   vfio-msix[0](0000:02:00.0)
 60:          0          6          0          0  IR-PCI-MSI 1050624-edge
   vfio-msix[0](0000:02:00.1)
 61:          0          0          1          0  IR-PCI-MSI 2099200-edge
   vfio-msix[0](0000:04:00.1)
#>>>>> the above 3 irq's are link state change interrupt, verified by
plugging-out and plugging-in eth cable and verified the above irq counter
increments every time.

 62:          0          0          0          0  IR-PCI-MSI 1050625-edge
   vfio-msix[1](0000:02:00.1)
 63:          0      18200          0          0  IR-PCI-MSI 2099201-edge
   vfio-msix[1](0000:04:00.1)
 64:          0          0          0          0  IR-PCI-MSI 1048577-edge
   vfio-msix[1](0000:02:00.0)
#>>>>> igb port irq counter is non-zero (likely to be rxq), where-as the
same for ixgbe is 0.

Thanks & Regards,
Rajasekhar

On Wed, Mar 8, 2023 at 3:12 AM Stephen Hemminger <stephen@networkplumber.org>
wrote:

> On Wed, 8 Mar 2023 00:22:10 +0530
> Rajasekhar Pulluru <pullururajasekhar@gmail.com> wrote:
>
> > Hi Team,
> >
> > Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven
> > by igb and the rest of the 4 ports driven by ixgbe.
>
>
> FYI - 22.07 is not a supported release, only LTS releases like 22.11 are
> supported.
>

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

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

* Re: ixgbe rxq interrupt not working
  2023-03-08  0:19 ` Honnappa Nagarahalli
@ 2023-03-08 17:24   ` Rajasekhar Pulluru
  2023-03-08 17:44     ` Stephen Hemminger
  0 siblings, 1 reply; 7+ messages in thread
From: Rajasekhar Pulluru @ 2023-03-08 17:24 UTC (permalink / raw)
  To: Honnappa Nagarahalli; +Cc: dev, nd

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

No Honnappa.

Thanks & Regards,
Rajasekhar

On Wed, Mar 8, 2023 at 5:49 AM Honnappa Nagarahalli <
Honnappa.Nagarahalli@arm.com> wrote:

>
>
> From: Rajasekhar Pulluru <pullururajasekhar@gmail.com>
> Sent: Tuesday, March 7, 2023 12:52 PM
> To: dev@dpdk.org
> Subject: ixgbe rxq interrupt not working
>
> Hi Team,
>
> Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven
> by igb and the rest of the 4 ports driven by ixgbe.
> [Honnappa]  Do you have packets crossing between the 2 drivers?
>
>
> I am following the below sequence to initialize these ports:
>
> dev_conf.intr_conf.lsc = 1; //Enable link state change interrupt
> dev_conf.intr_conf.rxq = 1; //Enable RX Queue Interrupt
> dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
> dev_conf.rxmode.offloads = 0;
> dev_conf.txmode.mq_mode = RTE_ETH_MQ_TX_NONE;
> dev_conf.txmode.offloads = 0;
>
> rte_eth_dev_configure
> rte_eth_rx_queue_setup
> rte_eth_tx_queue_setup
> rte_eth_dev_start
> data = port_id << CHAR_BIT | queue_id;
> rte_eth_dev_rx_intr_ctl_q(port_id, queue_id, RTE_EPOLL_PER_THREAD,
> RTE_INTR_EVENT_ADD, (void *)((uintptr_t)data));
> rte_eth_dev_rx_intr_enable(port_id, queue_id);
>
> And then main loop repeats the below:
>
> rte_epoll_wait(RTE_EPOLL_PER_THREAD, event, 1, timeout /* 200micro-sec
> */); /* ignore return value */
> rte_eth_dev_rx_intr_disable(port_id, queue_id);
> rte_eth_rx_burst(port_id, queue_id, pkts, num_pkts);
> rte_eth_dev_rx_intr_enable(port_id, queue_id);
>
> The code is same for all the ports, igb ports are able to come-up and rx
> packets, where-as the ixgbe ports are not able to rx packets at all.
> cat /proc/interrupts dumps vfio-msix counters for ixgbe as 0, where-as
> it's non-zero for igb.
> If I don't use/enable rxq interrupt for ixgbe (and remove epoll wait,
> interrupt enable/disable from while loop) and simply poll for
> rte_eth_rx_burst in a loop, ixgbe ports are able to rx packets.
>
> What could be wrong here? Appreciate any help.
>
> I would also like to know if there's an asynchronous rxq interrupt
> notification to the application instead of rte_epoll_wait (and sleep).
>
> Thanks & Regards,
> Rajasekhar
>

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

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

* Re: ixgbe rxq interrupt not working
  2023-03-08 17:24   ` Rajasekhar Pulluru
@ 2023-03-08 17:44     ` Stephen Hemminger
  2023-03-09  7:43       ` Rajasekhar Pulluru
  0 siblings, 1 reply; 7+ messages in thread
From: Stephen Hemminger @ 2023-03-08 17:44 UTC (permalink / raw)
  To: Rajasekhar Pulluru; +Cc: Honnappa Nagarahalli, dev, nd

On Wed, 8 Mar 2023 22:54:12 +0530
Rajasekhar Pulluru <pullururajasekhar@gmail.com> wrote:

> No Honnappa.
> 
> Thanks & Regards,
> Rajasekhar
> 
> On Wed, Mar 8, 2023 at 5:49 AM Honnappa Nagarahalli <
> Honnappa.Nagarahalli@arm.com> wrote:  
> 
> >
> >
> > From: Rajasekhar Pulluru <pullururajasekhar@gmail.com>
> > Sent: Tuesday, March 7, 2023 12:52 PM
> > To: dev@dpdk.org
> > Subject: ixgbe rxq interrupt not working
> >
> > Hi Team,
> >
> > Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them driven
> > by igb and the rest of the 4 ports driven by ixgbe.
> > [Honnappa]  Do you have packets crossing between the 2 drivers?
> >
> >
> > I am following the below sequence to initialize these ports:
> >
> > dev_conf.intr_conf.lsc = 1; //Enable link state change interrupt
> > dev_conf.intr_conf.rxq = 1; //Enable RX Queue Interrupt
> > dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
> > dev_conf.rxmode.offloads = 0;
> > dev_conf.txmode.mq_mode = RTE_ETH_MQ_TX_NONE;
> > dev_conf.txmode.offloads = 0;
> >
> > rte_eth_dev_configure
> > rte_eth_rx_queue_setup
> > rte_eth_tx_queue_setup
> > rte_eth_dev_start
> > data = port_id << CHAR_BIT | queue_id;
> > rte_eth_dev_rx_intr_ctl_q(port_id, queue_id, RTE_EPOLL_PER_THREAD,
> > RTE_INTR_EVENT_ADD, (void *)((uintptr_t)data));
> > rte_eth_dev_rx_intr_enable(port_id, queue_id);
> >
> > And then main loop repeats the below:
> >
> > rte_epoll_wait(RTE_EPOLL_PER_THREAD, event, 1, timeout /* 200micro-sec
> > */); /* ignore return value */
> > rte_eth_dev_rx_intr_disable(port_id, queue_id);
> > rte_eth_rx_burst(port_id, queue_id, pkts, num_pkts);
> > rte_eth_dev_rx_intr_enable(port_id, queue_id);
> >
> > The code is same for all the ports, igb ports are able to come-up and rx
> > packets, where-as the ixgbe ports are not able to rx packets at all.
> > cat /proc/interrupts dumps vfio-msix counters for ixgbe as 0, where-as
> > it's non-zero for igb.
> > If I don't use/enable rxq interrupt for ixgbe (and remove epoll wait,
> > interrupt enable/disable from while loop) and simply poll for
> > rte_eth_rx_burst in a loop, ixgbe ports are able to rx packets.
> >
> > What could be wrong here? Appreciate any help.
> >
> > I would also like to know if there's an asynchronous rxq interrupt
> > notification to the application instead of rte_epoll_wait (and sleep).
> >
> > Thanks & Regards,
> > Rajasekhar
> >  

Does the device work as expected when not used with DPDK?
I.e does the kernel driver handle it correctly.


Also check the kernel dmesg log, for any relevant info.
There maybe VFIO or other overlap involved.

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

* Re: ixgbe rxq interrupt not working
  2023-03-08 17:44     ` Stephen Hemminger
@ 2023-03-09  7:43       ` Rajasekhar Pulluru
  0 siblings, 0 replies; 7+ messages in thread
From: Rajasekhar Pulluru @ 2023-03-09  7:43 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Honnappa Nagarahalli, dev, nd

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

Hi Stephen,

ixgbe interfaces works correctly when not used with dpdk.

# cat /proc/interrupts | grep enp2s0f1
109:        436          0          0          0  IR-PCI-MSI 1050624-edge
   enp2s0f1-TxRx-0
110:          0        167          0          0  IR-PCI-MSI 1050625-edge
   enp2s0f1-TxRx-1
111:          0          0        306          0  IR-PCI-MSI 1050626-edge
   enp2s0f1-TxRx-2
112:          0          0          0        173  IR-PCI-MSI 1050627-edge
   enp2s0f1-TxRx-3
113:          0          0          1          0  IR-PCI-MSI 1050628-edge
   enp2s0f1

dmesg doesn't seem to offer any clue.

# dmesg | grep ixgbe
[    7.680989] ixgbe: Intel(R) 10 Gigabit PCI Express Network Driver
[    7.680996] ixgbe: Copyright (c) 1999-2016 Intel Corporation.
[    8.318606] ixgbe 0000:02:00.0: Multiqueue Enabled: Rx Queue count = 4,
Tx Queue count = 4 XDP Queue count = 0
[    8.477642] ixgbe 0000:02:00.0: MAC: 6, PHY: 27, PBA No: 000700-000
[    8.477654] ixgbe 0000:02:00.0: 00:e0:ed:db:33:69
[    8.539077] ixgbe 0000:02:00.0: Intel(R) 10 Gigabit Network Connection
[    8.888011] ixgbe 0000:02:00.1: Multiqueue Enabled: Rx Queue count = 4,
Tx Queue count = 4 XDP Queue count = 0
[    9.019755] ixgbe 0000:02:00.1: MAC: 6, PHY: 27, PBA No: 000700-000
[    9.019760] ixgbe 0000:02:00.1: 00:e0:ed:db:33:68
[    9.063320] ixgbe 0000:02:00.1: Intel(R) 10 Gigabit Network Connection

Thanks & Regards,
Rajasekhar

On Wed, Mar 8, 2023 at 11:14 PM Stephen Hemminger <
stephen@networkplumber.org> wrote:

> On Wed, 8 Mar 2023 22:54:12 +0530
> Rajasekhar Pulluru <pullururajasekhar@gmail.com> wrote:
>
> > No Honnappa.
> >
> > Thanks & Regards,
> > Rajasekhar
> >
> > On Wed, Mar 8, 2023 at 5:49 AM Honnappa Nagarahalli <
> > Honnappa.Nagarahalli@arm.com> wrote:
> >
> > >
> > >
> > > From: Rajasekhar Pulluru <pullururajasekhar@gmail.com>
> > > Sent: Tuesday, March 7, 2023 12:52 PM
> > > To: dev@dpdk.org
> > > Subject: ixgbe rxq interrupt not working
> > >
> > > Hi Team,
> > >
> > > Bringing-up dpdk-22.07 on an intel machine with 8 ports, 4 of them
> driven
> > > by igb and the rest of the 4 ports driven by ixgbe.
> > > [Honnappa]  Do you have packets crossing between the 2 drivers?
> > >
> > >
> > > I am following the below sequence to initialize these ports:
> > >
> > > dev_conf.intr_conf.lsc = 1; //Enable link state change interrupt
> > > dev_conf.intr_conf.rxq = 1; //Enable RX Queue Interrupt
> > > dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
> > > dev_conf.rxmode.offloads = 0;
> > > dev_conf.txmode.mq_mode = RTE_ETH_MQ_TX_NONE;
> > > dev_conf.txmode.offloads = 0;
> > >
> > > rte_eth_dev_configure
> > > rte_eth_rx_queue_setup
> > > rte_eth_tx_queue_setup
> > > rte_eth_dev_start
> > > data = port_id << CHAR_BIT | queue_id;
> > > rte_eth_dev_rx_intr_ctl_q(port_id, queue_id, RTE_EPOLL_PER_THREAD,
> > > RTE_INTR_EVENT_ADD, (void *)((uintptr_t)data));
> > > rte_eth_dev_rx_intr_enable(port_id, queue_id);
> > >
> > > And then main loop repeats the below:
> > >
> > > rte_epoll_wait(RTE_EPOLL_PER_THREAD, event, 1, timeout /* 200micro-sec
> > > */); /* ignore return value */
> > > rte_eth_dev_rx_intr_disable(port_id, queue_id);
> > > rte_eth_rx_burst(port_id, queue_id, pkts, num_pkts);
> > > rte_eth_dev_rx_intr_enable(port_id, queue_id);
> > >
> > > The code is same for all the ports, igb ports are able to come-up and
> rx
> > > packets, where-as the ixgbe ports are not able to rx packets at all.
> > > cat /proc/interrupts dumps vfio-msix counters for ixgbe as 0, where-as
> > > it's non-zero for igb.
> > > If I don't use/enable rxq interrupt for ixgbe (and remove epoll wait,
> > > interrupt enable/disable from while loop) and simply poll for
> > > rte_eth_rx_burst in a loop, ixgbe ports are able to rx packets.
> > >
> > > What could be wrong here? Appreciate any help.
> > >
> > > I would also like to know if there's an asynchronous rxq interrupt
> > > notification to the application instead of rte_epoll_wait (and sleep).
> > >
> > > Thanks & Regards,
> > > Rajasekhar
> > >
>
> Does the device work as expected when not used with DPDK?
> I.e does the kernel driver handle it correctly.
>
>
> Also check the kernel dmesg log, for any relevant info.
> There maybe VFIO or other overlap involved.
>

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

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

end of thread, other threads:[~2023-03-09  7:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-07 18:52 ixgbe rxq interrupt not working Rajasekhar Pulluru
2023-03-07 21:11 ` Stephen Hemminger
2023-03-08 17:23   ` Rajasekhar Pulluru
2023-03-08  0:19 ` Honnappa Nagarahalli
2023-03-08 17:24   ` Rajasekhar Pulluru
2023-03-08 17:44     ` Stephen Hemminger
2023-03-09  7:43       ` Rajasekhar Pulluru

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).