1. 以太网-SOME/IP 带宽与性能计算实战
在自动驾驶系统中,雷达目标列表(Radar Object List)通过 SOME/IP Event 进行传输是常见方案。但很多团队在实际部署时会遇到各种"玄学"问题:高峰时段偶发延迟、单播模式下消费者增多就卡顿、明明 CPU 资源充足但数据链路却不堪重负。这些问题看似随机,实则都可以通过精确计算来预测和避免。
提示:本文所有计算均基于 IPv4/UDP/SOME-IP 协议栈,这是自动驾驶领域最常见的组合。若使用其他协议栈(如 IPv6/TCP),头部开销需要相应调整。
1.1 数据帧的真实成本分析
当我们说"发送一个 Radar Object List"时,应用层看到的只是 payload 部分。但实际上,这个数据需要经过多层封装才能在网络中传输。让我们拆解一帧数据的完整构成:
-
应用层(SOME/IP):
- SOME/IP 基本头:16字节
- 应用 payload(P):可变,雷达目标列表通常在 500-2000 字节
-
传输层(UDP):
- UDP 头:8字节
-
网络层(IPv4):
- IPv4 头:20字节(无选项)
-
数据链路层(Ethernet):
- Ethernet II 头:14字节
- 可选 VLAN Tag:4字节
- FCS(帧校验序列):4字节
-
物理层开销:
- Preamble + SFD:8字节
- IFG(帧间间隙):12字节
这样算下来,一帧数据在线上传输时的总字节数为:
code复制B_wire = P + 16(SOME/IP) + 8(UDP) + 20(IP) + 14(Ethernet) + 4(FCS) + 8(Preamble) + 12(IFG)
= P + 82 字节
如果启用 VLAN,则再加 4 字节。
1.2 有效负载效率分析
有效负载效率 η 是指应用数据占总传输数据的比例:
code复制η = P / (P + 38) # 仅计算到链路层,不含物理层开销
这个值随着 P 增大而提高:
- 当 P=100 字节时,η≈72%
- 当 P=1000 字节时,η≈96%
这说明小数据包对带宽的利用率非常低。在自动驾驶系统中,我们应尽量避免频繁发送小数据包。
1.3 MTU 与分片问题
标准以太网的 MTU(最大传输单元)是 1500 字节,这是指 IP 层 payload 的最大长度。对于我们的协议栈:
code复制IP payload = UDP头(8) + SOME/IP头(16) + 应用数据(P)
因此,不触发分片的条件是:
code复制8 + 16 + P ≤ 1500 ⇒ P ≤ 1476 字节
建议保留一定余量,通常设置 P ≤ 1400 字节。如果应用数据超过这个值,应该考虑:
1.
