单一交换机

让发送方节点和接收方节点通过没有任何外部流量的单个交换机通信,我们可以建立最佳往返时间的基线。我们无法在交换机之外设置点对点连接,因为日志服务器必须在同一网络,因为我们很少在实践中看到这种案例。

20161212 04 ethernet01

图3 使用单个交换机的基线设置

我们将频率设置为100Hz,24小时记录数据。我们选择这个频率,是因为它是发送高级轨迹的通用控制速率,也是因为,万一有大量的异常值,10ms是安全底线。在正常操作中,我们使用100-200Hz之间的频率更新在每个设备上执行的控制器的设置目标(例如位置/速度/转矩),以及绕过本地控制器和远程控制输出时高达1KHz速率(PWM)。网络技术支持更高的速率,但通常有其他限制只能维持在1KHz左右(例如OS调度器和有限的传感器轮询速率)

首先,我们研究了底层嵌入式实时操作系统(RTOS)的抖动。下图显示了每10ms计时的理想信号与测量的发送时间戳之间的差异。99%在最低测量分辨率(250ns)内,并且总观察范围略低于6us。请注意,这显着优于我们在实时Linux上观察到的150us基本抖动范围(见指标和操作系统的重要性)。

20161212 04 ethernet02

图4 在STM32F407上的ChibiOS 2.6.8的操作系统抖动(24h)

下面的两个图显示了所有数据包的往返时间和相应的百分位数分布。总共有850万数据包,没有丢失一个,也没有一个顺序错误。

20161212 04 ethernet03

图5 200字节有效负载的RTT(24h)

20161212 04 ethernet04

图6 200字节有效负载的RTT放大视图(10分钟)

90%的数据包在194us内到达,抖动小于1微秒。大约80us的时间花在了线上,所以使用支持千兆(而不是100Mbit)的芯片可以将往返时间降低到120us。通常情况下,有三种异常的周期性重发模式会导致额外的延迟。

• 模式1:每隔5.3分钟发生一次,每次持续约15.01秒。在这段时间内,它总共增加了4 us的延迟。

• 模式2:每5秒发生一次,总是在210us。

• 模式3:大约每小时发生一次,并且将高达150us的线性增加延迟添加到10个分组。

观察10分钟可以发现模式1和2。所有这三种模式似乎都与实际时间有关,与速率和包计数无关。我们无法找到发生这些模式的根本原因,但在几次测试后,我们强烈怀疑所有这些都是由编程的固件引起的,而不是跟交换机或实际协议有关。

总的来说,这个初始数据看起来非常有希望能够使用UDP进行实时控制任务。随着更多的调整和更好的实现(例如,具有零复制和调谐选项的lwip),似乎最大抖动可能减少到6us以下,甚至可能低于1us。

交换机成本

如背景部分所述,大多数现代交换机使用“存储转发”方法,要求交换机在适当转发数据包之前完全接收数据包。因此,每个交换机的延迟成本是线路上的分组所花费的时间加上任何交换机开销。线上的时间是固定的(2.03us或20.03us每字节),但开销取决于交换机实现。可能很难找到特定设备的良好性能数据,因此,如果您需要评估硬件,根据您的要求,您可能需要执行自己的基准测试。

20161212 04 ethernet05

图7 附加交换机的基准设置

对于这个基准测试,我们测试了以下三个交换机,并将它们单独添加到基线设置,如上所示,

• MICREL KSZ8863 (嵌入在X系列执行器中)

• NETGEAR ProSAFE GS105

• MikroTik RB750Gr2 (RouterBOARD hEX) (技术上是一个路由器,但禁用DHCP使它的行为类似于一个交换机)

总共有大约1百万个数据包。同样,我们没有观察到任何数据包丢失或无序传递。

20161212 04 ethernet06

_图8 通过不同交换机的RTT比较(35min) _

下图所示添加抖动特性的时间序列的放大视图。模式1和3似乎不受附加交换机的影响。模式2维持在210us,并在较高往返时间时会消失,显示发送方的接收步骤出问题了。

20161212 04 ethernet07

_图9交换机比较的放大视图(10分钟) _

KSZ8863和RB750Gr2增加了2.9us和3.6us的恒定交换延迟,以及分别为40.6 s和4.06us的导线时间到RTT。增加的抖动似乎远低于1us,可以忽略不计。令人惊讶的是,GS105似乎在这个应用案例中存在问题,比KSZ8863有更高的延迟和更多的抖动,即使它是使用千兆网。更多详情见下表。

20161212 04 ethernet08

根据GS105规格表,1 Gbit/s网络增加的网络延迟应低于10us,在100 Mbit / s网络时为20us。我们做了额外的测试,当所有端口专门使用100 Mbit / s或1 Gbit / s时,GS105似乎按照规范执行。 我们还进行了另一个基准测试,用RB750Gr2替代GS105。虽然我们发现0.5us的一致改进,但我们不认为这足以重新运行所有测试。

扩展到更多设备

