超大帧超过 6000 时 Synology 读取性能下降

col*_*ium 12 ethernet throughput

精简版

我的家庭网络是纯千兆的,所有设备都支持至少约 9000 字节的巨型帧。将 Synology 上的 MTU 巨型帧设置增加到 6000(字节)可提高性能(810Mbps 写入和 945Mbps 读取)。将该值设置为 7000 只会破坏读取性能(一直下降到 4Mbps);写入性能保持快速。

这是出乎意料的,因为大多数巨型帧问题都没有与它们相关的方向性,并且通常要么全部要么全无(数据包无论来自何处都会在交换机上丢弃)。似乎根本没有发生任何IP 分片,但 TCP 层真的很不高兴。什么可能导致这种不对称/片状行为,我该如何修复它以支持我所有设备应该支持的完整 9000 字节 MTU?


长版

这些是我在试图弄清楚这一点时所做的编辑笔记。

客户

Realtek PCIe GBE 系列控制器 RTL8167
巨型帧:9KB MTU

$ netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
  9198                1   32501506   11275394  Local Area Connection
Run Code Online (Sandbox Code Playgroud)

(似乎 9198 不包括 14 字节以太网标头)

$ ping -l 1500 -f 192.168.1.84
Run Code Online (Sandbox Code Playgroud)

(在客户端上运行 Wireshark 时观察到;所有大小都是线字节大小)
[9213, ?] 未由主机发送(需要分段)
[9019, 9212] 已发送但没有响应
[9015, 9018] 分段 IP 响应
[42, 9014] ] 未分片的 IP
[0, 41] ? (无法生成,因为 eth+IP+ICMP 标头 = 14+20+8 = 42 字节)

路由器(交换机部分)

Asus RT-AC68U -- Firmware 3.0.0.4.378_4585
Enable Jumbo Frame: "Enable"
无法弄清楚它实际支持的巨型帧大小,似乎至少是 9000

它将来自客户端的 ping 请求分段为 1514 字节(但 ping 路由器可能会触发其 WAN 路由器行为而不是其 LAN 交换机行为?)

非网管交换机

TP-LINK TL-SG1008D
Jumbo Frames(规格表):9KB(他们的网站说 15KB 但它看起来像一个不同的设备)

服务器

Synology DS1815+ -- DSM 5.2-5565 更新 1
巨型帧:9000

从 Synology 到客户端的文件读取数据包
大小:大多数为 9014 字节(双向)
IP 标志:不要对
发现的 Wireshark 进行分片:TCP 虚假重传、TCP 上一段未捕获、TCP 乱序、TCP 快速重传、和正常(9014 字节)数据包
SMB2-over-NetBIOS 协议数据包读取响应读取长度:65,536(~8 个 TCP 段)

$ ifconfig
bond0     Link encap:Ethernet  HWaddr --:FF
          inet addr:192.168.1.84  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addrs: --/64 Scope:Link, --/64 Scope:Global, --/64 Scope:Global
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:9000  Metric:1
          RX packets:lots errors:85 dropped:0 overruns:0 frame:85
          TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:237 GiB  TX bytes:117 GiB

eth2      Link encap:Ethernet  HWaddr --:00
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:9000  Metric:1
          RX packets:lots errors:19 dropped:0 overruns:0 frame:19
          TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:236 GiB  TX bytes:83 GiB

eth3      Link encap:Ethernet  HWaddr --FF
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:9000  Metric:1
          RX packets:lots errors:66 dropped:0 overruns:0 frame:66
          TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1 GiB  TX bytes:33 GiB
Run Code Online (Sandbox Code Playgroud)

eth2 和 eth3 使用自适应负载平衡绑定(不支持交换机)

$ ping -c 5 -s 1500 192.168.1.82
Run Code Online (Sandbox Code Playgroud)

(在客户端上运行 Wireshark 时观察到;所有大小都是线字节大小)
[9019, ?] 请求已发送,响应已发送,响应未收到
[9015, 9018] 碎片化的 IP 请求(可能由 Synology 碎片化,busybox ping 没有no-fragment 选项,所以很难说)
[60, 9014] 未分片的 IP
[0, 59] ?(无法生成,因为 busybox ping 放置了至少 18 个字节加上 42 个字节的标头)

杂项数据

  • 将客户端 MTU 更改为 8KB 没有帮助
  • 将服务器的 MTU 从 6000(很棒,945Mbps)更改为 7000(糟糕,4Mbps)时,服务器的读取速度急剧下降
  • 服务器的写入速度在所有服务器 MTU 设置下基本不受影响(始终在 700 和 825 Mbps 之间)
  • Synology 具有绑定网络(4 个端口中的 2 个)
  • 电缆均为 Cat6 或 Cat5e

Jen*_*ich 2

更新固件

根据我的经验,Synology 在每个固件版本中修复了很多问题,而您运行的固件已经有近四年的历史了。我还没有阅读发行说明,但从那时起似乎有很多机会修复巨型帧错误。

使用直接连接进行测试

使用新的跳线将测试机直接连接到 Synology(在同一子网上分配静态 IP)并重新运行测试。这将消除布线和交换机以及任何其他设备和配置问题。如果问题仍然存在,请使用另一台计算机运行测试。如果它仍然存在,那么肯定是 NAS。

如果在直连测试期间问题消失,请尝试先更换交换机,然后再更换布线。您没有显示连接,因此我假设测试机和 NAS 之间只有 TPLINK。