DPDK:在 X710 NIC 卡上启用巨型帧
DPDK: Enable jumbo frames on X710 NIC card
我正在 Linux 上使用 Intel X710 NIC 使用 dpdk-stable-18.05.1。
上述 NIC 能够发送最大 9000 字节的数据包。我的应用程序无法发送大小超过 1500 的数据包。这是我的代码:
const struct rte_eth_conf default_port_conf = { .rxmode = { .max_rx_pkt_len = 9000, .offloads = DEV_RX_OFFLOAD_JUMBO_FRAME, .jumbo_frame = 1,}
.txmode = { .offloads = DEV_TX_OFFLOAD_MULTI_SEGS, } }
我正在尝试发送大小为 8192 字节的 IPV4 数据包,但在 RX 端,我们收到了 2048 字节。
(随附样品 pcap)。
我也试过 rte_eth_dev_set_mtu(pid, 9000);
但没有成功。
如有任何遗漏,请告诉我。
Intel NIC x710 支持 multi-segmented Jumbo frames
没有问题。这可以使用 DPDK 18.11.7 LTS
(始终使用 LTS 以获得更好的支持和修复)和 DPDK 示例 skeleton
.
轻松验证
要启用多段 JUMBO 帧,请将 port_conf 更改为
static const struct rte_eth_conf port_conf_default = {
.rxmode = {
.max_rx_pkt_len = 9000,
.split_hdr_size = 0,
.offloads = (DEV_RX_OFFLOAD_JUMBO_FRAME),
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_MULTI_SEGS),
},
};
唯一冲突的配置是使用 jumbo_frame = 1 along with DEV_RX_OFFLOAD_JUMBO_FRAME
。根据 DPDK 版本 (18.11 LTS),建议使用 DEV_RX_OFFLOAD_JUMBO_FRAME,因为 jumbo_frame 已弃用。
因此 x710 网卡不支持多段巨型帧的假设是不正确的.
命令:
# ./build/basicfwd -w 0000:08:00.0 -w 0000:08:00.1 -w 0000:08:00.2 -w 0000:08:00.3
EAL: Detected 88 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: PCI device 0000:08:00.0 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: using IOMMU type 1 (Type 1)
EAL: PCI device 0000:08:00.1 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: PCI device 0000:08:00.2 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: PCI device 0000:08:00.3 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
Port 0 MAC: 3c fd fe 9f 3a 00
Port 1 MAC: 3c fd fe 9f 3a 01
Port 2 MAC: 3c fd fe 9f 3a 02
Port 3 MAC: 3c fd fe 9f 3a 03
WARNING: Too many lcores enabled. Only 1 used.
Core 0 forwarding packets. [Ctrl+C to quit]
上述 NIC 能够发送最大 9000 字节的数据包。我的应用程序无法发送大小超过 1500 的数据包。这是我的代码:
const struct rte_eth_conf default_port_conf = { .rxmode = { .max_rx_pkt_len = 9000, .offloads = DEV_RX_OFFLOAD_JUMBO_FRAME, .jumbo_frame = 1,}
.txmode = { .offloads = DEV_TX_OFFLOAD_MULTI_SEGS, } }
我正在尝试发送大小为 8192 字节的 IPV4 数据包,但在 RX 端,我们收到了 2048 字节。 (随附样品 pcap)。
我也试过 rte_eth_dev_set_mtu(pid, 9000);
但没有成功。
如有任何遗漏,请告诉我。
Intel NIC x710 支持 multi-segmented Jumbo frames
没有问题。这可以使用 DPDK 18.11.7 LTS
(始终使用 LTS 以获得更好的支持和修复)和 DPDK 示例 skeleton
.
要启用多段 JUMBO 帧,请将 port_conf 更改为
static const struct rte_eth_conf port_conf_default = {
.rxmode = {
.max_rx_pkt_len = 9000,
.split_hdr_size = 0,
.offloads = (DEV_RX_OFFLOAD_JUMBO_FRAME),
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_MULTI_SEGS),
},
};
唯一冲突的配置是使用 jumbo_frame = 1 along with DEV_RX_OFFLOAD_JUMBO_FRAME
。根据 DPDK 版本 (18.11 LTS),建议使用 DEV_RX_OFFLOAD_JUMBO_FRAME,因为 jumbo_frame 已弃用。
因此 x710 网卡不支持多段巨型帧的假设是不正确的.
命令:
# ./build/basicfwd -w 0000:08:00.0 -w 0000:08:00.1 -w 0000:08:00.2 -w 0000:08:00.3
EAL: Detected 88 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: PCI device 0000:08:00.0 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: using IOMMU type 1 (Type 1)
EAL: PCI device 0000:08:00.1 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: PCI device 0000:08:00.2 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
EAL: PCI device 0000:08:00.3 on NUMA socket 0
EAL: probe driver: 8086:1572 net_i40e
Port 0 MAC: 3c fd fe 9f 3a 00
Port 1 MAC: 3c fd fe 9f 3a 01
Port 2 MAC: 3c fd fe 9f 3a 02
Port 3 MAC: 3c fd fe 9f 3a 03
WARNING: Too many lcores enabled. Only 1 used.
Core 0 forwarding packets. [Ctrl+C to quit]