DPDK22 issue: Unable to set more than 4 queues in Azure

Nageswara Rao nagpen75 at gmail.com
Thu Jun 22 18:36:10 CEST 2023


Hi All,

We are observing the following issue with DPDK22.11. We didn’t find any
upstream patches for this issue on the DPDK github. Is there any known
issue, please let us know.



*Issue:*

On Azure platform, we are unable to configure more than 4 queues. When we
try to configure more than 4 queues its failing with “EAL: Cannot send more
than 8 FDs” error.

Here I am pasting the working and failing testpmd logs.

Please note that this issue is not observed in DPDK 21.11.



*DPDK Testpmd*:
*Working case with 4 rx & 4 tx queues:*
./build/app/dpdk-testpmd -l 0-3 -a 38d9:00:02.0 -- --nb-cores=3 --rxq=4
--txq=4 --burst=64 --mbcache=512 --max-pkt-len=128 --forward-mode=txonly -a
--stats-period 1

*Failing case with 8 rx & 8 tx queues:*
./build/app/dpdk-testpmd -l 0-7 -a 38d9:00:02.0 -- --nb-cores=4 --rxq=8
--txq=8 --burst=64 --mbcache=512 --max-pkt-len=128 --forward-mode=txonly -a
--stats-period 1

*DPDK log:*
Configuring Port 0 (socket 0)
EAL: Cannot send more than 8 FDs
tap_mp_req_on_rxtx(): Failed to send start req to secondary 7
*** stack smashing detected ***: <unknown> terminated
Aborted

=====================================



When we checked DPDK 22.11 code, tap_mp_req_on_rxtx() pasted below is newly
added in rte_eth_tap.c file which is causing the issue.



static int

tap_mp_req_on_rxtx(struct rte_eth_dev *dev)

{

                struct rte_mp_msg msg;

                struct ipc_queues *request_param = (struct ipc_queues
*)msg.param;

                int err;

                int fd_iterator = 0;

                struct pmd_process_private *process_private =
dev->process_private;

                int i;



                memset(&msg, 0, sizeof(msg));

                strlcpy(msg.name, TAP_MP_REQ_START_RXTX, sizeof(msg.name));

                strlcpy(request_param->port_name, dev->data->name,
sizeof(request_param->port_name));

                msg.len_param = sizeof(*request_param);

                for (i = 0; i < dev->data->nb_tx_queues; i++) {

                                msg.fds[fd_iterator++] =
process_private->txq_fds[i];

                                msg.num_fds++;

                                request_param->txq_count++;

                }

                for (i = 0; i < dev->data->nb_rx_queues; i++) {

                                msg.fds[fd_iterator++] =
process_private->rxq_fds[i];

                                msg.num_fds++;

                                request_param->rxq_count++;

                }



                err = rte_mp_sendmsg(&msg);  ========================è This
function is sending msg with msg.num_fds > RTE_PMD_TAP_MAX_QUEUES (i.e. 8),
because of that its failing.

                if (err < 0) {

                                TAP_LOG(ERR, "Failed to send start req to
secondary %d",

                                                rte_errno);

                                return -1;

                }



                return 0;

}



Thanks

Nagesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20230622/07caa951/attachment.htm>


More information about the dev mailing list