TL-R5408M 拆机 / 芯片设计评测
TP-LINK R5408M 的设计方面还是有可圈可点之处的,值得单独开一篇文章出来说一说。在更换到 XDR6088 方案之前,我用的路由器就是 R5408M 接一个 AP 使用,因为 R5408M 是个有线路由器,不包含 Wi-Fi 发射模块。R5408M 总体表现还是不错的,毕竟这是为数不多的在这个价位能好几个 2.5G 口同时跑满上下行速率。当然了这也和他的芯片设计有关系,这也正是接下来要分享的内容。
根据 acwifi 的测试,四个 2.5G 口对拷数据(1对2,3对4),两组连接总带宽轻轻松松达到 10Gbps,至于能不能每个口跑满上下行共 20Gbps 我也不关心了,反正我用不到这样的速率。而 1G 口和 2.5G 区域的转发效率,acwifi 做的就比较草率了,只测了多条流 1G 到 2.5G 单口的速率,无法推测出来 1G 口到 2.5G 口的性能,而这个没测到的地方也正是我自己踩雷的地点。
R5408M 一共八个网口,1-4 号是 2.5G,5-8 号是 1G,八个口都能作为 WAN 口,说明八个口都挂在同一组交换机下面。
竞品芯片设计
R5408M 的主板设计可以用优雅来形容,只有一个 CPU,闪存,4 个 2.5G phy 芯片,详细内容我会放在再后面讲解。其他类似的产品通常都需要从 CPU 接出来一个 HSGMII 通道,接一个外置的交换芯片从而扩展多个网口。
比如这是 TL-R5010PE-EN 的芯片设计,一共 10 个 2.5G 口,第 1 个只能是 WAN,第 2 个可以 WAN 也可以 LAN,后面 8 个口只能作为 LAN 口,这也和他的芯片设计有关。
CPU EN7562 直通两个 2.5G 口,CPU 有一条 HSGMII (2.5Gbps) 总线连到 RTL8373,从而扩展出来 4 个 2.5G 口。然后 RTL8224 通过 QXGMII (10Gbps) 与前面的 RTL8373 连接,再扩出来 4 个 2.5G 口。所以最后四个口到最前两个口需要经过两条总线。这也还不是最离谱的,最离谱的是后面八个口到前面 CPU 只有一个 HSGMII 带宽,意味着 1 号 2 号和后面几个口组成两组链路,总带宽只能跑到 2.5G,而理想状态应该有 10Gbps。引用一下 acwifi 的原话:
受此影响,2 号网口尽量不要接诸如电脑和 NAS 这些内网大流量传输数据的设备。
同时放一张图言简意赅的说明问题。
R5408M 芯片设计
再次回到 R5408M 的设计,刚才提到它只有一个 CPU,闪存,4 个 2.5G phy 芯片,没有外置交换芯片。R5408M 的四个 2.5G 口是直通 CPU 的,这一点在网上没有相关内容,我是从 TP-LINK 工程师那边获取的一手信息。CPU EN7562C 里面集成有一个千兆交换机,5-8 号千兆口就是走这个交换芯片。
千兆交换芯片导致死机
我之前把光猫 WAN 口接到 8 号千兆口,AP 接到 7 号千兆口,NAS 接在 1 号直通 2.5G 口,平均跑 1-2 T 数据路由器就会死机,并且 AP 下面的设备连不上网,拿不到 DHCP 的 IP 地址。那时候我还有一台不常用的 PC,主板上是千兆口,自然也就连着路由器千兆口。所以当时的表现是 AP 下的无线设备拿不到 IP,PC 接着有线也拿不到 IP,我就直接找客服反映问题去了。
TP 工程师远程操作我电脑的过程中,意外发现 USB 2.5G 卡可以拿到 IP,工程师也突然意识到,问题估计出在千兆交换芯片上 -- 只有直通的网口还在正常工作。随后工程师从我这把内存寄存器 dump 了一份拷走,这个问题有可能已经修复了,因为我后来没遇到过。如果有人再遇到断流问题的话,建议把跑流量比较多的设备全放在 2.5G 口,直通口更稳定一些。
EN7562 封装细节和结论
R5408M 的整个设计,CPU EN7562 看起来就像是个黑盒,只需要接上 phy 芯片,闪存芯片就直接可以工作了,但这篇文章肯定不能止步于此,不过下面的内容大都是我自己凭经验猜测的,不一定百分百准确。
EN7562 本质上是个 SoC,就是用胶水把一些东西粘起来,据我所知最起码里面封装了 RTL8226B,RTL8367SC,RTL9303 这些芯片(接口)。
- 很容易可以查到 RTL8226B 和 RTL8221B 是同架构的 SPY 芯片,我也不懂这是干什么用的,明明四个 RTL8221B SPY 已经外置了。猜测是给外面四颗 SPY 提供连接线路?
- RTL8367SC 是 5 口千兆交换芯片,GMAC1 扩展支持 SGMII (1.25GHz) 和 HSGMII (3.125GHz),GMAC2 扩展支持 MII 和 RGMII。
- RTL9303 是 8 口交换芯片,最大支持 8*10G 的带宽。
R5408M 的八个网口的名字分别如下
eth0
eth0.1
eth0.2
eth0.3
eth0.4
eth1
eth2
eth3
不难看出 eth0 eth1 eth2 eth3 是四个 CPU 直通的 2.5G 网口,而 eth0.1 eth0.2 eth0.3 eth0.4 分别是基于 eth0 虚拟出来的四个千兆口,我之前正是把 WAN 口接在 eth0.4 上面,出问题的也是这四个虚拟口。
Linux 上虚拟网口一般用的是 VLAN 技术,感兴趣的朋友自行研究吧。关于物理层面,千兆交换机的四个数据线路大概率是连接到 eth0 上面共享 eth0 的数据总线。假设我的理解是正确的,eth0 直通 CPU 的线路会承担五个网口的数据流,比较繁忙,正好可以用来做 WAN 口;NAS 这类设备可以优先放在 eth1 eth2 eth3 三个口上;AP 就无所谓了,反正无线速度都跑不了多快,放千兆或者 2.5G 都问题不大。不要考虑千兆带宽浪费 2.5G 口的问题,因为 WAN 接到千兆口更不环保,数据除了经过 CPU 之外,还要再经过一个千兆交换机。这时候也不由得感叹,表面上得出的结论(节省 2.5G 口)和底层原理(数据链路更长)经常是相反的。