网络层优化(一):物理层优化——光纤选择、网卡调优、交换机配置、布线策略
聊到暗池交易的延迟优化,很多人第一反应就是改代码、调算法。但说实话,我见过太多团队在软件层面抠了几微秒,结果物理层一测,光信号在光纤里多绕了十几米,那点优化全白费了。
物理层,才是延迟优化的地基。你想想看,光在光纤里的传播速度大约是每米5纳秒,这还不算信号在交换机、网卡里的处理时间。所以,这一章咱们就把物理层这四块硬骨头啃下来:光纤怎么选、网卡怎么调、交换机怎么配、线怎么走。
核心原则:物理层优化的目标只有一个——让数据包从网卡到交换机再到对端,走最短的路、花最少的时间、受最少的干扰。
1. 光纤选择:别小看这根玻璃丝
光纤这东西,看着都差不多,但实际用起来差别大了。我个人习惯把光纤分成两类:多模和单模。
- 多模光纤(MMF):适合短距离,一般几百米以内。成本低,但带宽和延迟表现一般。
- 单模光纤(SMF):适合长距离,几公里甚至几十公里。延迟更低,信号损耗更小。
在暗池交易这种场景下,机柜之间的距离通常不超过100米。那是不是用多模就够了?不一定。我曾在某家交易所的托管机房做过测试,同样一段50米的链路,单模光纤的端到端延迟比多模低了大约3-5纳秒。为什么?因为单模光纤的芯径更小,光信号在传输过程中几乎没有模式色散,信号更纯净。
我的建议:哪怕机柜就在隔壁,也优先选单模光纤。OS2级别的单模光纤,配合LC接口,是目前延迟最低的选择。
另外,接头也很关键。别用那种廉价的快速接头,一定要用熔接或者预端接的成品跳线。我曾经遇到过一根跳线,因为接头没做好,光功率衰减了0.5dB,结果链路误码率飙升,重传率高了10倍。嗯,那根线后来被我直接剪了。
2. 网卡调优:不只是插上就能用
网卡是数据进入服务器的第一道关卡。很多人觉得网卡就是插上、装驱动、配IP就完事了。其实不然,网卡的可调参数非常多,而且每个参数都可能影响延迟。
我常用的网卡是Mellanox ConnectX系列和Solarflare SFN系列。这两家在低延迟领域是公认的标杆。下面是我个人习惯的调优步骤:
- 关闭中断合并(Interrupt Coalescing):这个功能默认是开的,它会攒一批数据包再触发中断。攒包虽然能降低CPU占用,但会引入额外延迟。在暗池交易里,我们宁可CPU多跑一点,也要把延迟压到最低。所以,关掉它。
- 开启RSS(Receive Side Scaling):让多个CPU核心分担网卡中断,避免单个核心成为瓶颈。但要注意,RSS的哈希算法要选对,最好用对称哈希,否则同一个流的数据包可能被分到不同核心,导致乱序。
- 调整Ring Buffer大小:Ring Buffer太小容易丢包,太大又增加延迟。我一般设成1024或2048,具体要看流量模型。你可以用
ethtool -g eth0查看当前值,然后用ethtool -G eth0 rx 2048 tx 2048调整。 - 关闭流控(Flow Control):流控是防止丢包的机制,但它会引入反压,导致延迟抖动。在暗池交易这种受控网络里,我们宁愿丢包重传,也不要流控带来的不确定性。
注意:关闭流控后,如果网络链路质量不好,丢包率会上升。所以一定要确保光纤、交换机、网卡之间的信号质量是OK的。我建议在调优前先用ethtool -S eth0看一下丢包统计,做到心中有数。
最后,别忘了检查网卡的固件版本。我遇到过好几次,升级固件后延迟直接降了10%。厂商的Release Notes里通常会写清楚每个版本修复了什么问题,值得花时间看看。
3. 交换机配置:核心中的核心
交换机是整个网络的中枢神经。在暗池交易里,交换机配置的好坏,直接决定了整个系统的延迟水平。
我常用的交换机是Arista 7130系列和Cisco Nexus 3000系列。这两款都支持硬件级别的低延迟转发。下面是我总结的几个关键配置点:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 转发模式 | Cut-through | 收到数据包头部就开始转发,延迟最低。Store-and-forward要等整个包收完才转发,延迟高。 |
| MTU | 9000(Jumbo Frame) | 大帧可以减少包数量,降低CPU开销。但要注意,所有设备都要支持。 |
| STP(生成树协议) | 关闭 | STP会阻塞冗余链路,引入延迟。在暗池交易里,我们通常用静态路由或ECMP替代。 |
| QoS | 关闭或简化 | QoS的队列调度会引入延迟。如果必须用,只保留一个优先级队列。 |
| 端口缓冲 | 最小化 | 缓冲越大,延迟越高。我一般设成1-2个数据包的大小。 |
这里特别说一下Cut-through模式。它虽然延迟低,但有个坑:如果链路有CRC错误,Cut-through会把坏包也转发出去。所以,一定要确保物理链路的质量。我建议在交换机上开启CRC错误统计,定期检查。
一个小技巧:在Arista交换机上,可以用show platform forwarding命令查看当前转发模式。如果显示的是Store-and-forward,赶紧改过来。
4. 布线策略:别让线缆毁了所有优化
布线这件事,看起来最不起眼,但往往是最容易出问题的。我见过太多团队,光纤选的是最好的,网卡调得也到位,交换机配置也完美,结果一测延迟,比预期高了20%。最后发现,是线缆走线绕了远路。
布线策略的核心就一句话:让信号走最短的物理路径。
具体来说,有几点要注意:
- 避免绕线:机柜之间的线缆,能走直线就走直线。别为了美观把线绕在理线架上。每多绕一米,光信号就多5纳秒延迟。
- 减少跳线:每多一个跳线点,就多一次信号损耗。我建议用预端接的成品跳线,直接从交换机端口连到服务器网卡,中间不要有额外的配线架。
- 区分收发:光纤是双向传输的,但收发是分开的。布线时一定要确保TX对RX,RX对TX。我曾经因为接反了,排查了整整一个下午。
- 标签清晰:每根线都要贴标签,标明两端设备、端口号。否则出了问题,你根本不知道哪根线对应哪个链路。
避坑指南:我曾经在一个托管机房遇到过一个问题,所有设备都配置好了,但链路就是起不来。最后发现,是光纤跳线的弯曲半径太小,导致光信号衰减过大。所以,布线时一定要保证光纤的弯曲半径不小于10倍线径。
另外,我建议在布线完成后,用OTDR(光时域反射仪)测一下整条链路的损耗和长度。这样能精确知道信号走了多远,有没有异常衰减。嗯,这一步虽然麻烦,但值得做。
知识体系总览
下面这张图,是我自己画的物理层优化知识体系。你可以把它当成一个检查清单,每次做优化时对照着看,确保没有遗漏。
好了,物理层优化这部分就聊到这儿。说白了,就是要把每一根光纤、每一块网卡、每一台交换机、每一段线缆都做到极致。别觉得这些细节琐碎,在纳秒级的竞争中,任何一个环节的疏忽,都可能让你输在起跑线上。