Intel Elkhart Lake 平台的以太网 MTU 问题

Intel Elkhart Lake 平台的以太网 MTU 问题

我在用这个板块来自 congatec,我正在使用 Ubuntu 22.04。

我正在尝试将以太网 MTU 设置为 9000。使用此命令我可以看到最大以太网 MTU 为 9000:

ip -d link list

我尝试将其设置为 9000,但出现此错误:

xa70@xa70:~$ sudo ifconfig eno2 mtu 9000
SIOCSIFMTU: Invalid argument

我可以将 mtu 设置为最大 4096:

xa70@xa70:~$ sudo ifconfig eno2 mtu 4097
SIOCSIFMTU: Invalid argument
xa70@xa70:~$ sudo ifconfig eno2 mtu 4096

我也尝试过:

  1. 配置 MTU 之前禁用以太网接口
  2. 在以太网控制器的寄存器中启用巨型数据包支持

有人知道我在这里做错了什么吗?

编辑:

这是 jtessier72 命令的输出:

*-network:0               
   description: Ethernet interface
   product: Intel Corporation
   vendor: Intel Corporation
   physical id: 1d.1
   bus info: pci@0000:00:1d.1
   logical name: eno1
   version: 11
   serial: a6:3c:0b:94:06:5e
   size: 10Mbit/s
   capacity: 1Gbit/s
   width: 64 bits
   clock: 33MHz
   capabilities: pm msi bus_master cap_list ethernet physical tp mii 10bt-fd 100bt-fd 1000bt-fd autonegotiation
   configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=6.2.0-34-generic duplex=half latency=0 link=no multicast=yes port=twisted pair speed=10Mbit/s
   resources: iomemory:600-5ff irq:125 memory:6001340000-600137ffff


*-network:1
   description: Ethernet interface
   product: Intel Corporation
   vendor: Intel Corporation
   physical id: 1d.2
   bus info: pci@0000:00:1d.2
   logical name: eno2
   version: 11
   serial: de:db:d7:7b:11:80
   size: 10Mbit/s
   capacity: 1Gbit/s
   width: 64 bits
   clock: 33MHz
   capabilities: pm msi bus_master cap_list ethernet physical tp mii 10bt-fd 100bt-fd 1000bt-fd autonegotiation
   configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=6.2.0-34-generic duplex=half latency=0 link=no multicast=yes port=twisted pair speed=10Mbit/s
   resources: iomemory:600-5ff irq:157 memory:6001300000-600133ffff

答案1

根据这个笔记错误SIOCSIFMTU: Invalid argument信息

表示内核拒绝了请求的 MTU。这通常是由于它超出了接口硬件支持的最大值。在这种情况下,您必须将 MTU 降低到支持的值或获取更强大的硬件。

根据此主题,至少截至 2023 年 3 月 31 日,Elkhart Lake 平台可能仅支持 4096 字节。

stmmac_change_mtu 函数将 MTU 限制为 TX FIFO 中单个队列的大小。

例如,在没有设备树的 st_gmac 上,默认值为 4096。

同一线程提到至少某些平台不会动态更新 maxmtu,并且只会在最佳情况下报告 maxmtu。您的硬件可能仅支持最多 4096(至少给定默认值)。

您应该能够使用以下方法确认 MTU 支持:

sudo ip -d link list {ifname}

~$ sudo ip -d link list ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:50:56:93:c7:ba brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 60 maxmtu 9000 addrgenmode eui64 numtxqueues 4 numrxqueues 4 gso_max_size 65536 gso_max_segs 65535 parentbus pci parentdev 0000:03:00.0
    altname enp3s0

请注意上面输出的minmtu 60和部分。maxmtu 9000

相关内容