usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

UHD 4.1.0.5 breaks support for DPDK on 10GbE links

DR
David Raeman
Thu, Feb 10, 2022 2:17 AM

Hi all,

I just updated 4.1.0.1 --> 4.1.0.5, and unfortunately DPDK support was broken by commit a629ce3a46. Here's a quick trace of the problem:
(1) The commit increased MPMD_10GE_DATA_FRAME_MAX_SIZE from 7972 to 8016.
(2) In mpmd_link_if_ctrl_udp.cpp, this constant is passed as the max frame size to discover_mtu(), which then tries to send a 8016-byte buffer via dpdk_simple::send.
(3) dpdk_simple::send asserts if provided a buffer size >8000. This is because its constructor always makes a udp_dpdk_link object with default link parameters, which hard-codes send_frame_size and recv_frame_size to be to 8000 (toward the bottom of dpdk_simple.cpp).

Unfortunately, the behavior cannot be circumvented using args. A quick fix might be to increase the hard-coded link params in dpdk_simple, but I noted that a value of 8000 is also hard-coded in a couple other places (e.g. DEFAULT_FRAME_SIZE in dpdk_common.cpp).  In the meantime, my temporary solution is to locally revert commit a629ce3a46 until it can be confirmed with DPDK with 10GbE.

Cheers,

--
David Raeman
Synoptic Engineering

Hi all, I just updated 4.1.0.1 --> 4.1.0.5, and unfortunately DPDK support was broken by commit a629ce3a46. Here's a quick trace of the problem: (1) The commit increased MPMD_10GE_DATA_FRAME_MAX_SIZE from 7972 to 8016. (2) In mpmd_link_if_ctrl_udp.cpp, this constant is passed as the max frame size to discover_mtu(), which then tries to send a 8016-byte buffer via dpdk_simple::send. (3) dpdk_simple::send asserts if provided a buffer size >8000. This is because its constructor always makes a udp_dpdk_link object with default link parameters, which hard-codes send_frame_size and recv_frame_size to be to 8000 (toward the bottom of dpdk_simple.cpp). Unfortunately, the behavior cannot be circumvented using args. A quick fix might be to increase the hard-coded link params in dpdk_simple, but I noted that a value of 8000 is also hard-coded in a couple other places (e.g. DEFAULT_FRAME_SIZE in dpdk_common.cpp). In the meantime, my temporary solution is to locally revert commit a629ce3a46 until it can be confirmed with DPDK with 10GbE. Cheers, -- David Raeman Synoptic Engineering
MD
Marcus D. Leech
Thu, Feb 10, 2022 7:02 PM

On 2022-02-09 21:17, David Raeman wrote:

Hi all,

I just updated 4.1.0.1 --> 4.1.0.5, and unfortunately DPDK support was
broken by commit a629ce3a46. Here's a quick trace of the problem:

(1) The commit increased MPMD_10GE_DATA_FRAME_MAX_SIZE from 7972 to 8016.

(2) In mpmd_link_if_ctrl_udp.cpp, this constant is passed as the max
frame size to discover_mtu(), which then tries to send a 8016-byte
buffer via dpdk_simple::send.

(3) dpdk_simple::send asserts if provided a buffer size >8000. This is
because its constructor always makes a udp_dpdk_link object with
default link parameters, which hard-codes send_frame_size and
recv_frame_size to be to 8000 (toward the bottom of dpdk_simple.cpp).

Unfortunately, the behavior cannot be circumvented using args. A quick
fix might be to increase the hard-coded link params in dpdk_simple,
but I noted that a value of 8000 is also hard-coded in a couple other
places (e.g. DEFAULT_FRAME_SIZE in dpdk_common.cpp).  In the meantime,
my temporary solution is to locally revert commit a629ce3a46 until it
can be confirmed with DPDK with 10GbE.

Cheers,

--

David Raeman

Synoptic Engineering


USRP-users mailing list --usrp-users@lists.ettus.com
To unsubscribe send an email tousrp-users-leave@lists.ettus.com

David:

Thanks very much for your diligence on this.  I'll be passing this
information along to Ettus/NI developers.

I see that you've already posted an issue in the public UHD
bug-tracker.  Thanks.

On 2022-02-09 21:17, David Raeman wrote: > > Hi all, > > I just updated 4.1.0.1 --> 4.1.0.5, and unfortunately DPDK support was > broken by commit a629ce3a46. Here's a quick trace of the problem: > > (1) The commit increased MPMD_10GE_DATA_FRAME_MAX_SIZE from 7972 to 8016. > > (2) In mpmd_link_if_ctrl_udp.cpp, this constant is passed as the max > frame size to discover_mtu(), which then tries to send a 8016-byte > buffer via dpdk_simple::send. > > (3) dpdk_simple::send asserts if provided a buffer size >8000. This is > because its constructor always makes a udp_dpdk_link object with > default link parameters, which hard-codes send_frame_size and > recv_frame_size to be to 8000 (toward the bottom of dpdk_simple.cpp). > > Unfortunately, the behavior cannot be circumvented using args. A quick > fix might be to increase the hard-coded link params in dpdk_simple, > but I noted that a value of 8000 is also hard-coded in a couple other > places (e.g. DEFAULT_FRAME_SIZE in dpdk_common.cpp).  In the meantime, > my temporary solution is to locally revert commit a629ce3a46 until it > can be confirmed with DPDK with 10GbE. > > Cheers, > > -- > > David Raeman > > Synoptic Engineering > > > _______________________________________________ > USRP-users mailing list --usrp-users@lists.ettus.com > To unsubscribe send an email tousrp-users-leave@lists.ettus.com David: Thanks very much for your diligence on this.  I'll be passing this information along to Ettus/NI developers. I see that you've already posted an issue in the public UHD bug-tracker.  Thanks.