linux - 带有 RT Linux(RT-PREEMPT 补丁)的 ZeroMQ 是实时的吗?
问题描述
我正在考虑在使用 RT-PREEMPT 修补的 Linux 内核上将 ZeroMQ 设置为消息代理(使其成为实时)。
基本上我想发布/订阅使用谷歌协议缓冲区序列化的短事件。
1. Event Model Object (App #1) --->
2. Serialize Google protobuf --->
3. ZeroMQ --->
4. Deserialize Google protobuf -->
5. Event Model object (App #2)
从#1 到#5,也许又回到#1,Linux RT-PREEMPT 的实时保证将如何受到 ZeroMQ 的影响?
我正在专门寻找 ZeroMQ 的实时功能。它提供这样的保证吗?
为了正确看待这个问题,假设我想知道 ZeroMQ 是否值得在时间紧迫的系统上部署,例如弹道导弹防御系统或波音 777 自动驾驶仪。
解决方案
首先 PREEMPT_RT 减少了任务的最大延迟,但整体系统吞吐量会更低,平均延迟可能会更高。
实时是一个广泛的主题;为避免混淆,我对实时的定义是每帧运行在 30hz 或更高的几十毫秒。
它是否提供此类(实时功能)保证?
正如已经回答的那样,它没有,它不是 PREEMPT_RT 的真正含义。
ZeroMQ 是否值得在时间关键型系统上部署?
时间关键是一个松散的定义;但是使用正确设计的协议 ZeroMQ 将为您提供消息传输方式(内存、TCP、UDP / 多播)的选择,并确保 ZeroMQ 做得很好。
IME ZeroMQ 通常在本地高速网络上快速交付 - 但如果您使用的是宽网络,这个数字会下降,并且随着端点的增加,这个数字可能会上升,具体取决于您在 ZeroMQ 中使用的模型。
对于实时系统,它不仅与传输速度有关,还需要考虑延迟和时间同步。
值得一读的文章0MQ:测量消息传递性能- 请注意,在消息传输开始时有很高 (1.5ms) 的延迟会很快稳定下来 - 如果您需要以高频率传输大量小消息,这可能很好 - 不是如果您以较低的速率传输一些较大的消息,那就太好了。
ZeroMQ 是否值得部署对时间要求严格的系统,例如弹道导弹防御系统或波音 777 自动驾驶仪。
了解您正在连接的拓扑以及延迟将如何影响事物并相应地设计协议非常重要。
因此,以 777 自动驾驶仪为例 - 几乎可以肯定,ZeroMQ 是合适的,因为稳定的飞机有很多惯性,因此机身需要时间来响应,而聪明之处在于自动驾驶仪内部,而不是太依赖于以高速率传入传感器数据。在 777 上,有一条 Arinc 429 总线连接航空电子设备,并且在任何给定总线上的有限数量的端点之间以最大 100kbit/s 的速度运行。
推荐阅读
- list - 过滤变量 map+list
- java - 为每个报告插件调用 Maven“进程类”阶段(多次执行)
- c# - 从 Adomd 执行时,mdx 查询“操作已取消”
- apache-spark - 大数据框自连接
- python - 使用步幅为 1 的最大池时的维度问题
- c# - 如何在C#中将带有图像的行转换为Base64中的excel文件读取
- visual-studio-code - 如何删除 Visual Code 中的背面标签?
- javascript - Repopulating table data in Laravel Pagination using JQUERY and AJAX
- c# - 2021 年适用于 C# 的 Facebook Graph API 客户端 - 它存在吗?
- salesforce - 按参考字段 SQQL Salesforce 分组