到目前为止,所有测试都测量了发送方节点和单个目标节点之间的往返时间。由于真实的机器人系统可能包含许多设备,例如每轴或每个自由度都有一个,我们还研究了UDP如何在同一网络上使用多个设备执行。在与其他机器人工程师的交流中,我们常常发现,如果多个数据包同时到达交换机,则会有明显的数据包丢失。如果所有设备都连接到单个交换机,则会发生最坏的情况,如下所示。

20161212 04 ethernet09

图10 多个设备连接到单个交换机

为了测试实际情况,我们设置了一个测试,包括连接到单个48端口以太网交换机(GS748T)的40 HEBI Robotics I/O板。所有设备都运行与之前相同的(接收器)固件,因此发送单个广播消息触发40个响应数据包,导致超过10 KB的总流量在250ns内到达交换机。这些微暴流(Microbursts)远远超出了千兆以太网的可持续带宽。以下所示的设置代表了高自由度系统,例如没有菊花链的全身仿人机器人。

20161212 04 ethernet10

_图11 40 HEBI Robotics I / O板的网络测试设置 _

我们还要提到,这种设置极大地受益于使用标准以太网栈的两个副作用。首先,不需要任何手动寻址,因为DHCP和设备特定的全局唯一的MAC地址。第二,我们能够在3-6秒内同时在所有40个设备上重新编程固件,这是因为我们有一个具有TCP / IP支持的引导加载程序。如果任何步骤需要手动干预,则设置这样的系统将是非常繁琐的。

由于组合响应导致比发送器设备更容易处理的负载,我们用运行Scientific Linux 6.6实时操作系统的技嘉Brix i7-4770R台式计算机替换了发送方I/O板。我们按照“指标和操作系统的重要性”中所述设置系统,并禁用防火墙。

以100Hz运行基准测试约90分钟,得到超过20万次测量结果。

同样,我们首先看看底层操作系统的抖动。下图显示了每10ms计时的理想信号与测量的发送时间戳之间的差异。它表明,这种设置遭受比嵌入式RTOS更多的抖动数量级。注意,相应的jHiccup控制图看起来与操作系统博客文章中的相同。

20161212 04 ethernet11

图12 使用MRG Realtime的Scientific Linux 6.6的操作系统抖动

下图显示了每次测量的往返时间。令人惊讶的是,单一来源的数据包同样没有丢失或失序接收。 不仅数据包没有丢失,实际上所有数据包都存储在交换机1.6MB的内部缓冲区排队,并尽可能快地转发到目标端口。由于发送方是通过千兆网连接,数据包2us左右就会到达。图表中的时间轴基于传输时间戳,因此每个周期在图表中显示为垂直列。我们还在1KHz下进行了相同的测试,得到的结果是相同的。

20161212 04 ethernet12

图13 40台设备的RTT的放大试图

20161212 04 ethernet13

_图14 40台设备的RTT (90 分钟) _

但是,延迟和抖动的数量比我们预期的更糟。我们预计大多数列开始在180us左右,结束在280us。虽然这种情况偶尔发生,大多数列开始高于300us。经过初步研究,我们怀疑这种延迟主要是由Linux NAPI使用轮询模式而不是中断,以及使用低成本网络接口与次优设备驱动程序配合造成的。虽然我们预计操作系统和驱动程序堆栈会引入额外的延迟和抖动,但我们对数量级感到惊讶。

安装的网络接口和驱动程序如下。

20161212 04 ethernet14

结论

消费级以太网网络也可以在延迟方面表现出非常确定的性能。在发送的超过1亿个数据包中,我们没有发现任何数据包丢失或无序传递。即使与40个智能设备进行通信,这些智能设备以1KHz的速率表示总共1.600个传感器,我们发现网络依然非常可靠。虽然我们仍然认为大型和危险的工业机器人应该使用专门的工业网络设备控制,但标准UDP可以满足大多数机器人应用。

我们还发现大多数观察到的延迟和抖动是由底层操作系统及其设备驱动程序引起的。为了进一步说明这一点,我们对基准设置与运行在不同操作系统上的发送方节点进行了额外的比较。配置如下:

• ChibiOS 2.6.8 with lwIP 1.4.1 on 168 MHz STM32F407

• Windows 10 on Gigabyte Brix-i7-4470R with Realtek NIC

• Scientific Linux 6.6 with MRG Realtime on Gigabyte Brix-i7-4470R with Realtek NIC

下面的两个图表显示了通过单个交换机与单个I/O板通信的每个系统的往返时间。注意,Linux和Windows通过千兆连接到交换机,并且应该在到达嵌入式设备前40us内接收到数据报。

20161212 04 ethernet15

图15 RTOS和RT-Linux和Windows的基准RTT比较(10h)

20161212 04 ethernet16

图16 RTOS和RT-Linux和Windows的基准RTT放大视图比较(10分钟)

我们意识到有许多更有趣的问题,超出了这项工作的范围。我们目前正在考虑这些网络相关的主题:

• 来自不同供应商的设备驱动程序和网络接口的比较

• 不受控制的流量(例如流媒体)的性能影响

• 冗余路由和突然断开连接

• 通过无线网络控制

• 使用IEEE 1588v2的时钟漂移和时间同步

(张有凤编译整理)