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