Eclipse iceoryx

实现恒定时间内几乎无限制的数据传输

在汽车、机器人和游戏等领域,必须在系统的不同部分之间传输大量数据。使用Linux等操作系统时,必须使用进程间通信(IPC)机制传输数据。Eclipse iceoryx是一种中间件,它使用零拷贝、共享内存的方法来优化进程间通信。

Eclipse iceoryx背后的技术起源于汽车领域。在过去的几十年里,从发动机控制系统到驾驶员辅助,最后到自动驾驶,都发生了演变。与此同时,电子控制单元(ECU)内不同执行线程之间交换的数据从KB/s增加到GB/s(图1)。

与机器人和物联网(IoT)等领域类似,汽车中使用的常见通信模式是发布/订阅。用于进程间通信(IPC)的典型中间件解决方案在将消息传递给中间件或从中间件传递消息时复制消息。

在中间件堆栈内部,甚至可能创建了更多的副本,或者消息被序列化了。因此,如果有n个使用者订阅了一个发布者,那么你可能创建了至少n+1个消息副本(图2)。

When speeds reach GB/s, every message copy that’s created in the communications middleware has a significant cost in terms of runtime and latency. The goal should always be to use precious runtime for functional computations, not for shifting around bytes in memory.

真零拷贝,共享内存数据传输

Eclipse iceoryx是一种基于共享内存的IPC技术。就其本身而言,这并不是一项新的创新,因为这种方法自20世纪70年代以来一直在使用。然而,我们更进一步,将其与发布/订阅体系结构、服务发现、现代C++和无锁算法相结合。通过添加避免复制的应用程序编程接口(API),我们可以实现我们所说的真正的零复制-一种从发布者到订阅者的端到端方法,而无需创建单个副本。

使用iceoryx API,发布者将消息直接写入以前从中间件请求的内存块。当消息被传递时,订阅者接收对这些内存块的引用,同时用可配置的容量维护他们自己的队列。

每个订阅者都可以有一个唯一的视图,查看哪些消息仍在处理中,哪些消息可以丢弃。iceoryx中间件在后台计算引用,并在没有读取器时释放内存块(图3)。

iceoryx API支持轮询访问和事件驱动的回调交互。这实现了广泛的应用,包括涉及实时系统的应用。共享内存可以划分为具有不同访问权限和可配置内存池的段。

一些技术细节

iceoryx的一个重要方面是,订阅者在读取数据的时候,发布者依然可以写,因为没有来自订阅者的干扰。如果前一个内存块仍在使用,则只需为发布者分配一个新的内存块。

如果订阅服务器在轮询模式下运行,并且内存块被排队,直到订阅服务器再次检查队列,我们可以在称之为“安全溢出”的过程中使用无锁队列回收旧的内存块

无锁队列能够使我们无论连续订阅者轮询之间的时间有多长,都能与订阅者就存储在队列中最新消息的最大数量达成高效内存契约。在常见的用例中,这是一种非常有用的方法,例如那些具有高频发布者和只对最新、最棒的消息感兴趣的订阅者的用例。

因为它只是传递指针,所以iceoryx可以在不实际传输数据的情况下进行数据传输。无论消息大小如何,这种方法都可以实现恒定的消息传输时间。用户确实必须将数据写入共享内存一次,但无论何时生成数据以进行发送,都需要进行此写入。

由于消息负载未序列化,因此对于发布者和订阅者,消息必须具有相同的内存布局。对于特定处理器上的IPC,可以通过使用具有相同设置的相同编译器来确保这一点。

消息不能包含指向进程内部虚拟地址空间中内存的任何指针。此限制也适用于基于堆的数据结构。如果不能满足这些约束,iceoryx仍然可以与处理共享内存中的序列化和反序列化的顶级层一起使用。在这种情况下,iceoryx处理不创建副本的底层传输。

Eclipse iceoryx依赖于POSIX API。我们目前支持Linux和QNX作为底层操作系统。由于有时API略有不同,因此在将iceoryx移植到另一个基于POSIX的操作系统时可能需要进行小的调整。

与现有中间件框架的集成

Eclipse iceoryx是一种数据无关的共享内存传输机制,它提供了一个相当低层的API。我们假设API不是由用户直接访问的,而是集成到一个更大的框架中,该框架提供了一个高层API,也许还有一些工具。示例包括AUTOSAR自适应平台和机器人操作系统(ROS)。

在这两种情况下,我们都确保规范支持零拷贝API。如果目标框架也基于发布/订阅体系结构,那么iceoryx的集成非常简单。目前已经有公开的针对ROS2和eCAL的iceoryx集成。

此外,我们已经确定了Eclipse家族内部协同增效的潜力。例如,将Eclipse Cyclone DDS和iceoryx相结合,为IPC和网络通信创建了开放且强大的通信中间件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值