专栏算法工具链E2E保护机制说明与示例

E2E保护机制说明与示例

TROS.Assist2024-02-22
55
0

概述

E2E(End to End,端到端)实现数据从发送端到接收端的保护和校验。实现CRC校验(检查数据收发的一致性)和rolling counter机制(可以检查数据的丢包,重复和乱序问题)。communication支持E2E保护的协议包括zmq(tcp, ipc, epgm), shm(cpu shm, hbmem), pcie。其中对zmq相关协议保护序列化后的meta和data部分。对于shm和pcie协议保护meta部分(data部分communication层只是透传,shm和pcie由底层链路保证data部分的正确性)。

E2E保护的数据是序列化后的meta二进制数据(zmq协议再加上data部分),在接收端校验的时候也是校验的反序列化之前的meta二进制数据(zmq协议再加上data部分)。E2E保护和校验在communication的协议实现层实现,发送端在上层对消息序列化完成之后,会对meta二进制数据(zmq协议再加上data部分)进行E2E的计算,得到一个E2E header的结构(包含CRC,rolling counter等),连同消息传输到接收端;接收端在收到消息后,会对收到的数据进行检查,包括:CRC是否一致,rolling counter是否正确连续来判断数据传输是否发生了异常,如果发生异常则会报出错误日志,并上报E2E错误事件信息到用户设置的E2E事件监听回调函数中。

具体步骤

开启E2E保护机制

  1. 支持在配置文件配置相关信息,对协议开启E2E保护

上述配置文件中展示了将shm协议和zmq tcp协议开启E2E保护的配置,以及字段说明。如果在协议中开启了E2E,则该进程中所有使用该协议的链路都会开启E2E保护功能。

  1. 支持在配置文件单独针对participant_id配置E2E信息,只对某个节点开启E2E保护

  1. 支持注册的节点单独设置E2E信息

​如下面代码所示,可以针对某个注册的节点单独设置E2E配置信息,该方式同样是针对节点的E2E设置高于全局协议的E2E设置

  1. 在接收端配置E2E事件监听回调函数

如果开启了E2E保护,发送端代码层面无需其他处理,可以在接收端配置E2E事件监听回调函数,来将E2E错误的事件和具体信息上报给用户 E2EventType和E2ErrorInfo的定义在core_types.h中

  1. crc计算说明

crc32在XJ3/J5/S32G平台上使用了armv8a硬件指令对计算进行加速,因此在这些平台上推荐使用crc32作为E2E的校验方式。crc8和crc16无硬件加速的实现,计算速度会比较慢。另外,由于x86 PC平台上sse4.2指令中计算crc32的多项式和armv8上不同,crc32的计算结果无法兼容,因此crc32在x86平台上也无硬件加速。

算法工具链
杂谈
评论0
0/1000