2. 延迟的基本概念

各位同学好,我是老张。在光通信系统里摸爬滚打了十几年,今天咱们来聊聊延迟这个事儿。

说实话,我刚入行那会儿,对延迟的理解特别肤浅。总觉得不就是信号从A点到B点花的时间嘛,有啥好研究的?直到有一次,我在调试一个40Gbps的传输系统时,发现接收端的数据老是出错。查了三天三夜,最后发现是延迟计算差了那么几个纳秒。嗯,从那以后,我再也不敢小看延迟了。

2.1 延迟的定义

延迟,说白了就是一个数据包从发送端到接收端所经历的总时间。你想想看,就像你寄快递,从下单到签收,中间经历了多少环节?光通信也是一样。

我个人习惯把延迟拆成三部分来看:

  • 传输延迟:信号在光纤里跑的时间
  • 处理延迟:设备处理数据花的时间
  • 排队延迟:数据在缓冲区等着被处理的时间

这三部分加起来,就是端到端的延迟。我在项目中遇到过不少新人,一上来就只盯着传输延迟看,结果系统设计出来根本跑不通。为什么?因为处理延迟和排队延迟往往才是大头。

核心公式:

总延迟 = 传输延迟 + 处理延迟 + 排队延迟

单位:通常用纳秒(ns)或微秒(μs)表示

2.2 传输延迟

传输延迟是最直观的。光在光纤里的速度大约是2×10⁸ m/s,比真空中的光速慢一些。为什么?因为光纤的折射率不是1,一般在1.45到1.5之间。

举个例子:

光纤长度:100公里
光速在光纤中:2×10⁸ m/s
传输延迟 = 100,000 / 200,000,000 = 0.5 ms

你看,100公里的光纤,光跑过去就要0.5毫秒。这个数字看着不大,但在高频交易系统里,0.5毫秒可能就意味着几百万的盈亏。

我记得有个项目,客户要求延迟必须控制在1微秒以内。我们算了一下,光在光纤里跑1微秒只能走200米。所以整个系统的物理距离必须控制在200米以内。这就是传输延迟的硬约束。

小技巧:

估算传输延迟时,可以用这个口诀:每公里光纤约5微秒。虽然不精确,但做初步设计时够用了。

2.3 处理延迟

处理延迟就复杂多了。它包括了:

  • 串并转换时间
  • FEC编解码时间
  • 时钟数据恢复时间
  • 协议处理时间

我曾经调试过一个100Gbps的系统,发现处理延迟占了总延迟的80%。当时我特别纳闷,光纤才跑了10公里,怎么延迟这么大?后来一查,原来是FEC解码芯片的处理时间太长。

为什么会这样?因为现在的光通信系统,为了纠错能力,FEC算法越来越复杂。比如常用的SD-FEC,解码延迟可能达到几百纳秒。你想想看,光在光纤里跑100公里才500微秒,一个芯片就吃掉了几百纳秒,这比例可不小。

避坑指南:

我曾经犯过一个错误:选型时只看芯片的吞吐量,没关注处理延迟。结果系统搭好后,延迟指标死活达不到。后来换了一款处理延迟更低的芯片,问题才解决。所以,选芯片时一定要看数据手册里的"processing latency"参数。

2.4 排队延迟

排队延迟是最容易被忽视的。数据包到了交换机或路由器,如果出口正忙,就得在缓冲区里等着。这个等待时间就是排队延迟。

排队延迟的计算公式是:

排队延迟 = 队列长度 / 出口速率

举个例子:

参数 数值
队列长度 100个数据包
每个数据包大小 1500字节
出口速率 10 Gbps
排队延迟 100 × 1500 × 8 / 10⁹ = 1.2 ms

1.2毫秒!这比100公里光纤的传输延迟还大。所以,在数据中心里,网络拥塞导致的排队延迟往往是最大的延迟来源。

我个人习惯在设计系统时,给排队延迟留出足够的余量。一般建议按峰值流量的1.5倍来设计缓冲区大小。这样即使遇到突发流量,排队延迟也不会失控。

2.5 三种延迟的关系

这三种延迟不是孤立的,它们之间会相互影响。比如:

  • 处理延迟大了,数据在缓冲区里等的时间就长,排队延迟也跟着变大
  • 排队延迟大了,接收端可能超时重传,又增加了处理延迟

这就是个恶性循环。我在项目中见过太多这样的案例了。

下面这张图展示了三种延迟在光通信系统中的位置和关系:

光通信数据通路延迟分解 发送端 处理延迟 (编码/调制) 传输延迟 (光纤传输) 排队延迟 (缓冲区) 处理延迟 (解码/解调) 接收端 排队延迟影响处理延迟 总延迟 = 处理 + 传输 + 排队 图:光通信数据通路延迟分解示意图

从图上可以看得很清楚:数据从发送端出来,先经过处理延迟(编码、调制),然后在光纤里跑(传输延迟),到了中间节点可能还要排队(排队延迟),最后在接收端再经过一次处理延迟(解码、解调)。

而且,排队延迟和处理延迟之间还有反馈关系。处理慢了,排队就长了;排队长了,处理就更慢了。这就是为什么我总说,设计光通信系统时,一定要把这三个延迟放在一起考虑。

总结一下:

  • 传输延迟由物理距离决定,基本改不了
  • 处理延迟由芯片性能决定,选型时要仔细看
  • 排队延迟由网络负载决定,设计时要留余量

这三个加起来,才是你系统真正的延迟。

好了,这一章就讲到这里。记住,延迟不是简单的"光速问题",它是个系统工程问题。下一章咱们聊聊怎么测量这些延迟,到时候我会分享一些我在实验室里踩过的坑。


公众号:蓝海资料掘金营,微信deep3321